Ориентация камеры Огре с учетом вектора и угла

В Ogre3d я хочу установить ориентацию, задав вектор «нормальный» для вида камеры (как стрелка, указывающая мне в глаза) и угол, который поворачивает камеру (как наклон головы).
Я могу заставить его работать с этим трюком:

float angle = 10; /* tilt my head 10 degrees to right */
Vector3 vector(0, 0, 1); /* z axis pointing forward */
Vector3 target = camera->getPosition() + vector;
camera->lookAt(target);
camera->roll(Degree(angle));

Я не уверен, что это будет работать для каждого значения, и это кажется хакерским. Я ищу что-то более правильное, например, использование кватернионов и Ogre::Camera::setOrientation(),

Этот пример не работает:

Quaternion orientation(Degree(angle), vector);
camera->setOrientation(orientation);

потому что камера поворачивается на angle вместе vector,

4

Решение

Вы можете легко преобразовать вектор и угол в кватернион, представляющий вращение для вас. Это хорошо известный осевой угол кватерниона. Я не знаю, какой класс Quaternion вы используете (вероятно, есть в Огре). Однако позвольте мне привести пример кода из класса Quaternion, который я написал:

    Quaternion Quaternion::CreateFromAxisAngle(Vector3 axis, float angle) {
float half = angle * 0.5f;
float s = sin(half);

Quaternion result;
result.x = axis.x * s;
result.y = axis.y * s;
result.z = axis.z * s;
result.w = cos(half);
return result;
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]