1

私は LibGDX フレームワークを使用してペイント アプリに取り組んでいますが、これは主に OpenGL 関連である必要があります。

基本的に、描画に使用するスプライトが完全に不透明でない場合に互いに重ならないようにする方法を探しています。これは多くの不快な効果を生み出すためです。スプライトを 1.0 アルファでテクスチャに描画し、そのテクスチャを目的のアルファで描画すると、必要な効果が得られますが、その方法では、ユーザーが描画しているときにテクスチャを絶えず再作成する必要があり、実行するにはあまりにも集中的です。

私が見る限り、基本的には、フラグメント シェーダーでこれらのスプライトの 1 つを他のスプライトから差し引くのが最善の選択肢です。このルートがうまくいくと確信していますが、実際にフラグメント シェーダーでそれらを比較できるポイントに到達する方法がわかりません。どちらも常に同じ単一のテクスチャを使用しますが、異なる場所に配置されます。実際にそれらをそのように比較することはまったく可能ですか、それとも適切な代替手段はありますか?

4

1 に答える 1

1

フラグメント シェーダーまたは頂点シェーダーの異なるジオメトリ (スプライト) に適用される 2 つのテクスチャを比較することは実際には不可能です。これは、シェーダーの異なるイテレーションで異なる時点でレンダリングされるためです。

2 つ以上のテクスチャ ユニットを使用して複数のテクスチャをサンプリングして差し引くこともできますが、それらは同じ頂点 (スプライト) に適用する必要があり、これは望ましくないと思います。

より良いアプローチは、スプライトがレンダリングされる前にスプライトの近接性を計算することです。次に、それらの位置を変更するか、近接度を一様な値としてシェーダーに渡します。これを使用して、スプライトのフラグメント ピクセルのアルファを変更できます。

于 2013-07-08T02:03:19.917 に答える