1

私は現在、OpenGL を使用して基本を理解しようとしています。その時、私はその下にピラミッドがある Floating Cube をレンダリングしようとしました。Cube を Input で回転させ (これは既に機能しています)、Pyramid を本来あるべき場所にとどめたいと考えています。

の使い方を理解した後Push-PopMatrix立方体だけを回転させることができました。私の問題は、キーを離すとすぐにキューブの回転が止まることです。player.XとはそのPlayer.Z時点でリセットされません(チェック済み)。

だから私の推測では、PushMatrixある種の標準マトリックスをスタックに置き、それを回転させて表示します。1 * x常にイコールなのでx回転はありません。

問題は、新しいマトリックスではなく、「古い」マトリックスをスタックにプッシュするにはどうすればよいかということです。

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glPushMatrix();
glRotatef( -(player->Z), 1.0f, 0.0f, 0.0f );
glRotatef( -(player->X), 0.0f, 1.0f, 0.0f );
glBegin( GL_QUADS );
//Draw Cube
glEnd();
glPopMatrix(  );

glBegin( GL_TRIANGLES );
//Draw Pyramid
glEnd();


glFlush();
SwapBuffers (hDC);
4

1 に答える 1

1

glPushMatrix()は、「標準」マトリックスをスタックにプッシュせず、現在のマトリックスをプッシュします。うまくいけば、ある時点でマトリックスを初期化し、glLoadIdentity()場合によってはビューを設定するための初期変換をいくつか行ったので、これがプッシュされます。

エラーが最終的に蓄積されるため、通常、そのマトリックスをフレームごとに更新し続けるべきではありません。

代わりに、キーダウンルーチンではなく、更新ループでローテーション値を更新します。

また、GLを使用したこのレンダリング方法は、非推奨と見なされていることに注意してください。推奨されるアプローチは、プログラム可能なパイプラインを使用することです。これには、(他の変更の中でも)独自のマトリックスを作成することが含まれます。

(他のものをレンダリングするためにプッシュおよびポップしながら永続的な変換を維持したい場合は、現在のマトリックスをで読み取り、glGet()どこかに保存してから、を実行しglLoadMatrix()て後で再度復元することができます...しかし、これのためにそれをしなさい。)

于 2013-02-01T08:47:28.237 に答える