Построить расчет позиции в локальной системе из мировой позиции. - PullRequest
0 голосов
/ 15 мая 2018

У меня есть компонент для анимации в положении перед камерой, но когда он является дочерним по отношению к другому объекту, он анимируется в неправильном направлении (от камеры), потому что он использует положение мира в объекте ,

Я знаю, что это из-за мировых координат. Может кто-нибудь помочь мне подсказать, как преобразовать эту мировую позицию в локальные координаты?

    pLocal= new THREE.Vector3(0, 0, -distX)
   this._targetPosition = pLocal.applyMatrix4(this._threeCamera.matrixWorld)

В этом примере коробка является дочерним элементом сферы и анимируется вдали от камеры. https://jsfiddle.net/jpvsrnq1/2/

Если ящик не ребенок, он оживляет камеру. https://jsfiddle.net/jpvsrnq1/3/

Как мне сделать его анимированным для камеры, если это дочерний элемент другого объекта?

1 Ответ

0 голосов
/ 15 мая 2018

Вы должны использовать метод worldToLocal():

из документов :

.worldToLocal (вектор: Vector3): Vector3
Обновлениявектор из мирового пространства в локальное пространство.

с помощью метода вашего родителя: parentObj.worldToLocal(vec) вы можете применить его мировое положение к локальному вектору положения.Скрипка здесь .

Скрипка здесь .


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

...