3

こんにちは、これが私のコードの一部です - 地球 :)

    function createGlobe(){
        var normalMap = THREE.ImageUtils.loadTexture("images/earth_normal_2048.jpg");
        var surfaceMap = THREE.ImageUtils.loadTexture("images/earth_surface_2048.jpg");
        var specularMap = THREE.ImageUtils.loadTexture("images/earth_specular_2048.jpg");

        var shader = THREE.ShaderLib["phong"];
        var uniforms = THREE.UniformsUtils.clone(shader.uniforms);

        uniforms["tNormal"] = {type:"t", value:normalMap};
        uniforms["tDiffuse"] = {type:"t", value:surfaceMap};
        uniforms["tSpecular"] = {type:"t", value:specularMap};

        //uniforms["enableDiffuse"] = true;
        //uniforms["enableSpecular"] = true;

        var shaderMaterial = new THREE.ShaderMaterial({
            fragmentShader:shader.fragmentShader,
            vertexShader:shader.vertexShader,
            uniforms:uniforms,
            lights:false
            });

        var globeGeometry = new THREE.SphereGeometry(1,32,32);

        //tangents are needed for the shader
        globeGeometry.computeTangents();

        globe = new THREE.Mesh(globeGeometry, shaderMaterial);

        globe.rotation.z = 0.41;

        earthgroup.add(globe);

        }

問題のある箇所は ShaderMaterial パラメータ "lights:true" にあります。設定すると、次のエラーが発生します。

Uncaught TypeError: Cannot set property 'value' of undefined three.js:23875
refreshUniformsLights three.js:23875
setProgram three.js:23593
renderBuffer three.js:22018
renderObjects three.js:22689
render three.js:22563
render Earth-clouds.html:100
wrappedCallback

これは

function refreshUniformsLights ( uniforms, lights ) {

        uniforms.ambientLightColor.value = lights.ambient;
                ....
}

ライトが定義されていないように思えますか?さて、私はそれらを手に入れました。lights:false を設定すると、デフォルトのマテリアルで地球がレンダリングされます。私のコードで発生する可能性のあるバグのように見えます:-)

4

0 に答える 0