4

gl_Position が頂点の位置を変更するのと同じように、GLSL 頂点シェーダー プログラムを使用して単一の頂点の色を設定することは可能ですか?

4

1 に答える 1

10

バージョン 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と一緒に使用します。によって設定された頂点カラーは、頂点シェーダーのように読み取ることができます。頂点シェーダーでは、頂点ごとの属性です。glDrawArraysglDrawElementsglDrawRangeElementsglMultiDrawElementsglColorPointergl_Colorgl_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();
}
于 2010-03-31T16:08:56.253 に答える