我正在使用OpenGL来创建3D空间。 我有一艘可以发射激光的宇宙飞船。
到目前为止,我已经拥有它,以便激光只需在射击后更深入Z轴。 但是我试图用十字准线制作一个合适的瞄准系统,这样你就可以向任何方向瞄准和射击,但我还没有成功地试图更新激光的路径。
我有一个基于激光器末端和开始尖端的方向矢量,它是从瞄准中获得的。
我应该如何正确更新激光的X,Y,Z值(或矢量)以使其看起来自然?
答案 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或什么。但我确信你至少有一个更新功能和一个渲染功能。
警告,只是从喷枪到激光末端划一条线可能会令人失望,但它将成为添加更好效果(粒子系统,布隆过滤器等)的关键参考。快速改进可能是使激光(线)的正面颜色鲜艳而背面为黑色。和/或像机枪一样制作多条线。随意尝试; - )
此外,如果激光源直接位于观察者面前,您将看到一个点!所以你可能想要在观察者的下方或右侧稍微作弊并开火,然后稍微向上或向内着火。特别是如果你的每一面(翼?)看起来像传统机器那样会聚枪。
希望这有帮助。