6

多くのGL_POINTSといくつかのGL_LINESを描画する古いOpenGLプログラムにいくつかのシェーダーを追加しようとしています。

これらの2つのシェーダーを作成しました。

バーテックスシェーダー:

void main()
{ 
    vec4 v = vec4(gl_Vertex);
    v.z = v.z + sin(v.x*v.x + v.y*v.y)/10.0;
    gl_Position = gl_ModelViewProjectionMatrix * v;
}

フラグメントシェーダー:

#version 120 

void main()
{
    vec4 myOutputColor = gl_Color;
    gl_FragColor = myOutputColor;
    //gl_FragColor.r = 0.5;
}

これらの2つのシェーダーは、問題なくコンパイルおよびリンクされます。そして、頂点シェーダーはうまく機能します。頂点シェーダーでそのsinを使用してGL_POINTSが置き換えられているのがわかります。しかし、問題は、すべての点と線が黒にレンダリングされるため、背景色が黒でない場合にのみGL_POINTSとGL_LINESを表示できることです。レンダリングコードでglColor3fで設定されたすべての色が無視されているようです。フラグメントシェーダーでコメント化された行のコメントを解除すると、すべての行とポイントを赤にすることができますが、gl_Colorは各ポイントにglColor3fで設定された色に対応するべきではありませんか?

この動作を引き起こす可能性のあるOpenGLコードに他に何かありますか?

4

1 に答える 1

11

頂点シェーダーで色を通過させる必要があります。

gl_FrontColor = gl_Color;
于 2010-03-04T21:21:16.547 に答える