私は DirectX で作業していたときに HLSL をコーディングしていましたが、かなり忘れてしまい、現在 GLSL とその仕組みを理解しようとしています。私は OpenFramework で OpenGL の固定パイプラインを使用していますが、これは私にとっては新しい概念ですが、良い出発点です。
私の最初の質問: 頂点シェーダーの場合、フラグメント シェーダーに入る前にすべての頂点が計算されますよね? フレーム バッファに入力されたすべての頂点の Z 座標の最小値/最大値を見つけるなど、ここで情報を事前に計算できますか?
次に、フラグメント シェーダーに入ると、さまざまな変数によってこれらの事前計算された値にアクセスできますか? したがって、可変変数 (頂点の z 位置からの最小値/最大値など) で頂点シェーダーから値を設定すると、後でフラグメント シェーダーからこれらの設定値にアクセスできますか?
また、Z 要素にアクセスするときの組み込み変数 gl_FragCoord は、すべての頂点に対して常に 1.0 を生成するようです。これは、頂点シェーダーで頂点の位置を変換する方法に関連していますか?
最後に、すべての頂点の最小/最大 Z 位置を見つけてフラグメント シェーダーに渡そうとしていますが、次のコードは正しいですか?
varying float minZ = 9999.9;
varying float maxZ = -9999.9;
void main()
{
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_TexCoord[1] = gl_MultiTexCoord1;
gl_FrontColor = gl_Color;
gl_Position = ftransform();
if (gl_Position.z < minZ) minZ = gl_Position.z;
if (gl_Position.z > maxZ) maxZ = gl_Position.z;
}
これが StackOverflow での質問の不適切な方法である場合は申し訳ありません。おそらく、いくつかの質問に分割する必要がありました。