2

解決策: タイプミスを修正します (glColor -> gl_Color)

グレースケール カラーのテクスチャと、0f または 1f (間に何もない) のアルファ チャネルがあります。テクスチャを緑で描画したいのですが、アルファが 1 のときだけで、アルファが 0 のときは何も描画しません。緑を選択するには、GLfloat green_opaque .5 1 .5 1 で glColor4fv green_opaque を設定しました。

今、私はこのフラグメント シェーダーを使用します。

const char * fragment_shader_source=
        "uniform sampler2D tex;"
        "void main() {"
        "       vec4 color=texture2D(tex,gl_TexCoord[0].st);"
        "       if (color[3]!=0) {"
#ifdef A
        "               gl_FragColor=color*glColor;"
#else
        "               gl_FragColor=color;"
#endif
        "       } else {"
        "               discard;"
        "       }"
        "}"
;

A がない場合、シェーダーはアルファ チャネルを尊重しますが、レンダリングされたテクスチャは明らかにグレーのままです。ここで、A を定義すると、シェーダーは希望どおりにテクスチャを色付けしますが、アルファ チャネルは無視されます。

ここで何が間違っていますか?それともドライバー/ハードウェアのバグですか?

OpenGL ベンダー文字列: Advanced Micro Devices, Inc. OpenGL レンダラー文字列: AMD Radeon HD 6570 OpenGL バージョン文字列: 4.2.11554 互換性プロファイル コンテキスト OpenGL シェーディング言語バージョン文字列: 4.20

答え:

「シェーダーの「glColor」ではなく「gl_Color」のことですか?

まさにそれが問題でした-ところで、私は昨日すでに自分自身を理解していましたが、Javaスクリプトの問題により、まだ回答を投稿できませんでした.

アンダースコアを追加した後、シェーダーは本来の動作を正確に実行しました。

4

0 に答える 0