2012-11-27 61 views
8

我在three.js所建立的質地上的網狀紋理加載時,它看起來如何,我希望它太: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紋理?

+1

嘗試像以前一樣將它分配給'obj.mesh.material.uniforms.texture.value'。也可以考慮在紋理成功加載(訂閱加載事件)後設置'needsUpdate'標誌。 – Matthias

+0

你說得對,我需要把它分配給'texture.value',謝謝 – 0xor1

+0

很好。我添加了一個答案,所以你可以關閉這個問題。 – Matthias

回答

10

改爲將紋理分配給obj.mesh.material.uniforms.texture.value。也可以考慮在紋理成功加載後(通過訂閱加載事件)設置needsUpdate標誌。