我已经实现了一个 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();
我想要的是从相机向观察方向绘制一条线段。我到处寻找这样的例子,但似乎找不到任何东西。
非常感谢!