0

私はここで小さなゲームを作っていますが、OpenGL には小さな問題があります。カメラを移動し、プレーヤーの画像を回転させて、わずかにタイトルが付けられたテクスチャを除いて同じように見えることを期待して、すべてがうまくいきませんでした。下の例では、上に移動するとカメラが上に移動しますが、プレイヤーはテクスチャが向いている方向に応じて上に移動します (下の例では、テクスチャは 50 度移動します)。何が悪かったのか?どうやってそうなった?

の

これが私のコードです:

 glTranslatef(x, y, 0.0f);
 drawMap(); //You don't see the map in the picture
 glRotatef(50.0f, 0.0f, 0.0f, 1.0f);
 drawPlayer();

ありがとう!

4

1 に答える 1

2

OpenGL は、オブジェクトをカメラ空間に変換するモデルビュー マトリックスに MatrixStack を使用しています。

したがって、スタックを復元せずに平行移動すると、平行移動はプレーヤーにも適用され、回転はプレーヤーにのみ適用されます。変換を適用したくない場合は、以前にglPushMatrix()使用したことを意味するものを使用してスタックをリセットしますglPushMatrix()。そうしないと、一連のエラーが発生します

最初にモデルビュー マトリックスと、マトリックスを使用してオブジェクトを移動/回転/スケーリングする方法について読むことをお勧めします。

マトリックスを復元したい場合は glPushMatrix()、現在の状態をスタックにプッシュしたり glPopMatrix()、最後に使用された状態を復元したりすることができます。スタックは常に最後にクリアする必要があるため、 glPopMatrix() を glPushMatrix() と同じくらい頻繁に呼び出す必要があります。そうしないと、エラーが発生します。

OpenGL の背後にある線形代数と、それを OpenGL の組み込みメソッドで使用する方法について、非常に優れたチュートリアルがたくさんあります。[1] そして、ここで受け入れられた答えは、数学について非常に優れています [2]

[1] http://www.opengl.org/archives/resources/faq/technical/viewing.htm [2] 3D グラフィック処理 - モデルビュー行列の計算方法

于 2013-06-08T09:08:17.057 に答える