Javascript 3.js遮阳制服
嗨,我正在尝试用3J做一个看起来很简单的着色。我正在用O'reilly写的《启动和运行》一书 一切正常,直到我尝试这样做:Javascript 3.js遮阳制服,javascript,html,three.js,webgl,Javascript,Html,Three.js,Webgl,嗨,我正在尝试用3J做一个看起来很简单的着色。我正在用O'reilly写的《启动和运行》一书 一切正常,直到我尝试这样做: var shader = THREE.ShaderLib["normal"]; var uniforms = THREE.UniformsUtils.clone(shader.uniforms); uniforms["tNormal"].texture = normalMap;
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未定义
[在此错误上中断]
制服[“法线”]。纹理=法线贴图
我已经在网上浏览了一段时间,不确定需要修改什么语法来解决这个问题
非常感谢您的帮助。我想应该是这样的:
uniforms["tNormal"] = {
texture: normalMap
};
对于
tDiffuse
,t特定的我发现在运行代码时,在下列行之后:
var shader = THREE.ShaderLib["normal"];
var uniforms = THREE.UniformsUtils.clone(shader.uniforms);
制服是一个具有一个成员的对象:不透明度。因此,制服[“正常的”]还不存在。正如Olivia所建议的,您可以在中添加以下内容:
uniforms["tNormal"] = {
texture: normalMap
};
您的错误和代码不同。此错误报告以下对象上的未定义纹理:
制服[“法线”]。纹理=法线贴图代码>
您引用的代码说明您正在使用:
制服[“tNormal”]。纹理=法线贴图代码>
我正在编写同一本书的示例,请尝试以下内容:
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;
shader.uniforms
没有“tNormal”属性。你想用这个着色器做什么?我一直跟着书。我还为漫反射和镜面反射绘制了其他线条,它们也会引发类似的错误。