Для проекта, над которым я работаю, я пытаюсь разрешить пользователю вращать куб в зависимости от направления, которое они прокручивают на экране. У меня есть эта работа, кроме направления вращения куба.Найти вектор вперед на основе местоположения камеры
Например, мой вектор вперед начинается с (0, 0, -1). Однако, как только я поворачиваю куб на 90 градусов в направлении, передний вектор меняется. Это то, что я ожидаю, но создает проблему для того, что я делаю.
У меня есть код набора, чтобы определить, каким образом направление камеры, проверяя проверки камеры вперед, как так ...
GLKVector3 forward = [ m_camera getForwardVector ];
if (fabsf(forward.x) > fabsf(forward.z)) {
// Need forward vector to be in x-direction
// Rotate cube around axis (0.0f, 0.0f, 1.0f);
} else {
// Need forward vector to be in z-direction
// Rotate cube around axis (1.0f, 0.0f, 0.0f);
}
То, что я хочу сделать, это повернуть куб вокруг указанной оси , Однако после того, как куб вращается несколько раз, позиции векторов не совпадают с мировыми позициями, поэтому он не вращается правильно из-за измененных позиций вектора.
Вращение кубов хранится в кватернионе. Итак, есть ли способ определить, какой вектор представляет собой «прямой» вектор, основанный на том, где находится камера?
Вот мой код поворота, если это вообще помогает. Благодаря!
- (void) rotate: (GLKVector3) axis withAngle: (GLfloat) angle {
[ self rotate: GLKQuaternionMakeWithAngleAndVector3Axis(GLKMathDegreesToRadians(angle), axis) ];
}
- (void) rotate: (GLKQuaternion) quat {
m_rotation = GLKQuaternionNormalize(GLKQuaternionMultiply(m_rotation, quat));
}