使用 OpenGL 进行目标跟踪控制






4.47/5 (7投票s)
一个简单的目标控制,用于显示敌人的方向,尤其适用于电脑游戏。
引言
附带 C++ 项目中实现的目标跟随控制是一种简单的方法,用于跟随已知的目标,尤其是在目标超出视野范围时。
背景
许多 3D 游戏都实现了这种控制,但描述这种目标跟随方法的文章仍然很少。
Using the Code
为了证明这个概念,实现了一个简单的相机模型。我们使用一个简单的立方体作为目标进行跟随。

图片描述:显示了应用程序的屏幕截图。白色立方体代表目标,黑色点代表目标跟随控制。
对于实际的方法,我们获得将世界坐标系转换到相机坐标系的矩阵。可以使用 OpenGL 命令计算该矩阵。
glGetFloatv(GL_MODELVIEW_MATRIX, Matrix)
然后,我们将此矩阵与目标的坐标相乘,并获得目标在相机空间中的坐标,即 2D 坐标。
TargetPosition[0] = Position[0]*Matrix[0]+Position[1] *
Matrix[4] + Position[2] * Matrix[8] + 1.0f * Matrix[12];
TargetPosition[1] = Position[0]*Matrix[1]+Position[1] *
Matrix[5] + Position[2] * Matrix[9] + 1.0f * Matrix[13];
TargetPosition[2] = Position[0]*Matrix[2]+Position[1]*
Matrix[6] + Position[2] * Matrix[10] + 1.0f * Matrix[14];
为了在屏幕边缘附近显示目标点,我们进行一些简单的几何计算,以确定屏幕矩形框架与目标之间的交点。
为了实际显示跟随目标,我们从 3D 模式切换到 2D 模式,并使用 OpenGL GL_POINTS
来指示目标的朝向。
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0, 500, 500, 0, -1, 1);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glTranslatef(250, 250, 0.0);
glPointSize(10.0f);
glBegin(GL_POINTS);
glVertex2f((IPoint[1] -250)/1.1, (-IPoint[0] +250)/1.1);
glEnd();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
关注点
这种方法的实现非常简单,它需要将 2D 和 3D 模式与 OpenGL 结合起来。
为了控制相机移动,使用以下按键
- w, s: 放大和缩小
- q, z: 上下移动
- a, d: 左侧和右侧移动
历史
在第一次实现中,我使用了简单的圆形目标定位。此实现包含在源代码中,但当前已注释掉。
