0

私は OpenGL ES シェーディング言語仕様を読んでいますが、私を困惑させるセクションがあります。

7.2 フラグメント シェーダーの特殊変数
...
フラグメント シェーダーが gl_FragColor または gl_FragData に書き込む必要はありません。カラー値が書き込まれないレンダリング パスを含む、シャドウ ボリュームなどの多くのアルゴリズムがあります。

シャドウ ボリュームとシェーダーに関する多くの記事を見てきましたが、頂点シェーダーだけからデータを返す方法がないように見えるため、これらのアルゴリズムがカラー値を書き込まずに何かを実行する方法についての情報を見つけることができません。 ESプラットフォームで。Desktop GL にはこの種のエフェクト用のジオメトリ シェーダーがありましたが、ES 2.0 Core にはそのようなものはありません。

これはうっかりデスクトップ仕様から取り残されたもので、拡張を可能にするものですか、それとも単に何かを見逃しただけなのでしょうか?

4

1 に答える 1

1

数週間前に、opengl es 2.0 を使用したシャドウ ボリューム アルゴを書きました。

この目的のために、一部のパスでは、色を書きません。

たとえば、ステンシル バッファーを使用して、表示/非表示の面とシルエットに基づいてステンシルをインクリメント/デクリメントする必要があります。この作業を行うときは、色を無効にする必要があります (GLES20.glColorMask(false, false, false, false);)。

そうしないと、多くのアーティファクトが発生します。ここでの目標は、色 (フラグメント バッファー) を更新せずにステンシルを更新することです。

シャドウ ボリュームと色を無効にする必要がある理由に関する詳細情報: http://http.developer.nvidia.com/GPUGems/gpugems_ch09.html

(下手な英語でごめんなさい) :-)

于 2012-07-31T05:04:44.957 に答える