着色器不工作

Posted

技术标签:

【中文标题】着色器不工作【英文标题】:Shader Not Working 【发布时间】:2013-07-28 20:42:18 【问题描述】:

所以我不能让我的着色器用颜色渲染。当我不使用属性颜色设置颜色时,我的着色器工作。 我的顶点代码是:

typedef struct

   GLKVector3 Position;         //Position
   GLKVector4 Color;        //32 Bit color
   GLKVector3 Normal;       //For Lighting
   GLKVector2 TexCoord;         //For Texturing
 Vertex;

我将所有顶点的颜色设为 [1,0,0,1] 我的顶点着色器是这样的:

attribute vec3 Position;
attribute vec4 Color;
attribute vec3 Normal;
attribute vec2 TexCoord;
uniform mat4 ModelViewMatrix;
uniform mat4 ProjectionMatrix;
varying vec4 DestinationColor;
void main(void)

    gl_Position = ProjectionMatrix*ModelViewMatrix*vec4(Position,1);
    DestinationColor = Color;
       

我的片段着色器是这样的:

precision mediump float;
varying lowp vec4 DestinationColor; 
void main (void)  
     
     gl_FragColor =DestinationColor;
    

它什么也不显示。

如果我将片段着色器更改为 gl_FragColor = vec4(1,0,0,1); 它甚至都不起作用除非我取消注释顶点着色器中设置 DestinationColor 的行。

请帮助我已经坐了一段时间了

【问题讨论】:

我看不出你在做什么有什么问题。您是否正在检查着色器和程序编译中的错误日志? 是的,它没有错误地完成并且运行良好 尝试对两个着色器中的变量使用完全相同的声明(不要在两个着色器中使用不同的精度限定符)。 【参考方案1】:

我找到了这个问题的答案,但我无法访问 bobjamin 的旧帐户,所以我正在使用这个新帐户。 解决方案相当简单。 首先我应该提到,drhass 的建议确实有帮助,因为它允许我从顶点着色器设置静态颜色并且它会显示,但是问题是名称 Color 必须是保留关键字并且它会导致问题。

答案是将属性 Color 更改为 SourceColor,一切正常!

【讨论】:

GLSL 中唯一的保留名称是以gl_ 为前缀的任何名称,以及第 16 页的khronos.org/registry/gles/specs/2.0/… 中列出的一组关键字和内置插件。您的软件中存在错误,或者您的平台违反了规范。

以上是关于着色器不工作的主要内容,如果未能解决你的问题,请参考以下文章

GLEW 和我的着色器不同意——我有没有那个扩展?

Phong 着色器不起作用

OpenGL着色器不绘制[关闭]

自定义着色器不接收光线

Opengl为啥这个着色器不起作用?

简单的 OpenTK 着色器不起作用