2

私は、Oreilly の WebGL 入門書にある演習に取り組んでいます。

次の行により、実行時エラーが発生します。私はグーグルで検索しましたが、他の誰も問題を抱えていないので、何が間違っているのでしょうか?

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/

どうしたの?!

4

2 に答える 2

9

命名規則が変更されました。これで機能するはずです

var shader = THREE.ShaderLib[ "normalmap" ];
于 2013-01-21T19:22:19.203 に答える
4

github リポジトリから:

「この本のコードは、libs フォルダーにある古い Three.js を使用すると機能します。r50 以降では、次のようにマップを MeshPhongMaterial のプロパティとして設定するだけで、はるかに簡単になります。

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

それだけです。uniforms や computeTangents() は必要ありません。"

これはうまくいきました!

于 2013-10-03T05:02:32.287 に答える