我正在使用 OpenGL 创建 3D 空间。我有一艘可以发射激光的宇宙飞船。
到目前为止,我已经拥有它,这样激光一旦发射就可以简单地深入 Z 轴。但是我正在尝试用十字准线制作一个适当的瞄准系统,以便您可以向任何方向瞄准和射击,但我未能成功尝试更新激光的路径。
我有一个基于激光末端和起始末端的方向矢量,它是从瞄准中获得的。
我应该如何正确更新激光的 X、Y、Z 值(或矢量)以使其看起来自然?
我正在使用 OpenGL 创建 3D 空间。我有一艘可以发射激光的宇宙飞船。
到目前为止,我已经拥有它,这样激光一旦发射就可以简单地深入 Z 轴。但是我正在尝试用十字准线制作一个适当的瞄准系统,以便您可以向任何方向瞄准和射击,但我未能成功尝试更新激光的路径。
我有一个基于激光末端和起始末端的方向矢量,它是从瞄准中获得的。
我应该如何正确更新激光的 X、Y、Z 值(或矢量)以使其看起来自然?
我想我明白了。
假设您从瞄准方向作为 3D 矢量开始,称之为“aimDir”。然后在您的更新循环中将所有 3 个(x、y 和 z)添加到射弹“位置”。(好吧,在光速下你实际上看不到任何运动,但我想我明白你在这里要做什么)。
void OnUpdate( float deltaT )
{
// "move" the laser in the aiming direction, scaled by the amount of time elapsed
// since our last update (you probably want another scale factor here to control
// how "fast" the laser appears to move)
Vector3 deltaLaser = deltaT * aimDir; // calc 3d offset for this frame
laserEndpoint += deltaLaser; // add it to the end of the laser
}
然后在渲染例程中将激光从发射点绘制到新端点:
void OnRender()
{
glBegin(GL_LINES);
glVertex3f( gunPos.x, gunPos.Y, gunPos.z );
glVertex3f( laserEndPoint.x, laserEndPoint.y, laserEndPoint.z );
glEnd();
}
我冒昧了,因为我不知道您使用的是 glut、sdl 还是什么。但我敢肯定你至少有一个更新功能和一个渲染功能。
警告,只是从枪到激光末端画一条线可能会在视觉上令人失望,但它将是添加更好效果(粒子系统、布隆过滤器等)的关键参考。一个快速的改进可能是使激光(线)的正面颜色明亮,背面为黑色。和/或像机关枪一样制作多条线。随意尝试;-)
此外,如果激光源直接在观察者面前,您只会看到一个点!所以你可能想稍微作弊,从观察者的正下方或右侧开火,然后稍微向上或向内开火。特别是如果你每侧都有一个(机翼?),看起来像传统机器一样会聚枪。
希望这会有所帮助。