1
我想用Three.js的normalmap着色器渲染一个位移贴图的球体。我也在我的场景中使用PointLight。Three.js normalmap位移光
问题是我无法让我的位移球体正确点亮。实际上,如果我省略纹理,则球体全部为黑色且具有正常贴图着色器材质,但使用简单的meshLambertMaterial时,它会正确点亮。 (见下图)
我试图用normalmap /位移着色器和meshLambertMaterial做一个多物质网格,但结果并不确定。
我是否在创建着色器材质时发生了错误(请参阅下面的代码)?
var specularColor = 0xcccccc;
var diffuseColor = 0xffffff;
var ambiantColor = 0x888888;
var shader = THREE.ShaderLib["normalmap"];
var uniforms = THREE.UniformsUtils.clone(shader.uniforms);
uniforms["enableAO"].value = 0;
uniforms["enableDiffuse"].value = 1;
uniforms["enableSpecular"].value = 1;
uniforms["enableReflection"].value = 0;
uniforms["enableDisplacement"].value = 1;
uniforms["tNormal"].value = normalTexture;
uniforms["tSpecular"].value = specularTexture;
uniforms["uNormalScale"].value = 1.0;
uniforms["tDisplacement"].value = heightTexture;
uniforms["uDisplacementScale"].value = 5;
uniforms["uDiffuseColor"].value.setHex(diffuseColor);
uniforms["uSpecularColor"].value.setHex(specularColor);
uniforms["uAmbientColor"].value.setHex(ambiantColor);
uniforms["uShininess"].value = 1;
var parameters = {
fragmentShader : shader.fragmentShader,
vertexShader : shader.vertexShader,
uniforms : uniforms,
lights : true
};
var material = new THREE.ShaderMaterial(parameters);
var geometry = new THREE.SphereGeometry(radius, 100, 100);
geometry.computeTangents();
var mesh = new THREE.Mesh(geometry, material);
良好的渔获,我在移民从R50到R58错过了这个,谢谢。 – Typedef 2013-05-01 17:21:27