gl_Position が頂点の位置を変更するのと同じように、GLSL 頂点シェーダー プログラムを使用して単一の頂点の色を設定することは可能ですか?
1 に答える
バージョン 1.30 より前の GLSL のバージョンでは、頂点シェーダーでアクセス可能な変数であるgl_FrontColor
またはgl_BackColor
ビルトインに書き込む必要があります。GLSL 1.10 仕様 ( http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.10.59.pdf ) の変動について読んで、GL_ARB_vertex_shader 拡張仕様について詳しく学んでください。
gl_FrontColor
およびgl_BackColor
は、正規化された浮動小数点スカラーを取る 4D RGBA ベクトルです。
ただし、これにより、1 つの頂点だけでなく、すべての頂点が赤に設定されます。これは、すべての頂点に対して同じ頂点シェーダーが実行されるためです。個々の色を設定する場合は、 、、または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();
}