1

私は友人とゲームに取り組んでおり、openGl、glut、devIL、および c++ を使用してすべてをレンダリングしています。簡単に言うと、使用しているほとんどの .png は適切にレンダリングされていますが、ランダムなピクセルが白く表示されています。

これらのピクセルは 2 つのカテゴリに分類されます。1 つ目は、画像の端にあるピクセルです。これらは、Photoshop のストローク機能 (私が修正しようとしている) によるアンチエイリアシングの結果です。2番目はより神秘的なものです。敵が静止しているときはテクスチャがきれいに見えますが、ジャンプするとすぐにその上にランダムな白い線が表示されます。

ここに画像の説明を入力

上の線はさまざまな固さがあります (このショットは最も固いわけではありません)。

ブレンディングの問題のようですが、openGl が透過性を処理する方法にはあまり詳しくありません (透過性に関するコードは、スタック オーバーフローに関する他の質問から学びましたが、この問題については何も見つかりませんでした)。両方の問題が解決されることを願っていますが、後者の方が心配です。

現在のセットアップ コード:

glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
4

2 に答える 2

1

ビットマップの透明な領域にも色があります。100% 透明の場合、通常は見えません。Photoshop は通常、これらの領域を白で塗りつぶします。

GL_NEAREST ではない縮小フラグまたは拡大フラグを使用している場合は、補間が行われます。一方が青で不透明で、もう一方が白で透明な 2 つのピクセルの間を補間すると、50% 透明で水色のピクセルが得られます。補間が使用されるため、mimap でも同じ問題が発生する可能性があります。ミップマップを使用する場合、解決策の 1 つは、ミップマップを自分で生成することです。そうすれば、補間を行うときに透明な領域を無視できます。ここでいくつかの良い説明を参照してください: http://answers.unity3d.com/questions/10302/messy-alpha-problem-white-around-edges.html

なぜpngファイルを使用しているのですか?ディスク容量をいくらか節約できますが、devil のような複雑なライブラリを含める必要があります。配信パッケージを作成するほとんどのツールは非常に効率的な圧縮機能を備えているため、アプリケーションの配信でスペースを節約することはできません。また、最も重要な GPU でメモリを節約することもありません。

于 2012-07-29T20:26:27.370 に答える
0

これは、ソースPNGのアーティファクトのように見えます。そこにそのような明るい不透明なピクセルがないことを確認しますか?

上部に表示される白い線は、テクスチャアトラスの隣接テクスチャからのUV補間エラーである可能性があります(または、NPOTテクスチャを白い不透明ピクセルでPOTにパディングする場合はパディング)。そのため、通常、すべての方向に少なくとも1つのエッジピクセルでテクスチャをパディングする必要があります。Larsが言ったように、それはミップマップには役立ちません-カスタムミップマップ生成を使用するか、それを完全に削除する必要があるかもしれません。

于 2012-07-30T11:36:56.547 に答える