1

この次のコードを使用する場合:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 6);

次に、マルチサンプリングを有効にすると、プログラムが最大ミップ レベルを気にしなくなったことに気付きました。

編集:最後のミップレベルもレンダリングします。これが問題です。レンダリングしたくありません。

Edit3: ミップ制限をまったく忘れないことをテストして確認したため、GL_TEXTURE_MAX_LEVEL 設定に従います。...だから、問題はミップマップに関連していない、と思う...

Edit2:スクリーンショット、これは世界地図を大幅に縮小し、低角度を使用して効果を可能な限り最悪の方法で表示します。また、地図の下に水平面がレンダリングされているため、地図以外の場所から黒いピクセルを取得する可能性はありませんテクスチャ:

代替テキスト http://img511.imageshack.us/img511/6635/multisamplingtexturelim.png

Edit4:これらの写真はすべて右上隅の写真のように見えるはずです (マルチサンプリングに応じてエッジが滑らかになります)。しかし、どうやら私のコードには何かひどく間違っているようです。ミップマップを使用する必要があります。ミップマップは問題ではなく、完全に機能します。

何が間違っているのですか、どうすればこれを修正できますか?

4

3 に答える 3

1

MIN_FILTER に設定した内容も確認してください。

glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, ... );

別の設定を試してください (一覧はこちら)。

ただし、gluBuild2DMipmaps の結果に満足できない場合は、別の方法を検討することをお勧めします。

特に後者は高度にカスタマイズ可能です。言及されていないことですが、この拡張機能は true に設定することで起動されGL_GENERATE_MIPMAPます。これは自動的に行われるため、データが変更された場合に再計算を行う必要はありません。

于 2010-01-13T18:52:10.323 に答える
1

Ok。結局、問題は TEXTURE_MAX_LEVEL ではありませんでした。簡単なテストがそれを理解するのに役立ったのはおかしいです。

LOD が異なる方法で選択されているという 2 つの理論がありましたが、どちらも単色テストで反証されているようです。

では第三の説へ。私があなたのシーンを正しく理解していれば、テクスチャ アトラスを使用しているモデルがあり、アトラスの特定のアイテムから取得するはずの一部のポリゴンが、実際には別のアイテムから取得されていることがわかります。そうですか?

これは、マルチサンプリングされたフラグメントは通常、ピクセルの中央でサンプリングされるという事実によって説明できます。その中心がサンプルを生成した三角形の内側にない場合でも。図については、このページの下部を参照してください。

これを回避するための通常の方法は、セントロイド サンプリングと呼ばれます (このページには問題の素敵なイラストもあります)。サンプリングが三角形の内側にサンプリング ポイントを戻すように強制します。

ここで悪いニュースです。プログラマブル パイプラインの外部でセントロイド フィルタリングを有効にする方法を私は知りません。あなたはそれを使用していません。その機能にアクセスするために切り替えますか?

編集して追加:

また、テクスチャ アトラスを使用しないことは、これを回避する方法です。これが非常に目に見える理由は、「三角形から外れた」サンプリング パターンを使用してアトラスの別の部分からフェッチを開始するためです。

于 2010-01-14T23:46:02.327 に答える
0

レンダリングで常にマルチサンプリングを有効にしたい場合は、nvidia コントロール パネルではなく、アプリケーションからマルチサンプリングを有効にする必要があります。それはあなたの問題を解決するかもしれません.

コントロール パネルのマルチサンプリングを使用するときに無視される設定についてはGL_TEXTURE_MAX_LEVEL、ドライバーのバグ/機能のように聞こえます。この機能は、テクスチャに実際にロードするものを制限するために使用できるため、奇妙です (いわゆるテクスチャの完全性基準)。最低のミップマップ レベルをまったく読み込まないとどうなりますか? 何をレンダリングしますか?

編集:あなたが示している写真から、設定を無視しているようには見えません。1 つには、MAX_LEVEL=0 は MAX_LEVEL=6 とは異なります。テクスチャのノイズを考えると、MAX_LEVEL=6/MS オフがきれいに見える理由がわかりません。MAX_LEVEL =16/MS オフ画像に基づくと、ノイズが多いはずです。この時点で、取得しているミップ レベルを正確に確認するために、拡散テクスチャの各ミップ レベルに個別のソリッド カラーを配置することをお勧めします (GL に依存してミップを構築しないでください)。

于 2010-01-09T18:20:11.540 に答える