基本的每顶点Phong Shader有黑点

时间:2014-02-02 19:53:06

标签: opengl glsl opengl-3 lighting

我刚开始学习OpenGL 3.x,我正在尝试在OpenGL 4.4中实现基本的ADS / Phong着色器。

Stanford Bunny 1 Stanford Bunny 2

不幸的是,我在斯坦福兔子的this低聚版本下面得到了这些奇怪的黑点。在使用其他一些模型之后,我得出结论,罪魁祸首不能是兔子,所以它可能是我的着色器。

顶点着色器

#version 330

layout(location = 0) in vec3 vertexPosition_modelspace;
layout(location = 1) in vec3 vertex_normal;

out vec3 lightIntensity;

uniform mat4 modelViewProjectionMatrix;
uniform mat4 modelMatrix;

// Diffuse
// K REFLECTIVITY, L SOURCE INTENSITY
// a AMBIENT, d DIFFUSE, s SPECULAR
struct Light{
    vec3 position;
    vec3 La;
    vec3 Ld;
    vec3 Ls;
};
uniform Light light;

struct Material{
    float shininess;
    vec3 Ka;
    vec3 Kd;
    vec3 Ks;
};
uniform Material material;

void main(){    
    vec4 vertex = vec4(vertexPosition_modelspace, 1.0f);
    vec4 eyeCoords = modelMatrix * vertex;

    vec3 n = normalize(vertex_normal); // Normal
    vec3 s = normalize(light.position - eyeCoords.xyz); // D tw light
    vec3 v = normalize(eyeCoords.xyz);
    vec3 r = reflect(-s, n);
    float sDotN = max(dot(s, n), 0.0);

    vec3 ambient = light.La * material.Ka;
    vec3 diffuse = light.Ld * material.Kd * sDotN;
    vec3 specular = vec3(0.0f);

    if(sDotN > 0.0f){
        specular = light.Ls * material.Ks * pow(max(dot(r, v), 0.0), material.shininess);
    }

    lightIntensity = ambient + diffuse + specular;

    gl_Position = modelViewProjectionMatrix * vertex;
}

导致此问题的原因以及如何解决?

1 个答案:

答案 0 :(得分:1)

原来我传递了顶点而不是法线 - 我完全打破了我的模型加载器。一切都很顺利,如果传入正确的制服,上面的代码就可以了!