質問
それはgl_Positionは、頂点の位置を変更するのと同じように、GLSLの頂点シェーダプログラムを使用して、単一の頂点の色を設定することは可能ですか?
解決
GLSLのバージョンの以前のバージョン1.30には、頂点シェーダでアクセス可変長あるgl_FrontColor
またはgl_BackColor
組み込み関数、への書き込みにしたいです。 // WWW:GLSL 1.10仕様( HTTPで可変長についての記事を読みます.opengl.org /レジストリ/ DOC / GLSLangSpec.Full.1.10.59.pdf に)それらについての詳細を学び、またはGL_ARB_vertex_shader拡張仕様にする。
gl_FrontColor
とgl_BackColor
正規化浮動小数点スカラーを取る4D RGBAベクトルである。
しかし、この意志セットのすべてのの赤だけではなく、一つの頂点に頂点。同じ頂点シェーダは、すべての頂点のために実行されるためです。あなたはglColorPointer
、glDrawArrays
、glDrawElements
またはglDrawRangeElements
と一緒に個々の色、使用glMultiDrawElements
を設定したい場合。 glColorPointer
によって設定された頂点の色は、頂点シェーダでgl_Color
として読み取ることができます。頂点シェーダでgl_Color
は頂点ごとの属性です。
は、頂点シェーダに書いた色を読み取るには、フラグメントシェーダでは、読みビルトインgl_Color
を変えます。完成した断片はgl_FragColor
に書き込む必要があります。
頂点シェーダ例:
void main()
{
gl_FrontColor = gl_Color;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
フラグメントシェーダ例:
void main()
{
gl_FragColor = gl_Color;
}
また、頂点シェーダは、ちょうどOpenGLの固定機能パイプラインのような可変長を設定するために、()関数ftransformを呼び出す。
void main()
{
ftransform();
}