0

GLSLの他のバージョンでは、gl_BackColorは、現在のレンダリングフラグメントの背後にある色へのアクセスを提供するようです。これは、一部のカスタムアルファブレンディングに役立ちます。ただし、webglのglslはそれをサポートしていないようです。一方、前にgl_FragColorから読み取ります。値を割り当てると正しいbackColorが得られるようですが、Ubuntuでのみ機能します。MacBookProでは失敗し、役に立たないランダムな色しか得られないようです。

だから私の質問は、現在のレンダリングフラグメントの背後にあるbackColorにアクセスする直接的な方法はありますか?そうでない場合は、どうすればよいですか?

4

2 に答える 2

2

GLSLの他のバージョンでは、gl_BackColorは、現在のレンダリングフラグメントの背後にある色へのアクセスを提供するようです。

いいえ、これは事実ではありませんでした。両面照明を行うための裏面gl_BackColorの色でした。また、フラグメントシェーダーからはアクセスできませんでした。それは頂点シェーダー変数でした。

両面ライティングの場合は、両方gl_FrontColorgl_BackColor頂点シェーダーに書き込みます。フラグメントシェーダーのgl_Color変数は、カメラに面している側の色で埋められます。したがって、三角形の背面​​が前方にある場合、それは補間されgl_BackColorます。

あなたが求めているものは、GLSLでは利用できませんでした。

于 2012-06-02T04:54:40.820 に答える
1

Nicol Bolasが書いているように、直接的な方法はありません。

ただし、テクスチャへのレンダリングアプローチを使用することにより、間接的な方法を使用できます。

  1. まず、不透明なオブジェクト(存在する場合)を画面ではなくオフスクリーンテクスチャにレンダリングします。
  2. オフスクリーンテクスチャを画面にレンダリングします
  3. カスタムブレンディングを行うシェーダーを使用して、透明な「カスタムブレンディング」オブジェクトを画面にレンダリングします。(手動でブレンドを行っているため、GLのブレンドフラグを有効にしないでください)。オフスクリーンテクスチャをユニフォームとしてフラグメントシェーダーに追加する必要があります。これにより、背景色をサンプリングして、カスタムブレンドを計算できます。

複数の透明なオブジェクトをレンダリングする必要がある場合は、2つのオフスクリーンテクスチャとそれらの間のピンポンを使用して、すべてのオブジェクトがレンダリングされたときに最終的に結果を画面にレンダリングできます。

于 2012-06-02T07:47:30.693 に答える