1

私は回転メッシュに取り組んでいますが、回転の特定の段階を除いて、ほとんどの部分で問題なく動作します。例えば:

ここに画像の説明を入力

間に

ここに画像の説明を入力

ここに画像の説明を入力

ご覧のように、OpenGL が目の前にあるものに対する意識を変えるようです。面白いことに、前と後の段階はどちらも「正常」に見えますが、お互いの反転のようなものです。(トリッピーな光学効果ですが、私が望んでいたものではありません。)

GLKit を使用して iOS 6 でプログラミングしています。

問題がセットアップと描画コードにあるのか、回転の仕方に関係があるのか​​ わかりません。どんな洞察も大歓迎です。

4

1 に答える 1

1

これを投稿した直後に、幸いにも私の答えが見つかりました。深度バッファを有効にするために必要なだけです。

view.drawableDepthFormat = GLKViewDrawableDepthFormat16;

(ビューはあなたのものですGLKView*

素敵な説明をしてくれたRay Wenderlichに感謝します:

drawableDepthFormat

OpenGL コンテキストには、必要に応じて、深度バッファーと呼ばれる別のバッファーを関連付けることもできます。これにより、ビューアに近いオブジェクトが遠くのオブジェクトの前に表示されるようになります。

デフォルトでの動作方法は、OpenGL がバッファ内の各ピクセルでビューアに最も近いオブジェクトを格納することです。ピクセルを描画するときは、深度バッファーをチェックして、既にビューアーに近いものが描画されているかどうかを確認し、描画されている場合は破棄します。それ以外の場合は、深度バッファーとカラー バッファーに追加します。

このプロパティを設定して、深度バッファーの形式を選択できます。デフォルト値は GLKViewDrawableDepthFormatNone で、深度バッファーがまったく有効になっていないことを意味します。

ただし、この機能が必要な場合 (通常は 3D ゲームで行います)、GLKViewDrawableDepthFormat16 または GLKViewDrawableDepthFormat24 を選択する必要があります。ここでのトレードオフは、GLKViewDrawableDepthFormat16 を使用することです。アプリが使用するリソースは少なくなりますが、オブジェクトが互いに非常に接近している場合、レンダリングの問題が発生する可能性があります。

于 2014-03-29T02:05:12.057 に答える