В моем проекте three.js я пытаюсь изменить цветную текстуру, нажав на изображение.Обновление текстуры в three.js
Вот идет мой код:
...
var col;
document.getElementById('image3').onclick = function() {
col=("textures/synleder/synleder_COL.png");
};
var textures = {
color: THREE.ImageUtils.loadTexture(col),
normal: THREE.ImageUtils.loadTexture('textures/synleder/synleder_NRM.jpg'),
specular: THREE.ImageUtils.loadTexture('textures/synleder/synleder_SPEC.jpg'),
};
textures.color.wrapS = textures.color.wrapT = THREE.RepeatWrapping;
textures.color.repeat.set(2, 2);
textures.normal.wrapS = textures.normal.wrapT = THREE.RepeatWrapping;
textures.normal.repeat.set(2, 2);
textures.specular.wrapS = textures.specular.wrapT = THREE.RepeatWrapping;
textures.specular.repeat.set(2, 2);
var shader = THREE.ShaderLib[ "normalmap" ];
var uniforms = THREE.UniformsUtils.clone(shader.uniforms);
uniforms[ "tNormal" ].value = textures.normal;
uniforms[ "uNormalScale" ].value.y = 2;
var material2 = new THREE.MeshPhongMaterial({
map: textures.color,
specularMap: textures.specular,
normalMap: uniforms[ "tNormal" ].value,
normalScale: uniforms[ "uNormalScale" ].value,
});
loader = new THREE.JSONLoader(true);
document.body.appendChild(loader.statusDomElement);
loader.load("geo/kugel5.js", function(geometry) { createScene(geometry, scale, material2) });
...
, что я пытался до сих пор является то, что я определил переменные седловины, который должен содержать путь моих цветных текстур. И, щелкнув по изображению3, новая текстура цвета должна быть видна на моей геометрии. К сожалению, он не работает. После некоторых исследований я нашел эту тему: Three.js texture/image update at runtime
, и я думаю, что я должен добавить что-то обновить текстуру: textures.color.needsUpdate=true;
Но когда я добавить это в мой код, как:
document.getElementById('image3').onclick = function() {
col=("textures/synleder/synleder_COL.png");
textures.color.needsUpdate=true;
};
мой геометрия исчезает. Кто-нибудь знает, что я сделал неправильно?
Большое спасибо!
спасибо Геро за быстрый ответ. Теперь геометрия не исчезает, но цветная карта не отображается, поэтому на самом деле ничего не обманывает. Должен ли я добавить второй «textures.color.needsUpdate = true;» где-то еще в моем коде? – user2524500
document.getElementById ('image3'). Onclick = function() { textures.color = THREE.ImageUtils.loadTexture ("textures/synleder/synleder_COL.png", function() { textures.color.needsUpdate = true; }); material2.map = textures.color; textures.color.wrapS = textures.color.wrapT = THREE.RepeatWrapping; textures.color.repeat.set (2, 2);}; – Gero3
Спасибо, Геро, все в порядке! Ты мне очень помог. Большое спасибо. – user2524500