Создание массива мешей из объекта (THREE.JS и GLTF)

Ниже мой фрагмент кода, который загружает сетку на объект. На данный момент он проходит через все это.

Текущий код:

var loader = new THREE.GLTFLoader();
            loader.load( '../gtf/Box.gltf', function ( gltf ) {
                model = gltf.scene;

                gltf.scene.traverse( function ( child ) {
                    if ( child.isMesh ) {
                        child.material.map = texture;
                    }
                } );

                scene.add( model);
            } );

Как мне сделать массив из children[]? Затем каждый ребенок позволит мне назначать отдельные текстуры.

Я сделал модель в Blender с отдельными сетками и материалами.

В THREE.JS я хочу иметь возможность:

children[0].material.map = blueTexture;

children[1].material.map = greenTexture;

и т.д


person TheGoldenD0nut    schedule 29.08.2018    source источник


Ответы (1)


Если я правильно понял ваш вопрос, вы можете сделать следующее:

var loader = new THREE.GLTFLoader();
loader.load( '../gtf/Box.gltf', function ( gltf ) {
  model = gltf.scene;

  var children = []

  // Construct array of children during traversal of gltf object
  gltf.scene.traverse( function ( child ) {
      if ( child.isMesh ) {
          children.push(child)
      }
  } );

  // Assuming array length is 2 or more, and blueTexture/greenTexture are defined
  children[0].material.map = blueTexture;
  children[1].material.map = greenTexture;

  scene.add( model);
} );
person Dacre Denny    schedule 29.08.2018
comment
Привет, Дакр, именно то, что я искал. Я снова прокомментирую, чтобы вы знали, сработало ли это. Есть ли вызов/функция, которую я мог бы использовать, чтобы получить размер массива после прохождения? - person TheGoldenD0nut; 29.08.2018
comment
дети.длина - person manthrax; 29.08.2018
comment
Привет, @TheGoldenD0nut, рад, что смог помочь - да, вы можете сделать это: children.length чтобы получить размер массива после завершения обхода. Если вам нужно получить доступ к этому массиву за пределами обработчика load(), просто переместите var children = [] за пределы этой функции. Надеюсь это поможет! - person Dacre Denny; 29.08.2018