繁体   English   中英

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

[英]Light with vertex/fragment shader. Using varying variables. (openGL)

我一直在寻找很多这个问题。 我发现了这个问题:将数据传递到不同的着色器中,但是这个问题不是我的。 我得到“片段着色器使用变化的“正常”,但以前的着色器未写入它。” 错误信息。

我的顶点着色器代码:

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

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

如果出于某种原因要使用其他变量名,则可以指定一个位置以匹配输入和输出变量。

例如,在您的情况下:

.vert:

out layout(location = 7) vec3 norm;

.frag:

in layout(location = 7)vec3 normal; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM