Я реализовал камеру в стиле FPS, с камерой, состоящей из вектора положения и углов Эйлера, тангажа и рыскания (повороты x и y).
После настройки матрицы проецирования я затем переворачиваю координаты камеры, поворачивая ее, затем переводя в положение, обратное положению камеры:
// Load projection matrix
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// Set perspective
gluPerspective(m_fFOV, m_fWidth/m_fHeight, m_fNear, m_fFar);
// Load modelview matrix
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// Position camera
glRotatef(m_fRotateX, 1.0, 0.0, 0.0);
glRotatef(m_fRotateY, 0.0, 1.0, 0.0);
glTranslatef(-m_vPosition.x, -m_vPosition.y, -m_vPosition.z);
Теперь у меня настроено несколько окон просмотра, каждый со своей камерой, и с каждой камеры я отображаю положение других камер (в виде простой рамки).
Я хотел бы также нарисовать вектор обзора для этих камер, за исключением того, что я не знаю, как рассчитать вектор обзора по положению и углам Эйлера.
Я попытался умножить исходный вектор камеры (0, 0, -1) на матрицу, представляющую вращения камеры
затем добавление положения камеры к преобразованному вектору, но это совсем не работает (скорее всего, потому что я далеко от базы):
vector v1(0, 0, -1);
matrix m1 = matrix::IDENTITY;
m1.rotate(m_fRotateX, 0, 0);
m1.rotate(0, m_fRotateY, 0);
vector v2 = v1 * m1;
v2 = v2 + m_vPosition; // add camera position vector
glBegin(GL_LINES);
glVertex3fv(m_vPosition);
glVertex3fv(v2);
glEnd();
То, что я хотел бы, это нарисовать отрезок линии от камеры к направлению взгляда.
Я искал повсюду примеры этого, но, похоже, ничего не могу найти.
Большое спасибо!