GLSL having strange black faces with the second mesh

Viewed 51

platform: Windows10 context: OpenGL, glew, Win32

So I loaded 2 meshes(using a simple OBJ parser, which only reads the triangulated mesh), with vertexpos,uv and normal data. The first mesh is lighted okay. No black faces.The second one looks like this. The Strange Effects

  • my vertex shader:
    #version 440
    
    in vec3 pos;
    in vec2 tex;
    in vec3 nor;
    
    uniform float Scale;
    uniform mat4 perspective;
    uniform mat4 model;
    
    
    out vec3 normaldir;
    out vec2 texOut;
    out vec3 FragPos;
    
    void main()
    {
        normaldir = normalize(mat3(transpose(inverse(model))) * nor);
        gl_Position = perspective * model * vec4(pos.xyz, 1.0);
        texOut = tex;
        FragPos = vec3(model * vec4(pos, 1.0));
    }
  • my fragment shader:
    #version 440
    uniform float Scale;
    uniform sampler2D diffuse;
    uniform sampler2D normal;
    uniform vec3 viewPos;
    //uniform sampler2D normalMap0;
    
    
    in vec3 normaldir;
    in vec2 texOut;
    in vec3 FragPos;
    
    layout(location = 0) out vec4 FragColor0;
    
    
    void main() 
    {
    
    
        vec3 lightPos = {2,6,0};
        lightPos.x = sin(Scale)*5;
        lightPos.z = cos(Scale)*5;
        vec3 lightDir = normalize(lightPos - FragPos); 
    
        vec3 lightColor = {1.0,1.0,1.0};
        float specularStrength = 1.6;
    
        float diff = max(dot(normaldir, lightDir), 0.0);
        vec3 diffuseD = diff * lightColor;
    
    
        vec3 viewDir = normalize(viewPos - FragPos);
        vec3 reflectDir = reflect(-lightDir, normaldir); 
    
        vec3 ambient = {0.0,0.2,0.4};
        
        float spec = pow(max(dot(viewDir, reflectDir), 0.0), 25);
        vec3 specular = specularStrength * spec * lightColor; 
    
        vec3 diffuseCol = texture(diffuse, texOut).xyz;
        vec3 result = (ambient + diffuseD+ specular) * diffuseCol;
    
        FragColor0 = vec4(result, 1.0);
    }
1 Answers

Sorry I made a very dumb mistake. Thank you for all your support @Rabbid76 (Yes I did inverted the normals yes) @paddy

The problem was Binding the normal buffers. I bind glm::vec2 * size instead of glm::vec3 * size for normals' buffers

Related