我试图实现一些非常简单的灯光,并且我已经做了一些我无法弄清楚如何修复的事情。
我使用这个顶点着色器计算每个顶点的颜色:
#version 330 core
layout(location = 0) in vec4 vertexpos;
layout(location = 1) in vec4 lightpos;
uniform vec3 lightcolor;
uniform vec4 received_color;
uniform mat4 translation;
uniform mat4 projection;
out vec4 vertex_color;
vec4 normal = vec4(0.0, 0.0, -1.0, 1.0);
void attenuation(out float atten, in float distance, in float range, in float a, in float b, in float c)
{
atten = 1.0 / ( a * distance * distance + b * distance + c) * range;
}
void main()
{
/* position stuff */
float atten = 0.0;
attenuation(atten, distance(lightpos, vertexpos), 20, 1.0, 0.1, 1.0);
vec4 vlight = normalize(lightpos - vertexpos);
float ndotl = max(0.0, dot(normal.xyz, vlight.xyz));
vertex_color = vec4(atten * ndotl * lightcolor * received_color.xyz, 1.0);
gl_Position = vertexpos;
}
在片段着色器中,我只需将颜色设置为等于vertex_color
现在,据我所知,这应该为每个顶点独立计算颜色,颜色应该很好地融合在一起。但是,这是出现的: 我能够分辨出基于距离的变化强度,但我感到困惑的是,颜色只出现在每个正方形的左上角。
我需要正确计算颜色并用于每个顶点;不只是每平方一个。
如果有人有兴趣,这是我用于渲染的代码: http://pastebin.com/g6xiwFwq