Три JS. Добавление узлов в группу - PullRequest
1 голос
/ 10 февраля 2020

Я пытаюсь сохранить объекты customPrimitive в группе. Проблема в том, что сущность сама создает свою геометрию, загружая файл, поэтому мне нужно хранить только узел. Мой код

var grp = new THREE.Group();
this.el.sceneEl.object3D.add(grp);
 for (let i = 0; i < 2; i++) {
   let x = document.createElement('a-foo');
   this.el.sceneEl.appendChild(x); // Works, but not what I want
   // grp.appendChild(x);          // grp.appendChild is not a function
   // grp.add(x.object3D)          // Trying to add an element that doesn't have an `object3D`
   // grp.add(x);                  // -^
 }

Как этого добиться? Скрипка: https://jsfiddle.net/zrept6wf/2/

1 Ответ

2 голосов
/ 10 февраля 2020

Для инициализации необходимо добавить объект в DOM. Другими словами, вам нужно сделать

// preferably to the scene: 
this.el.sceneEl.appendChild(x);
// but could be anywhere: 
document.body.appendChild(x);

для a-foo, чтобы полностью инициализировать - если вы хотите использовать примитивы, вы должны сначала сделать это, прежде чем сможете получить ссылку на object3D и добавить ее в группу. .

// init 
this.el.sceneEl.appendChild(x);
// wait until loaded: x
x.addEventListener('loaded', e => {
   grp.add(x)
})

Если вам нужна только группа сеток - рассмотрите возможность их создания в пользовательском компоненте вместо использования примитивов фреймов. Или, может быть, предварительно загрузить только геометрию и переписать стандартную в a-foo.

...