パススルー頂点シェーダーとフラグメントシェーダーがあります。
頂点シェーダー
void main(void)
{
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
フラグメントシェーダー
void main(void)
{
gl_FragColor = gl_Color;
}
それらは空のレンダリングを生成します(glClearBufferのように背景色ではなく黒)。
頂点シェーダーを変更してgl_FrontColorをgl_Colorに設定すると、手付かずのOpenGlバッファーがレンダリングされます...パススルーシェーダーの予想される動作です。
void main(void)
{
gl_FrontColor = gl_Color; //Added line
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
混乱しています。頂点シェーダーのgl_FrontColorを設定すると、フラグメント1のgl_Colorの値がどのように変わるのでしょうか。私が欠けているものは何ですか?
gl_Color
は、場所によって意味が異なります。
頂点シェーダーでは、gl_Color
はユーザーから渡された主要な頂点ごとの色属性を表します。これは、glColor*
呼び出しまたはglColorPointer
によってフェッチされた配列データを使用して設定されます。
フラグメントシェーダーでは、gl_Color
は、レンダリングされる三角形の面の補間色を表します。三角形には前面と背面があることに注意してください。面カリングを有効にすると、一方または他方(または両方)のすべての面がレンダリングされません。ただし、フェイスカリングをオフにすると、両面がレンダリングされます。
三角形の特定の面に基づいて、頂点ごとの出力値を変えると便利なことがよくあります。原色には、前面の色と背面の色があり、前面の三角形と背面の三角形の色を表します。これらの頂点シェーダー出力は、gl_FrontColor
とgl_BackColor
です。
両面レンダリングを行う場合、フラグメントシェーダーのgl_Color
入力が何かを意味するようにするには、これらの値の両方を設定する必要があります。正面レンダリングのみを行う場合は、gl_FrontColor
を設定するだけで済みます。
gl_Colorは、ソースで頂点に渡した色であるため、属性です。 gl_FrontColor(およびBackColor)は、プリミティブのどちら側に表示されるかに応じて、フラグメントシェーダーのgl_Colorを設定するバリエーションです。したがって、フロントを見ると、gl_Colorはgl_FrontColorと等しくなります...