2

ここに画像の説明を入力OpenGL ES を使用して、iPad で従来のタイル/ミップマップの問題が発生しています。基本的に、大きなテクスチャ (1k X 1k より大きい) がある場合は、それを断片に分割し、それらの断片を個々のポリゴンにマッピングできます。テクスチャ座標をエッジにクランプでき、ほとんどの場合は機能しますが、境界に沿ってアーティファクトが発生します。

これで、なぜこれが発生するのかがわかり、従来のソリューションが何であるかがわかりました。つまり、それぞれの小さなテクスチャ (たとえば 6 ピクセル) の外側に境界線を作成します。小さなテクスチャから大きなテクスチャにサンプリングするので、それらの内側のピクセル (256-2*6 など) を使用するだけです。次に、有効なピクセルを境界領域に塗りつけます。最後に、テクスチャ座標をマッピングして、有効な内部ピクセルのみを使用します。正常に動作します。

この時点でうなずいていない場合は、答えようとしないでください。:-)

とにかく、OpenGLはこれを解決するためにクランプモードを導入しました。これらのモードは OpenGL ES (少なくともこのハードウェアでは) には見られず、この問題に関する他の参照も見られます。何かが欠けているのではないかと思います。私が気付いていないタイル/エッジの問題を解決する新しい方法はありますか?

[更新] 結果のスクリーンショットをここに添付します。目に見える線は、あるテクスチャの終わりと別のテクスチャの始まりにあります。これはCLAMP_TO_EDGEを使用しています。

4

2 に答える 2

3

GLESはGL_CLAMP_TO_EDGEを提供しますが、GL_CLAMPは提供しません。これは、極端なエッジではなく、テクスチャの最も外側のピクセルの中心にクランプします。したがって、範囲外(境界またはラップアラウンド)アクセスはCLAMP_TO_EDGEで完全に防止されますが、CLAMPでは防止されません。

CLAMP_TO_EDGEはGLES仕様の一部であるため(ここでは1.1ここでは2.0)、ハードウェアがそれをサポートしていない場合、技術的にはGLESに準拠していません。フルOpenGLでも利用できますが、バージョン1.2以降のみだと思います。CLAMP_TO_EDGEがESに飛躍したことを意味しますが、前者は後者の修正バージョンと見なされるため、CLAMPは飛躍しませんでした。

CLAMP_TO_EDGEはあなたがしていることに適しているはずだと私には思えます—私は誤解しましたか?

于 2011-02-18T18:21:04.317 に答える
0

結局、問題はテクスチャ圧縮に関連していました。線は、テクスチャが巻き付いていると仮定した圧縮方法によるものです。

必要以上に少し大きいテクスチャを作成し、圧縮してから各テクスチャ内の領域のみを使用して境界線を残すことで、問題を解決しました。

于 2011-05-13T20:22:04.107 に答える