1

OpenGL でタイル張りの世界を作成する予定です。タイルと家を少し回転させて、世界の建物をモデルで作成します。どのプロジェクション (直交、パースペクティブ) を使用する必要があるか、ビュー マトリックスをセットアップする方法 (OpenGL を使用) を提案できますか?

私が作ろうとしている世界のスタイルがわからない場合は、このゲームを見てください: http://www.youtube.com/watch?v=i6eYtLjFu-Y&feature=PlayList&p=00E63EDCF757EADF&index=2

4

2 に答える 2

2

直交投影と透視投影の使用は、完全にアート スタイルの選択です。あなたが話している真剣なポケモンは直交しています-実際、それは完全にレイヤー化された2Dスプライトです(3Dは関係ありません)。

OpenGL には VIEW マトリックスがありません。MODELVIEW マトリックスと PROJECTION マトリックスがあります。ポケモン スタイルのレベルでは、プロジェクションにシンプルな glOrtho を使用することをお勧めします。

世界が XY 空間にあると仮定しましょう (タイル、カメラ、およびその他のオブジェクトの座標は [x, y, 0] の形式です)。1 つのタイルのサイズが 1,1 の場合、glOrtho(12, 9, -10, 10) のようなものが適切な射影行列になります (幅 12、高さ 9、Z=0 が地面)。

MODELVIEW の場合、ジオメトリを描画する前に、ID をロードすることから始め、タイル位置によって glTranslate() をロードし、次にカメラ位置のネガティブによって glTranslate() をロードすることができます。カメラを回転できるようにしたい場合は、2 つの Translate() の間のカメラ回転の負の値 (逆) で glRotate() を実行します。最終的に、次の行列チェーンになります。

出力 = 投影 × (CameraTranslation -1 × CameraRotation -1 × ModelLocation × ModelRotation) × 入力

括弧内の部分は MODELVIEW であり、「-1」は「逆」を意味し、実際には平行移動は負、回転は転置です。

モデルも回転させたい場合は、通常、最初に (最初の glTranslate() の前に) それを行います。

最後に、OpenGL フォーラム (www.opengl.org) または www.gamedev.net の OpenGL サブフォーラムが、この質問をするのに適した場所であることをお勧めします :-)

于 2010-02-06T00:17:39.340 に答える
0

そのビデオ ゲームで使用されている投影法は、私には斜めに見えます。遠近法や正投影だけでなく、さまざまな投影法があります。最も一般的なもののリストについては、こちらを参照してください: http://en.wikipedia.org/wiki/File:Graphical_projection_comparison.png

X 軸のみを中心とした固定回転で、間違いなくパースペクティブが必要です。45~60度前後。プロジェクション コードを自分で設定する必要がない場合は、GLU ライブラリの gluPerspective 関数が便利です。OpenGL 2.1 の場合:

glMatrixMode(GL_PROJECTION); //clip matrix
glLoadIdentity();
gluPerspective(90.0, width/height, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW); //world/object matrix
glLoadIdentity();
glRotatef(45.0f, 1.0f, 0.0f, 0.0f);
/* render   */

gluPerspective の最後の 2 つのパラメーターは、ニア クリッピング プレーンとファー クリッピング プレーンまでの距離です。それらの値は、環境に使用するスケールによって異なります。

于 2010-05-23T15:35:10.940 に答える