1

次の問題: 2 つのテクスチャがあり、これら 2 つを新しいテクスチャに結合したいと考えています。したがって、一方のテクスチャが背景として使用され、もう一方がオーバーレイされます。オーバーレイ テクスチャは glClearColor(1.0, 1.0, 1.0, 0.0) で初期化されています。オブジェクトはテクスチャ上に描画され、これらのオブジェクトにはアルファ値があります。

2 つのテクスチャをブレンドすると、オブジェクトの周りに白い境界線が残ります。境界線は、2 番目のテクスチャの背景色が白であることに由来しますね。

オーバーレイ テクスチャの背景色を考慮する必要がないアルファ ブレンディングを使用するにはどうすればよいですか?

4

4 に答える 4

5

私は自分で問題を解決しましたが、皆さんに感謝します!

問題は次のとおりです。両方のテクスチャを結合するために glblend(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) を使用しましたが、これは OpenGL が乗算済みのアルファ値を使用するため機能しません。glblend(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) とのブレンドは、ソース タームが次のように機能します: 1*src_alpha*src_color!

于 2011-09-19T14:10:24.377 に答える
1

オーバーレイ テクスチャの背景色を考慮する必要がないアルファ ブレンディングを使用するにはどうすればよいですか?

できません; 実際には「背景」ではない可能性があるため、ブレンド関数には背景色が組み込まれています。複数のオブジェクトをテクスチャにレンダリングするため、「背景」の色は実際には以前にレンダリングされたオブジェクトである可能性があります。

最善の策は、影響を最小限に抑えることです。背景色が白である必要は特にありません。黒くするだけ。これでアーティファクトがなくなるわけではありません。うまくいけば、目立たなくなります。

単純な事実として、グラフィックス カードでのブレンドは、現在行っている種類の合成を実行できるようには設計されていません。ブレンドするものが不透明な場合に最適です。不透明なサーフェスとレンダリングするものの間に透明なレイヤーがあっても、機能します。

しかし、背景が実際に透明で、完全に不透明な色がない場合、数学は単純に機能しなくなります。アーティファクトを取得します。問題は、それらがどれだけ目立つかです。

より高度なハードウェアにアクセスできる場合は、シェーダー ベースのプログラムによるブレンド手法を使用できます。しかし、これらはパフォーマンスに影響を与えます。

于 2011-09-16T08:29:19.613 に答える
0

ニコル・ボーラスが指摘したように、おそらく黒の背景でより良い結果が得られると思います. しかし、あなたが指摘するように、それは問題ではないはずなので、ブレンド関数を再確認する必要があります...

1.0 * 0.0 + 0.734 * 1.0 = 0.734

私が本当に得られないのは、なぜあなたのベーステクスチャが完全に透明なのですか? それは意図したものですか?テクスチャをブレンドして別の場所で使用しない限り、アルファ = 1.0 に初期化するのはバッター アイデアです。

于 2011-09-19T12:52:40.510 に答える