2012-11-27 17 views
8
Ben three.js bir ağ üzerinde bir doku kuruyorum

üzerinde doku değiştirme ve göründüğü yüklediğinde ben de istiyorum nasıl:Three.js malzemesi

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

ama doku değiştirmek istiyorum bir THREE.ShaderMaterial üzerinde bir doku nasıl değiştirebileceğini,

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

ancak bu ağ üzerinde görüntülenen doku değişmez: ben bu denedi, daha sonra bu ağ üzerinde?

+1

Daha önce yaptığınız gibi 'obj.mesh.material.uniforms.texture.value' değerini atamayı deneyin. Ayrıca doku başarılı bir şekilde yüklendikten sonra "needsUpdate" bayrağını ayarlamayı da düşünün (yük olayına abone oluyor). – Matthias

+0

haklıydınız, bunu 'texture.value' olarak atamam gerekiyor, teşekkürler – 0xor1

+0

Nice. Bu soruyu kapatabilmek için bir cevap ekledim. – Matthias

cevap

10

Doku yerine obj.mesh.material.uniforms.texture.value atayın. Ayrıca doku başarıyla yüklendikten sonra (yük olayına abone olarak) needsUpdate bayrağını ayarlamayı düşünün.