Я пытаюсь изменить цвет моей 3D-модели за текстурой png, которую я установил (включая прозрачность).
Я провел много исследований и, наконец, нашел пример с кубом, который действительно работает, но я не могу понять, как это сделать с моей 3D-моделью gltf (не BoxGeometry).
МЕТОД:
Определите массив из двух материалов, первый — моя текстура png с прозрачностью = true; второй - это основной материал с однотонным цветом (цвет я смогу изменить позже...)
var materialBack = new THREE.MeshBasicMaterial({color: 0xfadce6});
var materialTxt = new THREE.MeshBasicMaterial({map: mytexture,transparent: true});
var materials = [materialBack, materialTxt];
Он отлично работает с кубом:
var geometry = new THREE.BoxBufferGeometry();
geometry.clearGroups();
geometry.addGroup( 0, Infinity, 0 );
geometry.addGroup( 0, Infinity, 1 );
var cube = new THREE.Mesh( geometry, materials );
Проблема: я не могу понять, как сделать то же самое, когда моя модель на самом деле является импортированной GLTF, а не BoxBufferGeometry. Похоже, мы не можем присвоить массив o.material:
var loader = new THREE.GLTFLoader();
loader.load(mymodel.glb, function(gltf) {
gltf.scene.traverse((o) => {
if (o.isMesh) {
o.material = materials;
}
scene.add(gltf.scene);
});
Я также пытался извлечь геометрию из gltf, а затем создать новую сетку, но безуспешно:
var loader = new THREE.GLTFLoader();
loader.load(mymodel.glb, function(gltf) {
var geometry = gltf.scene.getObjectByName("name").geometry;
mymesh = new THREE.Mesh(geometry,materials);
scene.add(mymesh);
});
Может кто-нибудь помочь?