我正在完成Oreilly在WebGL入门书中找到的练习。
以下行导致运行时错误。我用Google搜索,没有看到其他人有问题,所以我做错了什么?
var specularMap= THREE.ImageUtils.loadTexture("WebGLBook/images/earth_specular_2048.jpg");
var shader = THREE.ShaderUtils.lib[ "normal" ]; <-- fails
var uniforms = THREE.UniformsUtils.clone(shader.uniforms);
uniforms['tNormal'].texture = normalMap;
uniforms['tDiffuse'].texture = surfaceMap;
注意到的行失败,出现以下错误:
Uncaught TypeError: Cannot read property 'lib' of undefined solar-system-spec-map.html:60
Earth.createGlobe solar-system-spec-map.html:60
Earth.init solar-system-spec-map.html:51
EarthApp.init solar-system-spec-map.html:33
(anonymous function) solar-system-spec-map.html:93
deferred.resolveWith jquery-1.6.4.js:1016
jQuery.extend.ready jquery-1.6.4.js:437
DOMContentLoaded
这有点奇怪的是,“ShaderUtils”没有列在THREE.js文档中...... http://mrdoob.github.com/three.js/docs/55/
发生了什么事??
答案 0 :(得分:9)
命名约定已更改,现在应该可以使用
var shader = THREE.ShaderLib[ "normalmap" ];
答案 1 :(得分:4)
来自github回购:
“如果您在libs文件夹中使用较旧的Three.js,那么本书的代码就可以正常工作。 从r50开始,它更简单,只需将地图设置为MeshPhongMaterial的属性,如下所示:
var material = new THREE.MeshPhongMaterial({
map: earthSurfaceMap,
normalMap: earthNormalMap,
specularMap: earthSpecularMap});
就是这样,不需要制服或computeTangents()。“
这很有用!