Как получить абсолютную позицию вершины в 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.
3D математический учебник по графике и разработке игр / от Флетчера Данна и Яна Парберри
Основная математика для игр и интерактивных приложений: руководство для программиста Джеймс М. Ван Верт и Ларс М. Бишоп
Three.JS R69
Последние версии Three.js (v50+) предоставляют эту функциональность, встроенную в THREE.Object3D
класс В частности, чтобы получить мировые координаты местного THREE.Vector3
именованный экземпляр vector
используйте localToWorld
метод:
object.localToWorld( vector );
Точно так же есть worldToLocal
метод для преобразования мировых координат в локальные координаты, что немного сложнее, математически говоря. Перевести мир vector
в локальное координатное пространство объектов:
object.worldToLocal( vector );