Opengl 片段着色器使用alpha通道为灰度纹理着色
解决方案:修复键入glColor->gl\u Color 我有一个灰度颜色的纹理和一个0f或1f之间没有任何东西的alpha通道。我想以绿色绘制纹理,但仅当alpha为1时绘制,当alpha为0时不绘制任何内容。为了选择绿色,我将glColor4fv green_不透明设置为GLfloat green_不透明。51.51 现在,我使用这个片段着色器:Opengl 片段着色器使用alpha通道为灰度纹理着色,opengl,shader,Opengl,Shader,解决方案:修复键入glColor->gl\u Color 我有一个灰度颜色的纹理和一个0f或1f之间没有任何东西的alpha通道。我想以绿色绘制纹理,但仅当alpha为1时绘制,当alpha为0时不绘制任何内容。为了选择绿色,我将glColor4fv green_不透明设置为GLfloat green_不透明。51.51 现在,我使用这个片段着色器: const char * fragment_shader_source= "uniform sampler2D tex;"
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;"
" }"
"}"
;
如果不使用,着色器将尊重alpha通道,但渲染纹理显然仍为灰色。现在,我定义了一个着色器,着色器现在根据我的需要为纹理着色,但alpha通道现在被忽略
我做错了什么?还是一个驱动程序/硬件缺陷
OpenGL供应商字符串:Advanced Micro Devices,Inc。
OpenGL渲染器字符串:AMD Radeon HD 6570
OpenGL版本字符串:4.2.11554兼容配置文件上下文
OpenGL着色语言版本字符串:4.20
答复:
你的意思是在着色器中使用gl_颜色而不是glColor吗 这正是问题所在——顺便说一句,我昨天已经自己解决了这个问题,但是由于java脚本的问题,我还不能给出答案
添加下划线后,着色器执行了它应该执行的操作。您说alpha通道被忽略。那么,您希望alpha通道做什么?您是指着色器中的gl_颜色而不是glColor吗?GLSL编译器有任何错误或警告吗?您说alpha通道被忽略。那么,您希望alpha通道做什么?您是指着色器中的gl_颜色而不是glColor吗?GLSL编译器是否有任何错误或警告?