Three.js: Как создать новую «изменяющуюся» геометрию, если у меня есть все необходимые буферы?

Я использую веб-работника, чтобы загрузить.json файл анимированной 3D модели. Для каждого из больших массивов (вершин, нормалей и т. Д.) Я передаюFloat32Array Буфер обратно в поток пользовательского интерфейса. Поскольку такие буферыпереносимые объекты, это займет (почти)нулевое время.

Теперь выясняется, что WebGL (и, следовательно, Three.js) используютFloat32Array Внутренние буферы тоже. Это означает, что я мог бы загрузить эту 3D-анимацию, ничего не копируя, потратив почти нулевое время в основном потоке. Разве это не мило?

Но не ясно, как это сделать: в главном потоке у нас есть буферы массивов для вершин, нормалей (основных и «морфных») и граней. Как мне создать рабочийGeometry (или жеBufferGeometry) из этих, без перевода или копирования данных?

var scene,
    vertices, normals, faces,
    morphVertices, morphNormals; // <-- we have all these as typed arrays

var geometry = ...; // <-- insert code here

var material = new THREE.MeshLambertMaterial({ morphTargets: true });
var object3D = new THREE.MorphAnimMesh(geometry, material);
scene.add(object3D);

Этот ответ дает подсказку, но только пункт 7 представляется актуальным, он предполагает, что уже есть некоторыеGeometry экземпляр, и он не обрабатывает морф-цели.

Ответы на вопрос(1)

Ваш ответ на вопрос