1

OpenGL を使用して 3D 空間を作成しています。私はレーザーを発射できる宇宙船を持っています。

これまでは、レーザーが一度発射されるとZ軸の奥深くまでレーザーが届くようにしました。しかし、十字線を使用して適切な照準システムを作成して、任意の方向に照準を合わせて撃つことができるようにしようとしていますが、レーザーの経路を更新することに成功していません.

レーザーのエンド チップとスタート チップに基づく方向ベクトルがあります。これは照準から得られます。

レーザーの X、Y、Z 値 (またはベクトル) を適切に更新して、自然に見えるようにするにはどうすればよいですか?

4

1 に答える 1

0

なるほど。

照準方向を3Dベクトルとして開始し、「aimDir」と呼びます。次に、更新ループで、3つすべて(x、y、z)を発射体の「位置」に追加します。(OK、光速では実際には動きは見えませんが、ここで何をしようとしているのかはわかります)。

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、または何を使用しているかわからないので、私はいくつかの自由を取っています。しかし、少なくとも更新機能とレンダリング機能はあると思います。

警告、銃からレーザーの端まで線を引くだけでは視覚的にがっかりするかもしれませんが、より良い効果(パーティクルシステム、ブルームフィルターなど)を追加するための重要なリファレンスになります。迅速な改善は、レーザーの前面(線)を明るい色にし、背面を黒にすることです。および/または機関銃のように複数のラインを作成します。自由に実験してください;-)

また、レーザーの光源がビューアの真正面にある場合は、ドットが表示されます。したがって、少しチートして、ビューアの真下または右から発射してから、少し上または内側に発射することをお勧めします。特に、従来のマシンのように収束しているように見える両側(翼?)が1つずつある場合は特にそうです。銃。

お役に立てば幸いです。

于 2012-11-22T00:37:42.700 に答える