opengl - 根据位置和欧拉角计算注视向量

标签 opengl camera frame-rate

我已经实现了一个 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);

现在我已经设置了几个视口(viewport),每个视口(viewport)都有自己的相机,并且从每个相机我渲染其他相机的位置(作为一个简单的框)。 我还想绘制这些相机的 View 向量,但我不知道如何从位置和欧拉角计算观看向量。 我尝试将原始相机矢量 (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();

我想要的是从相机向观察方向画一条线段。 我到处寻找这方面的例子,但似乎找不到任何东西。

非常感谢!

最佳答案

我刚刚想通了。当我回去添加答案时,我看到 Ivan 刚刚告诉了我同样的事情:)

基本上,要绘制相机矢量,我这样做:

glPushMatrix();

// Apply inverse camera transform
glTranslatef(m_vPosition.x, m_vPosition.y, m_vPosition.z);
glRotatef(-m_fRotateY, 0.0, 1.0, 0.0); 
glRotatef(-m_fRotateX, 1.0, 0.0, 0.0); 

// Then draw the vector representing the camera
glBegin(GL_LINES);
glVertex3f(0, 0, 0);
glVertex3f(0, 0, -10);
glEnd();

glPopMatrix();

这会在观察方向上从相机位置绘制一条 10 个单位的线。

关于opengl - 根据位置和欧拉角计算注视向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2760878/

相关文章:

iPhone 截图

android - Camera intent.getData()在部分设备返回null,主要在android 7.0

video - FFMPEG Doodstream 压缩方法

python - 在 Python 3 游戏上设置固定 FPS

opengl - 什么导致基于状态的顶点着色器的 GLSL 重新编译?

opengl - OpenGL 中球体的错误 UV 坐标?

c++ - 使用 glutmotionfunc 在运动开始和结束时获取 x 位置

windows - 有多少百分比的 Windows 机器支持 OpenGL

ios - 有没有办法使用 UIImagePickerController 选择特定目录中的照片

c++ - 每3秒DirectX应用程序 “hiccups”