我正在使用OpenGL创建3D空间。我有一艘可以发射激光的宇宙飞船。
到目前为止,我已经有了它,这样一旦发射,激光就会简单地深入Z轴。但是我正在尝试用十字准线制作一个合适的瞄准系统,这样你就可以瞄准并向任何方向射击,但我没有成功地更新激光的路径。
我有一个基于激光末端和起始末端的方向矢量,这是从瞄准获得的。
我应该如何正确地更新激光的X,Y,Z值(或矢量),使其看起来自然?
发布于 2012-11-22 08:37:43
我想我明白了。
假设你从三维矢量的瞄准方向开始,称之为"aimDir“。然后在你的update循环中,将所有3 (x,y和z)添加到投射体的"position“中。(好的,在光速下,你实际上看不到任何运动,但我想我知道你在这里要做什么了)。
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还是其他什么。但我确信你至少有一个更新函数和一个渲染函数。
警告,仅仅从喷枪到激光末端绘制一条线在视觉上可能会令人失望,但它将是添加更好效果(粒子系统、布隆滤镜等)的关键参考。一个快速的改进可能是使激光(线条)的正面为鲜艳的颜色,背面为黑色。和/或像机关枪一样排成多条线。请随意尝试;-)
另外,如果激光源就在观察者的正前方,你会看到一个圆点!所以你可能想要作弊一点,从观众的正下方或右边射击,然后稍微向上或向内射击。特别是如果你每边都有一个(机翼?)看起来和传统机枪一样会聚。
希望这对你有帮助。
https://stackoverflow.com/questions/13504037
复制相似问题