C ++弹丸轨迹

时间:2012-11-22 00:03:31

标签: c++ opengl projectile

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

到目前为止,我已经拥有它,以便激光只需在射击后更深入Z轴。 但是我试图用十字准线制作一个合适的瞄准系统,这样你就可以向任何方向瞄准和射击,但我还没有成功地试图更新激光的路径。

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

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

1 个答案:

答案 0 :(得分: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();
}

我正在采取一些自由,因为我不知道你是否使用过剩,sdl或什么。但我确信你至少有一个更新功能和一个渲染功能。

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

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

希望这有帮助。