Как получить абсолютную позицию вершины в three.js?

Насколько я знаю var point = object.geometry.vertices[i]; вернется с относительным положением для x, y а также z точки внутри геометрии объекта.

Как получить абсолютную позицию, если объект был перемещен, повернут или масштабирован?

2 ответа

Решение

Сначала убедитесь, что матрицы объекта были обновлены.

object.updateMatrixWorld();

Цикл рендеринга обычно вызывает это для вас.

Затем сделайте это:

var vector = object.geometry.vertices[i].clone();

vector.applyMatrix4( object.matrixWorld );

Вектор теперь будет содержать положение в мировых координатах.

Возможно, вы захотите прочитать некоторые справочники CG.

  1. 3D математический учебник по графике и разработке игр / от Флетчера Данна и Яна Парберри

  2. Основная математика для игр и интерактивных приложений: руководство для программиста Джеймс М. Ван Верт и Ларс М. Бишоп

Three.JS R69

Последние версии Three.js (v50+) предоставляют эту функциональность, встроенную в THREE.Object3D класс В частности, чтобы получить мировые координаты местного THREE.Vector3 именованный экземпляр vectorиспользуйте localToWorld метод:

object.localToWorld( vector );

Точно так же есть worldToLocal метод для преобразования мировых координат в локальные координаты, что немного сложнее, математически говоря. Перевести мир vector в локальное координатное пространство объектов:

object.worldToLocal( vector );
Другие вопросы по тегам