2013-01-21 62 views
2

我正在通過Oreilly的WebGL入門書中發現的練習。THREE.js - 無法讀取未定義的屬性'lib'(THREE.ShaderUtils.lib [「normal」])

以下行會導致運行時錯誤。我搜索了一下,沒有看到其他人有這個問題,所以我做錯了什麼?

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; 

的注意線失敗W /以下錯誤:

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/

發生了什麼?

回答

9

的命名規則改變了,這應該工作現在

var shader = THREE.ShaderLib[ "normalmap" ]; 
+0

地獄呀,我知道它必須是這樣的東西。感謝dood! –

+0

我遇到了同樣的問題; \t var uniforms = THREE.UniformsUtils.clone(shader.uniforms); \t \t uniforms ['tNormal']。texture = normalMap; .texture調用失敗。那也改變了嗎?如果是這樣,那麼最新的Three.js着色器教程在哪裏? –

+0

在r55'THREE.ShaderUtils.lib [「normal」]'移到'THREE.ShaderLib [「normalmap」]''。 – mrdoob

4

從GitHub庫:

「這本書的代碼,如果你libs文件夾中使用舊three.js所工作 起價R50向上,這是簡單得多,只需設置地圖爲MeshPhongMaterial的特性,如:

var material = new THREE.MeshPhongMaterial({ 
    map: earthSurfaceMap, 
    normalMap: earthNormalMap, 
    specularMap: earthSpecularMap}); 

就是這樣,沒必要制服或computeTan的紳士()「。

這工作!

+0

超棒的東西!謝謝! –

相關問題