Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 片段着色器使用alpha通道为灰度纹理着色_Opengl_Shader - Fatal编程技术网

Opengl 片段着色器使用alpha通道为灰度纹理着色

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;"

解决方案:修复键入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;"
        "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编译器是否有任何错误或警告?