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?
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
bạn đã đúng Tôi cần phải gán nó cho 'texture.value', cảm ơn – 0xor1
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