5
私はちょうど次のコードで私のシーンでキューブにNormal map Ninja demoを適用しようとした - のdevの枝から新しい最新Three.jsのバージョンを使用して:THREE.jsの法線マップを正しく作成する方法は?
// common material parameters
var ambient = 0x050505, diffuse = 0x331100, specular = 0xffffff, shininess = 10, scale = 23;
// normal map shader
var shader = THREE.ShaderUtils.lib[ "normal" ];
var uniforms = THREE.UniformsUtils.clone(shader.uniforms);
uniforms[ "enableAO" ].value = true;
uniforms[ "enableDiffuse" ].value = false;
uniforms[ "enableSpecular" ].value = false;
uniforms[ "enableReflection" ].value = true;
uniforms[ "tNormal" ].texture = THREE.ImageUtils.loadTexture("normal.jpg");
uniforms[ "tAO" ].texture = THREE.ImageUtils.loadTexture("ao.jpg");
uniforms[ "tDisplacement" ].texture = THREE.ImageUtils.loadTexture("displacement.jpg");
uniforms[ "uDisplacementBias" ].value = - 0.428408 * scale;
uniforms[ "uDisplacementScale" ].value = 2.436143 * scale;
uniforms[ "uDiffuseColor" ].value.setHex(diffuse);
uniforms[ "uSpecularColor" ].value.setHex(specular);
uniforms[ "uAmbientColor" ].value.setHex(ambient);
uniforms[ "uShininess" ].value = shininess;
uniforms[ "tCube" ].texture = reflectionCube;
uniforms[ "uReflectivity" ].value = 0.1;
uniforms[ "uDiffuseColor" ].value.convertGammaToLinear();
uniforms[ "uSpecularColor" ].value.convertGammaToLinear();
uniforms[ "uAmbientColor" ].value.convertGammaToLinear();
var parameters = { fragmentShader: shader.fragmentShader, vertexShader: shader.vertexShader, uniforms: uniforms, lights: true, fog: false };
var displacementMaterial = new THREE.ShaderMaterial(parameters);
/*
var diamond = new THREE.Diamond({
material: bumpmapMaterial
});
*/
var diamond = new THREE.Mesh(
new THREE.CubeGeometry(50, 50, 50),
displacementMaterial
);
私は、しかし、Chromeで次のWebGLのエラーを取得しています:
GL_INVALID_OPERATION : glDrawXXX: attempt to access out of range vertices
Firefoxでは、このようなエラーは発生しませんが、キューブは表示されません。 標準色のMeshLambertMaterial
を使用すると、すべて正常に動作しています。したがって、ShaderMaterial
と競合する必要があります。 MASTERブランチから最新のThree.jsバージョンを使用しても状況は改善されません - 同じエラーが発生します。
なぜこのような場合がありますか、それを動作させるために変更する必要があるのは何ですか?
論理的でなくても、このようなシェーダはImmediateRenderObjectで動作しない可能性がありますか? devブランチのバッファに入ることができる情報は、頂点の位置、法線、UV、色ですが、頂点の接線はありません。しかし、それらは正しいノーマルマップレンダリングに必要なようです。これは正しいのですか、または「通常の」シェーダをImmediateRenderObjectに適用する方法はありますか? :) – user1495743