9

three.js でメッシュにテクスチャを設定していますが、それが読み込まれると、希望どおりに見えます。

        texture = THREE.ImageUtils.loadTexture("textures/hash.png");

        texture.needsUpdate = true;

        uniforms = {
            color: { type: "c", value: new THREE.Color( 0xffffff ) },
            texture: { type: "t", value: texture },
        },  

        vertexShader = "varying vec2 vUv; void main() {vUv = uv;gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );}",

        fragmentShader = "uniform vec3 color; uniform sampler2D texture; varying vec2 vUv; void main() { vec4 tColor = texture2D( texture, vUv ); gl_FragColor = vec4( mix( color, tColor.rgb, tColor.a ), 1.0 );}",

        material = new THREE.ShaderMaterial({
            uniforms : uniforms,
            vertexShader    : vertexShader,
            fragmentShader  : fragmentShader
        });

しかし、後でこのメッシュにあるテクスチャを変更したいので、これを試しました:

obj.mesh.material.uniforms.texture = THREE.ImageUtils.loadTexture("textures/1.png");
obj.mesh.material.uniforms.texture.needsUpdate = true;

しかし、これはメッシュに表示されているテクスチャを変更しません。どうすれば THREE.ShaderMaterial のテクスチャを変更できますか?

4

1 に答える 1

11

代わりにテクスチャを割り当てobj.mesh.material.uniforms.texture.valueます。needsUpdateまた、テクスチャが正常にロードされた後にフラグを設定することも検討してください (load イベントをサブスクライブすることにより)。

于 2012-11-27T14:27:34.987 に答える