3

OpenGLを使用した3Dシーンのレンダリングに関する複雑すぎる記事をいくつか読みましたが、glRotateおよびglTranslate呼び出しに関するシーンナビゲーションの基本概念を視覚化するのに役立つものは実際には見つかりませんでした。

LWJGL(私の特定のOpenGLライブラリ)によって提供される例を実験することから、私はそれらの使用がどのような効果をもたらすかを非常に基本的に理解しています。glTranslateを使用してポイントに移動し、glRotateを使用してそのポイントを中心に回転し、glLoadIdentityを使用して原点にスナップバックするか、glPopMatrixを使用して最後のglPushMatrixに戻ることができます。これは基本的に場所と回転のスナップショットです。最後に、シーンは原点を基準にして画面にレンダリングされます。

したがって、基本的に、回転Bで点Aに立方体を配置するには:

  1. glTranslate(Ax、Ay、Az)[現在はポイントAに焦点を当てています]
  2. glRotate(B。、、*、*)ピッチ、ヨー、およびロール; [回転Bに回転しました]
  3. オブジェクトの原点を基準にした各'サイド'(クワッド)のglBegin(GL_QUADS)およびglVertex3f()x4
  4. glEnd()
  5. glLoadIdentity()[他のオブジェクトの原点にリセットされます。立方体を描画するだけの場合は必要ありません]

「カメラ」に関しては、openGLの「目」が固定されているため、カメラで目の動きをシミュレートするには、シーンをカメラから逆方向に移動する必要があります。これはこれまでの私の理解であり、これが間違っている場合は、私を正しい道に導いてください。

今私の特定の状況と質問のために:

私の「シーン」は、地形とプレーヤー(地形に関連する場所にある任意の形状と「カメラ」の頭)で構成されています。ビューはプレーヤーに対して回転する必要があり、プレーヤーは地形に対して移動します。最終的なレンダリングでは、基本的にプレーヤーの頭またはカメラを「透視」する必要があります。私の混乱は、各パーツをレンダリングするための変換/回転呼び出しの順序と、変換の方向です。プレイヤーの「カメラ」に関して、地形とプレイヤーをレンダリングする適切な方法は次のとおりですか?

  1. プレーヤーの原点からの距離だけプレーヤーから離れる方向に移動します(シーンを移動します)
  2. プレーヤーの回転から離れて回転します(プレーヤーは右に40度見えるので、シーン40を左に回転します)
  3. 地形をレンダリングする
  4. glLoadIdentityを介してリセット
  5. プレーヤーの頭をレンダリングする(必要な場合)
  6. 体/手/任意の位置に変換
  7. プレーヤーの回転から離れて回転します(ステップ2をもう一度)
  8. 体/手/何でもレンダリング

また、回転は平行移動に影響しますか?別名、OpenGLは回転に関して変換しますか、それとも回転は変換とは関係ありませんか?

4

1 に答える 1

1

glTranslateを使用してポイントに移動し、glRotateを使用してそのポイントを中心に回転し、glLoadIdentityを使用して原点にスナップバックするか、glPopMatrixを使用して最後のglPushMatrixに戻ることができます。これは基本的に場所と回転のスナップショットです。

いいえ、そうではありません。これらの関数は、シーンが何であるかを認識しています。彼らがするのは行列を操作することだけです。これについての優れた記事は次のとおりです。

http://www.opengl.org/wiki/Viewing_and_Transformations

OpenGLを使用する際に留意すべき重要なことの1つは、シーングラフではないということです。平らな点、線、三角形をフレームバッファにレンダリングするだけです。あなたがナビゲートするシーンのようなものはありません。

つまり、基本的に、回転Bで点Aに立方体を配置するには:(...)

はい、あなたはそれを正しく理解しました。

「カメラ」はopenGLの「目」が固定されているので

ええと、OpenGLにはカメラがありません。モデルビューマトリックスを介して頂点をプッシュし、それらに対してライティング計算を実行してから、それらをプロジェクションに渡し、ビューポートにマップするだけです。

于 2012-04-29T12:19:17.890 に答える