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
экземпляр, и он не обрабатывает морф-цели.