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

时间:2016-02-27 12:21:27

标签: c++ opengl shader fragment-shader vertex-shader

我一直在寻找很多这个问题。我发现了这个问题Passing data into different shaders,但这个问题不是我的问题。我得到了#34;片段着色器使用了变化的" normal",但之前的着色器不会写入它。"错误信息。

我的vertey着色器代码:

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

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

1 个答案:

答案 0 :(得分:0)

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

例如,在您的情况下:

.vert:

out layout(location = 7) vec3 norm;

.frag:

in layout(location = 7)vec3 normal; 
相关问题