-1

私が何を求めているのか理解できないなら、つまり -

glPushMatrix();
glPushMatrix();
glPushMatrix();
glPushMatrix(); // push matrix 4 times
glTranslatef(...);
//do stuff
glPopMatrix(); // pull it up 1, so we can do more stuff
glTranslatef(...);
// do stuff
glPopMatrix(); // and again, and again, etc
glTranslatef(...);
// do stuff
glPopMatrix();
glTranslatef(...);
// do stuff
glPopMatrix();

それでもすべてうまくいくでしょうか?

4

1 に答える 1

1

はい、現在のマトリックスモード( 、、など)glPushMatrixの現在のマトリックスをマトリックススタックにプッシュし、最初のマトリックスをポップバックします。マトリックスモードごとに個別のスタックがあります。GL_PROJECTIONGL_MODELVIEWglPopMatrix

このメソッドに関するドキュメントを掲載するのに十分な古い公式のOpenGLマニュアルページがあるようには見えませんが、このサイトは最初の結果の1つとして登場し、同じテキストが含まれています:http: //www.manpagez.com/man/ 3 / glPushMatrix /

そのページによると、GL_MODELVIEWスタックは少なくとも32マトリックスの深さであり、他のすべてのスタックは少なくとも2マトリックスの深さであることが保証されているようです。現代のカードでは、おそらくはるかに高いです。glGetスタックの深さの適切なパラメータ、つまりGL_MODELVIEW_STACK_DEPTHまたはGL_PROJECTION_STACK_DEPTHなどを使用して呼び出すことにより、正確な数をポーリングできます。

また、マトリックススタックは、ユーザー管理のマトリックスを優先して、かなり前に非推奨になりました。小さなプログラムを書いている場合や単に学習している場合は、非推奨のOpenGLを使用してもまったく問題ありません。OpenGLマトリックスに関する完全性のために、私がそれについて言及する必要があるように感じました。

于 2012-11-05T05:52:10.123 に答える