Итак, вот вопрос вектора, матрицы, вращения, кватерниона для мастеров three.js!
У меня есть родительский объект в position(0,0,275)
с direction(0,0,-1)
, + y вверх и rotation(0,0,0)
.
К родительскому объекту прикреплен дочерний объект с отношением:
rel_position(.5, 0, 0)
rel_rotation(0, 0, 0)
У меня также есть цель в сцене:
position(0, 100, 0)
Рассмотрим корабль (родительский) с тангажом, рысканием и креном. Имеет башню (дочернюю) с угловой скоростью и рысканием. Турель должна сопровождать цель с заданной скоростью вращения (рад / с).
Я потратил 5 дней, пытаясь найти правильный алгоритм отслеживания. Лучшее, что я могу сделать, это удалить функцию matrixAutoUpdate для родительского и дочернего элементов, обновляя матрицу вручную. Затем используйте child.matrixWorld для создания матриц или кватернионов вращения для текущего дочернего вращения. Затем я могу создать вторичный Object3D, который смотрит на цель из дочерней позиции. Я могу понять разницу между дочерним и второстепенным Object3D и измерить кватернион на основе рад / с. Однако, когда я добавляю рулон к родительскому элементу или цель поворачивается за пределами октанта (+, +, +)
, происходит сбой вычислений дочернего вращения (или кватерниона), вызывая дикие повороты.
Любое направление в алгоритме отслеживания дочернего Object3D было бы безмерно оценено. Ваши усилия будут указаны в моем следующем проекте.
Спасибо за уделенное время!