顶点颜色在片段着色器中无法正常工作

时间:2014-10-19 18:23:49

标签: c++ opengl glsl shader vertex

我试图实现一些非常简单的灯光,并且我已经做了一些我无法弄清楚如何修复的事情。

我使用这个顶点着色器计算每个顶点的颜色:

#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

现在,据我所知,这应该为每个顶点独立计算颜色,颜色应该很好地融合在一起。但是,这是出现的: enter image description here 我能够分辨出基于距离的变化强度,但我感到困惑的是,颜色只出现在每个正方形的左上角。

我需要正确计算颜色并用于每个顶点;不只是每平方一个。

如果有人有兴趣,这是我用于渲染的代码: http://pastebin.com/g6xiwFwq

0 个答案:

没有答案