なるほど。
照準方向を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つずつある場合は特にそうです。銃。
お役に立てば幸いです。