1

古い OpenGL ES 1 を使用する Android プロジェクトがあります。この種のネストされた呼び出しを使用しています。

...
gl.glPushMatrix();
...
gl.glPushMatrix();
...
gl.glPopMatrix();
...
gl.glPopMatrix();
...

エミュレーターと私の電話では正常に動作していますが、私のタブと兄弟のタブでは動作していません (オブジェクトの位置が間違っています)。私のテストによると、ネストされた glPushMatrix はサポートされていないようです。たとえば、スタック サイズが 1 の場合のように、最初の POP は前の PUSH 状態に戻るのではなく、最初の PUSH 状態に戻ります。ネストされた呼び出しを使用せずに回避策を試みたところ、問題なく動作しましたが、そのような解決策は次の作業を複雑にします。それは既知のことですか?一部のデバイスのスタック サイズは 1 だけですか? 少なくとも 32 かそこらであるべきだと思いました。どういうわけか検出可能および/または構成可能ですか? 何らかの方法でマトリックスを何らかの配列または別の構造にエクスポートして、独自のスタックを作成し、そこから手動でロードできますか? ありがとう。

4

1 に答える 1

2

次を使用して、スタックの深さを読み取ることができます。

glGetIntegerv(GL_MAX_MODELVIEW_STACK_DEPTH, &result);

実際には少なくとも 32 である必要があります。

これは、実際に GL_MODELVIEW マトリックス スタックを使用していて、誤ってすべての変換を GL_PROJECTION などにプッシュしていないことを前提としています。

理想的には、この機能は非推奨であるため、行列を自分で計算する必要があります。

于 2013-01-19T19:43:47.050 に答える