Как клонировать объект Collada, включая несколько мешей, в Three.js - PullRequest
0 голосов
/ 31 октября 2018

Я загрузил модель .dae, включающую несколько сеток, и попытался ее клонировать, но не смог. Ниже приведен код, который я использовал.

loader.load( 'assets/model/deck.dae', function ( collada ) {
    deck = collada.scene;
    console.log(deck);
    window.referenceModel = deck.children[0];       
    refObject  = window.referenceModel;     
} );
var deckClone = new THREE.Mesh( refObject.geometry, refObject.material );
scene.add( deckClone );

Этот код хорошо работает с образцом .dae-файла, состоящего из одной сетки, но не очень хорошо работает с другим .dae-файлом, созданным мной. Сделанный мной файл .dae состоит из нескольких групп мешей. Я прикреплю эти файлы. Это пример файла .dae. https://drive.google.com/file/d/13BCp6avslnpb1O8Q6xCqjE-ueojgz1AD/view И это файл .dae, который я сделал сам. https://drive.google.com/file/d/1BTIMs0IHHqrixvj45NXcZoh1PhEnm2Qr/view

Я хочу знать, как клонировать объекты из вторых файлов .dae или как преобразовать второй файл в файл .dae с таким же файлом структуры (одна сетка).

1 Ответ

0 голосов
/ 01 ноября 2018

Вы нацеливаетесь только на ОДНОГО ребенка вашей сцены, когда вы делаете deck.children[0], поэтому, конечно, он будет клонировать только эту одну сетку.

Попробуйте метод .clone() , как упомянуто в документации , который пройдет через всех его потомков и клонирует их для вас.

loader.load( 'assets/model/deck.dae', function ( collada ) {
    deck = collada.scene;
    var deckClone = deck.clone(true);
    scene.add(deckClone);
} );

Кроме того, вы добавили deckClone за пределами функцию обратного вызова .load (), что означает, что она будет выполнена до загрузки файла .dae, и вы ' Я столкнусь с ошибками и проблемами таким образом. Убедитесь, что вы добавили свой клонированный объект в сцену внутри функции обратного вызова.

...