0

OpenGL レンダリング パイプラインについて質問があります。

最近、GLSL の Geometry Shader に関する理論を読んでいます。新しいジオメトリを放出し、新しい頂点に色を割り当てる方法の基本を理解していると思います。ただし、これらの新しい頂点の 1 つが Vertex シェーダーからの頂点とまったく同じ位置にある場合、フラグメントがどのような色になるかはわかりません。

次の例を考えてみましょう。私が理解している限りでは、Vertex シェーダーで 1 つの頂点を処理できます。何らかの変換を行い、その位置を glPosition に保存します。さらに、たとえば glFrontColor に格納することにより、その頂点に色を割り当てることができます。例として、赤色を指定します。すべてのチャネルが 32 ビットの場合、0xFFFFFFFF'00000000'00000000'00000000 になりますね。次に、ジオメトリ シェーダーが関係します。ジオメトリ シェーダーがいくつかの追加の頂点を放出するようにします。それらの少なくとも 1 つは、Vertex シェーダーから入ってくる元の頂点とまったく同じ位置にあります。ただし、緑などの別の色が割り当てられます。それは 0x00000000'FFFFFFFF'00000000'00000000 ですよね?遅かれ早かれ、すべての頂点が処理された後、ラスタライズが行われます。私が理解しているように、両方の頂点がラスタライズされるため、まったく同じフラグメントになります。では、行きましょう。その特定のフラグメントは何色になりますか? ある種の自動ブレンディングがあり、フラグメントは黄色になりますか? それとも赤というか緑ですか?

この質問はばかげているかもしれません。しかし、私はそれについてはっきりしていません。誰かが私のためにそれを明確にしていただければ幸いです.

ブレンディングがない場合 (私はそう思います)、どうすればブレンディング効果を作成できますか?

4

2 に答える 2

2

ポイントをレンダリングしていると仮定すると(これはあなたが説明しているようです)、異なる色の2つの頂点は、同じ場所に2つのフラグメント(頂点ごとに1つ)になります。出力に書き込まれる最終的な色は、それぞれの Z 値、ブレンディング関数セット、およびそれらが処理される順序によって異なります (これは事実上ランダムです。追加の同期を行わない限り、どちらの順序も当てにできません)。ので、ブレンド関数/Z-カリングを問題にならないように設定する必要があります)。

于 2010-11-10T19:13:21.163 に答える
0

xy と z の値がまったく同じ場合、それらはZ-Fightingになると思います。

ブレンドについて:

これはプログラム可能なパイプラインとは別のものであるため、シェーダーでほとんどの作業を行う必要はありません。最初に でブレンドを有効にし、最も一般的には でglEnable(GL_BLEND)目的のブレンド関数を指定します。これで、頂点は に設定されたアルファ値のみが必要になり、それらの色がブレンドされます。glBlendFuncglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)gl_FragColor.a

于 2010-11-10T13:32:35.777 に答える