带顶点/片段着色器的光源。使用不同的变量。 (openGL)

问题描述:

我一直在寻找很多这个问题。我发现这个问题Passing data into different shaders但这个问题不是我的。我得到“片段着色器使用不同的”普通“,但之前的着色器不写入它。”错误信息。带顶点/片段着色器的光源。使用不同的变量。 (openGL)

我vertey shader代码:

#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); 
} 

的主要问题是什么?我不明白这个消息我的顶点着色器使用法向量,并传递给片段着色器。我没有看到链接的代码和我的区别。请告诉我一些想法:\

+0

好吧,我觉得这是我的大错。 Vertey着色器输出和片段着色器输入必须具有相同的名称。 –

+0

它们必须有相同的名称,这是否解决了这个问题? – TomTsagk

如果您由于某种原因想要使用不同的变量名称,您可以指定一个位置以匹配输入和输出变量。

例如,你的情况:

.vert:

out layout(location = 7) vec3 norm; 

.frag:

in layout(location = 7)vec3 normal;