我怎样才能让在我的方向移动相机我面对(How can I make my camera move i

2019-08-31 16:47发布

我试图做一个自由漫游相机在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值(浮点)。

我的问题是,如何才能修改我的代码,实现自由漫游?

Answer 1:

您可以从模型视图矩阵的第一,第二和第三列获得左侧,向上和向前矢量相机 - 它被配置当然之后。

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.

请参阅此页面了解更多详情。 在同一地点, 该另一页介绍了如何使用旋转角度来获得模型视图矩阵,因此列向量,如上所示。 相同的技术(但是具有略微不同的坐标系)也用于例如在地震游戏引擎系列 。



文章来源: How can I make my camera move in the direction I'm facing