OpenGL - 点光源着色器输出白色

时间:2016-04-12 08:34:26

标签: opengl glsl shader normals

在我的每顶点点光源实现中,每个片段输出都是白色的,我无法找到问题的根源。

enter image description here

我密切关注着色器代码的this教程,所以我认为问题可能源于我的顶点法线。

场景由平面(每个2个三角形)组成。每个平面的法线基于它的四个角,这是我传递给每个顶点的着色器的法线向量。正常方向如下所示。

enter image description here

然而,经过大量研究,似乎这是计算法线的正确技巧。任何建议将不胜感激!

顶点着色器

#version 330

uniform mat4 projectionMatrix; 
uniform mat4 modelViewMatrix; 

in vec3 in_position;
in vec2 in_texcoords;
in vec3 in_normals;

out vec3 vPosition;
out vec2 vTextureCoord;
out vec3 vNormal;

void main(void)
{
    vPosition = vec3(modelViewMatrix * vec4(in_position, 1.0));
    vTextureCoord = in_texcoords;
    vNormal = vec3(modelViewMatrix * vec4(in_normals, 0.0));

    gl_Position = projectionMatrix * modelViewMatrix * vec4(in_position, 1.0);
}

片段着色器

#version 330

precision mediump float;

in vec3 vPosition;
in vec2 vTextureCoord;
in vec3 vNormal;

out vec4 finalColor;

uniform sampler2D MyTexture0;

void main(void)
{
    vec3 lightPosition = vec3(8.2, 0, 3);

    float distance = length(lightPosition - vPosition);
    vec3 lightVector = normalize(lightPosition - vPosition);
    float diffuse = max(dot(vNormal, lightVector), 0.1);
    diffuse = diffuse * (1.0 / (1.0 + (0.25 * distance * distance)));

    vec4 fragmentColor = texture(MyTexture0, vec2(vTextureCoord.s, vTextureCoord.t));

    finalColor = fragmentColor * diffuse;
}

使用基本着色器显示的场景,无光照计算。

enter image description here

0 个答案:

没有答案