THREE.OBJLoader - Сетка масштаба и вершины BufferGeometry - PullRequest
0 голосов
/ 24 июня 2018

Я использую THREE.OBJLoader для загрузки 3D-модели в мою сцену.Он работает нормально.

Однако после добавления его в сцену мне нужно увеличить его на 10, а затем восстановить его положение вершин.

Я знаю, что THREE.OBJLoader дает мне BufferGeometry и я знаю, как получить доступ к его вершинам с помощью атрибута position.

Моя проблема: Float32Array хранение этих вершин, похоже, не обновляется после масштабирования моего меша, независимо от того, делаю ли я это раньшеили после добавления его в сцену.

Я использую этот фрагмент для масштабирования меша сразу после того, как получил его из загрузчика:

myMesh = new THREE.Mesh(loadedMesh.geometry, new THREE.MeshBasicMaterial({color: 0xff0000}));
myMesh.scale.set(10, 10, 10);

Затем я получаю вершины, используя:

var myMeshVertices = myMesh.geometry.attributes.position.array;

При этом моя сетка добавляется в сцену с правильными (масштабированными) размерами, но ее BufferGeometry не хочет обновлять значения вершин.

Я сделал многотесты, включающие myMesh.geometry.attributes.position.needsUpdate = true; или myMesh.updateMatrix();, и я видел много SO вопросов по этой теме ( здесь или здесь ), но я не смог найти решение...

Не могли бы вы сказать мне, если я что-то здесь неправильно понял?(имея в виду, что я только начал с Three.js и WebGL, поэтому мне наверняка не хватает знаний об этом).

1 Ответ

0 голосов
/ 24 июня 2018

Следующие действия должны помочь:

myMesh.geometry.scale( 10, 10, 10 );

Масштабирование экземпляра Object3D и его подклассов означает, что вы применяете масштаб к его внутреннему matrix и, следовательно, к worldMatrix.Эта матрица позже используется в вершинном шейдере для преобразования ваших вершин.Если вам нужно преобразование уже на стороне процессора, используйте соответствующие методы преобразования BufferGeometry.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...