2012-11-27 15 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' को असाइन करने का प्रयास करें जैसा आपने पहले किया था। बनावट सफलतापूर्वक लोड होने के बाद 'जरूरत अद्यतन' ध्वज सेट करने पर विचार करें (लोड ईवेंट की सदस्यता लेना)। – Matthias

+0

आप सही थे, मुझे इसे 'texture.value' को असाइन करने की आवश्यकता थी, धन्यवाद – 0xor1

+0

अच्छा। मैंने एक जवाब जोड़ा ताकि आप इस सवाल को बंद कर सकें। – Matthias

उत्तर

10

बनावट को obj.mesh.material.uniforms.texture.value पर हस्ताक्षर करें। बनावट सफलतापूर्वक लोड होने के बाद needsUpdate ध्वज सेट करने पर विचार करें (लोड ईवेंट की सदस्यता ले कर)।