2

解决方案:修正错字(glColor -> gl_Color)

我有一个灰度颜色的纹理和一个 0f 或 1f 的 alpha 通道(两者之间没有)。我想以绿色绘制纹理,但仅在 alpha 为 1 时绘制,当 alpha 为 0 时不绘制任何内容。要选择绿色,所以我将 glColor4fv green_opaque 设置为 GLfloat green_opaque .5 1 .5 1

现在,我使用这个片段着色器:

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,着色器会尊重 Alpha 通道,但渲染的纹理显然仍然是灰色的。现在,我定义了 A 并且着色器现在根据需要对纹理进行着色,但是现在忽略了 alpha 通道。

我在这里做错了什么?还是驱动程序/硬件错误?

OpenGL 供应商字符串:Advanced Micro Devices, Inc. OpenGL 渲染器字符串:AMD Radeon HD 6570 OpenGL 版本字符串:4.2.11554 兼容性配置文件上下文 OpenGL 着色语言版本字符串:4.20

回答:

“您是说着色器中的“gl_Color”而不是“glColor”吗?”

正是这个问题 - 顺便说一句,我昨天已经想通了,但由于 java 脚本问题,我还不能发布答案。

添加下划线后,着色器就完成了它应该做的事情。

4

0 回答 0