如何让我的相机朝着我面向的方向移动

我正在尝试在OpenGL中制作一个免费的漫游相机。 目前,相机向前,向后,向左和向右移动。 我的下一个目标是让它朝你所看的方向移动。

到目前为止,我的代码是:

float yawRad = Rotation -> y * (3.1415f/180); float pitchRad = Rotation -> x * (3.1415f/180); if(myInput.Keys[VK_W]) //Forward { curPos->x += sin(yawRad) * myInput.Sensitivity; curPos->z -= cos(yawRad) * myInput.Sensitivity; } else if(myInput.Keys[VK_S]) //Backward { curPos->x -= sin(yawRad) * myInput.Sensitivity; curPos->z += cos(yawRad) * myInput.Sensitivity; } if(myInput.Keys[VK_A]) //Left { curPos->x -= cos(yawRad) * myInput.Sensitivity; curPos->z -= sin(yawRad) * myInput.Sensitivity; } else if(myInput.Keys[VK_D]) //Right { curPos->x += cos(yawRad) * myInput.Sensitivity; curPos->z += sin(yawRad) * myInput.Sensitivity; } if(myInput.Keys[VK_E]) //Up { curPos->y += myInput.Sensitivity; } else if(myInput.Keys[VK_Q]) //Down { curPos->y -= myInput.Sensitivity; } 

myInput.Sensitivity是由鼠标滚轮控制的浮点数,其值增加/减少0.0005。

Rotation是一个存储x,y,z值(浮点数)的矢量类。

我的问题是,如何修改我的代码以实现免费漫游?

您可以从模型视图矩阵的第一,第二和第三列获取摄像机的左,上和前向量 – 当然是在配置之后。

 float mview[16]; float front[4], up[4], left[4]; glGetFloatv(GL_MODELVIEW_MATRIX, mview); left[0] = mview[0]; left[1] = mview[1]; left[2] = mview[2]; left[3] = 1.0; up[0] = mview[4]; up[1] = mview[5]; up[2] = mview[6]; up[3] = 1.0; front[0] = mview[8]; front[1] = mview[9]; front[2] = mview[10]; front[3] = 1.0; 

从那时起,您只需要将适当的向量添加到移动位置。

 if(myInput.Keys[VK_A]) //Left { curPos->x += left[0] * myInput.Sensitivity; curPos->z += left[z] * myInput.Sensitivity; } else if(myInput.Keys[VK_D]) //Right { curPos->x -= left[0] * myInput.Sensitivity; curPos->z -= left[2] * myInput.Sensitivity; } // etc. 

有关详细信息,请参阅此页面 。 在同一个站点上, 此另一页描述了如何使用旋转角度来获取模型视图矩阵,因此列向量如上所示。 例如在地震游戏引擎系列中也使用相同的技术(但具有略微不同的坐标系)。