首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

C++弹道
EN

Stack Overflow用户
提问于 2012-11-22 08:03:31
回答 1查看 2.3K关注 0票数 1

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

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-22 08:37:43

我想我明白了。

假设你从三维矢量的瞄准方向开始,称之为"aimDir“。然后在你的update循环中,将所有3 (x,y和z)添加到投射体的"position“中。(好的,在光速下,你实际上看不到任何运动,但我想我知道你在这里要做什么了)。

代码语言:javascript
运行
复制
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
}

然后,在渲染例程中,将激光从发射点绘制到新的端点:

代码语言:javascript
运行
复制
void OnRender()
{
    glBegin(GL_LINES);
    glVertex3f( gunPos.x, gunPos.Y, gunPos.z );
    glVertex3f( laserEndPoint.x, laserEndPoint.y, laserEndPoint.z );
    glEnd();
}

我采取了一些自由,因为我不知道您使用的是glut、sdl还是其他什么。但我确信你至少有一个更新函数和一个渲染函数。

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

另外,如果激光源就在观察者的正前方,你会看到一个圆点!所以你可能想要作弊一点,从观众的正下方或右边射击,然后稍微向上或向内射击。特别是如果你每边都有一个(机翼?)看起来和传统机枪一样会聚。

希望这对你有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13504037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档