0

スペース インベーダー ゲームを一人称視点、つまり船からの世界観に切り替えようとしています。どのポイントを見ればいいのか、少し混乱しています。現在、gluLookAt でこれらのパラメーターを使用しています。

GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
GLU.gluLookAt(ship3dPos.x, ship3dPos.y, ship3dPos.z,400.0f, 600.0f,-50.0f, 0.0f, 1.0f,-0.0f);

全世界を表示するために、パラメーター 4、5、および 6 を何に設定すればよいかわかりません (ウィンドウは 800/600 です)。

4

2 に答える 2

2

一人称視点が必要な場合は、params 0 1 2 がプレーヤーになり、3 4 5 が見ている場所になり、6 7 8 が上になります。

gluLookAt(eye.x,eye.y,eye.z,center.x,center.y,center.z,up.x,up.y,up.z)

アップ ベクトル - ビューの「アップ」とは何かを定義しますここに画像の説明を入力

于 2012-12-09T17:03:21.683 に答える
0

コメントの説明に基づいて、あなたが見ているポイントの x 座標 ( centerx) を船の位置に合わせて変更する必要があります。したがって、それはおそらく と同じはずship3dPos.xです。

まだ解明しなければならないことの 1 つは、船とエイリアンの Z 深度です。今のところ、それらは等しいと仮定します。その場合centerz、その深さになります。それらが等しくない場合は、もう少し計算を行う必要があり、centery以下の答えはわずかに変わります.

宇宙人に向かって「上」を見たいと言うので、より大きな y 値が必要ですship3dPos.y。「lookAt」ポイントは視線に沿った任意のポイントになる可能性があるため、(深さが同じであると仮定して)ship3dPos.y+1.0機能するか、またはエイリアンの y 位置として 500 の推定値に満足している場合に注意してください。あなたもそれを使うことができます。基本的に、深さが同じで、エイリアンの y 位置が船の位置よりも大きい限り、より大きなものを使用できますship3dPos.y

上記の仮定では、「lookAt」ベクトル (centerx、centery、centerz) は次のようになります。

ship3dPos.x, ship3dPos.y+1.0, ship3dPos.z

しかし、gluLookAt() 呼び出しには、注意が必要なコンポーネントがもう 1 つあります:upベクトルです。ベクトルを (0,1,0)のままupにしておくと、画面を直接見ることになります。あなたが本当に望むのは、画面の平面 (xy 平面) に沿って見ることだと仮定します。この場合up、z 方向にある必要があり、アップ ベクトルは次のようになります。

0.0f, 0.0f, 1.0f

それを試してみて、あなたが思う通りに動作するかどうかを確認してください。

于 2012-12-09T16:55:15.617 に答える