【发布时间】:2016-02-27 12:21:26
【问题描述】:
我一直在寻找这个问题。我发现了这个问题Passing data into different shaders,但这个问题不是我的。我得到“片段着色器使用不同的“正常”,但以前的着色器没有写入它。”错误信息。
我的顶点着色器代码:
#version 430
in layout(location=0) vec3 position;
in layout(location=1) vec3 normal;
out vec3 norm;
uniform mat4 transformation;
void main()
{
gl_Position = transformation * vec4(position, 1.0);
norm = (transformation * vec4(normal, 0.0)).xyz;
}
还有我的片段着色器代码:
#version 430
in vec3 normal;
out vec4 colour;
vec3 lightPos = vec3(0,50,0);
vec3 lightColor = vec3(0.5, 0, 0);
vec3 materialColor = vec3(0, 1.0, 0);
void main() {
float cosTheta = dot(-lightPos, normalize(normal));
vec3 temp = materialColor * lightColor * cosTheta;
colour = vec4(temp, 1.0);
}
主要问题是什么?我不明白这个消息我的顶点着色器使用法线向量并将它传递到片段着色器。我没有看到链接代码和我的代码之间的区别。请告诉我一些想法:\
【问题讨论】:
-
好吧,我想这是我的大错。 Vertey 着色器输出和片段着色器输入必须具有相同的名称。
-
他们必须同名,这样解决问题了吗?
标签: c++ opengl shader fragment-shader vertex-shader