1

我正在使用 OpenGL 创建 3D 空间。我有一艘可以发射激光的宇宙飞船。

到目前为止,我已经拥有它,这样激光一旦发射就可以简单地深入 Z 轴。但是我正在尝试用十字准线制作一个适当的瞄准系统,以便您可以向任何方向瞄准和射击,但我未能成功尝试更新激光的路径。

我有一个基于激光末端和起始末端的方向矢量,它是从瞄准中获得的。

我应该如何正确更新激光的 X、Y、Z 值(或矢量)以使其看起来自然?

4

1 回答 1

0

我想我明白了。

假设您从瞄准方向作为 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 还是什么。但我敢肯定你至少有一个更新功能和一个渲染功能。

警告,只是从枪到激光末端画一条线可能会在视觉上令人失望,但它将是添加更好效果(粒子系统、布隆过滤器等)的关键参考。一个快速的改进可能是使激光(线)的正面颜色明亮,背面为黑色。和/或像机关枪一样制作多条线。随意尝试;-)

此外,如果激光源直接在观察者面前,您只会看到一个点!所以你可能想稍微作弊,从观察者的正下方或右侧开火,然后稍微向上或向内开火。特别是如果你每侧都有一个(机翼?),看起来像传统机器一样会聚枪。

希望这会有所帮助。

于 2012-11-22T00:37:42.700 回答