您好我正在尝试使用threejs进行简单的着色。我正在使用O'reilly的Up and Running书。
一切都运转良好,直到我尝试这样做:
var shader = THREE.ShaderLib["normal"];
var uniforms = THREE.UniformsUtils.clone(shader.uniforms);
uniforms["tNormal"].texture = normalMap;
uniforms["tDiffuse"].texture = surfaceMap;
uniforms["tSpecular"].texture = specularMap;
这一直在抛出这个错误:
TypeError:uniforms.normal未定义 [打破此错误]
制服[“normal”]。texture = normalMap;
我一直在网上寻找一段时间,我不确定需要改变哪种语法来解决这个问题。
感谢任何帮助。
答案 0 :(得分:5)
我认为应该是这样的:
uniforms["tNormal"] = {
texture: normalMap
};
tDiffuse
,tSpecular
相同。
答案 1 :(得分:2)
我发现在运行代码时,在行之后:
var shader = THREE.ShaderLib["normal"];
var uniforms = THREE.UniformsUtils.clone(shader.uniforms);
制服是一个具有一个成员的对象:不透明度。因此制服[“tNormal”] 尚不存在。正如奥利维亚建议的那样,您可以使用以下方法添加:
uniforms["tNormal"] = {
texture: normalMap
};
答案 2 :(得分:2)
您的错误和代码不同。错误报告未定义的纹理:
uniforms["normal"].texture = normalMap;
您引用的代码说明您正在使用:
uniforms["tNormal"].texture = normalMap;
。
我正在研究同一本书的例子,试试这个:
var shader = THREE.ShaderLib[ "normalmap" ];
var uniforms = THREE.UniformsUtils.clone( shader.uniforms );
uniforms[ "tNormal" ].texture = normalMap;
uniforms[ "tDiffuse" ].texture = surfaceMap;
uniforms[ "tSpecular" ].texture = specularMap;
uniforms[ "enableDiffuse" ].value = true;
uniforms[ "enableSpecular" ].value = true;