2012-11-27 53 views
8

Tôi đang thiết lập một kết cấu trên lưới trong three.js và khi nó tải nó trông như thế nào tôi muốn nó quá:three.js thay đổi kết cấu trên các tài liệu

 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 
     }); 

nhưng tôi muốn thay đổi kết cấu đó là trên lưới này sau này, tôi đã cố gắng này:

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

nhưng điều này không làm thay đổi kết cấu được hiển thị trên lưới, làm thế nào tôi có thể thay đổi một kết cấu trên THREE.ShaderMaterial?

+1

Hãy thử gán nó cho 'obj.mesh.material.uniforms.texture.value' như bạn đã làm trước đây. Ngoài ra, hãy xem xét đặt cờ 'needsUpdate' sau khi kết cấu đã tải thành công (đăng ký sự kiện tải). – Matthias

+0

bạn đã đúng Tôi cần phải gán nó cho 'texture.value', cảm ơn – 0xor1

+0

Tốt. Tôi đã thêm một câu trả lời để bạn có thể đóng câu hỏi này. – Matthias

Trả lời

10

Thay vào đó, hãy gán texture cho obj.mesh.material.uniforms.texture.value. Ngoài ra, hãy xem xét đặt cờ needsUpdate sau khi kết cấu đã tải thành công (bằng cách đăng ký sự kiện tải).

Các vấn đề liên quan