THREE.JS: изменить цвет материала за текстурой PNG? Назначить 2 материала сетке, импортированной из модели GLTF?

Я пытаюсь изменить цвет моей 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);
  });

Может кто-нибудь помочь?


person PierreBchr    schedule 19.09.2020    source источник
comment
Возможно, это может вам помочь: stackoverflow.com/questions/17486614/ С уважением.   -  person Matheus    schedule 19.05.2021