Проблемы понимания вращения gluLookAt xyz в сценарии FPS

У меня проблемы с gluLookAt.

Моя камера может вращаться вдоль осей X и Y, передавая относительные события движения мыши. Проблема в оси Z — я не знаю, как ее рассчитать.

Итак, моя камера может смотреть вверх, вниз, влево и вправо. Но я не могу понять, как полностью повернуть на 360 градусов!

Может ли кто-нибудь помочь?

РЕДАКТИРОВАТЬ:

Итак, вот тривиальный пример моего кода:

Point3 test(0,0,0);

Matrix4 camera = Camera::getInstance().getCameraM();
if ((event.motion.xrel > 200) || (event.motion.yrel > 200))
{
break;
}

float mx = (event.motion.xrel);
float my = -(event.motion.yrel);
mx /= 20;
my /= 20;
test.setX(test.getX()+mx);
test.setY(test.getY()+my);
Camera::getInstance().lookAt(Point3(0,0,15),test,Vector3(0,-1,0));

Camera::lookAt просто оборачивает функцию glu lookAt.

0

Решение

gluLookAt (...) создает ортогональное пространство просмотра. Вы уже знаете одну из двух осей, когда называете ее (ось Y задается как up), ось Z вычисляется с учетом направления от eye в center и, наконец, ось X является перекрестным произведением между Y и Z.

Кстати, вы не можете полностью повернуть на 360 градусов. На +/- 90 градусов от горизонтали вы сталкиваетесь с особенностью, где есть два возможных способа представить один и тот же угол. Если вы интерполируете вращение на этот угол Эйлера, вы можете изменить ориентацию. Фактически, если две из трех ваших осей становятся параллельными (что происходит, когда вы смотрите прямо вверх или вниз), то с углами Эйлера все становится очень грязно.

1

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


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