2016-07-01 5 views
2

Ich verwende OpenGL mit GLFW und GLEW. Ich rende alles mit Shadern, aber es scheint, als ob der Tiefenpuffer nicht funktioniert. Die Shadern Ich bin für 3D-Rendering sind:Depth Buffer scheint nicht zu funktionieren - OpenGL Shader

Vertex Shader

#version 410\n 
layout(location = 0) in vec3 vertex_position; 
layout(location = 1) in vec2 vt 
uniform mat4 view, proj, model; 
out vec2 texture_coordinates; 
void main() { 
    texture_coordinates = vt; 
    gl_Position = proj * view * model* vec4(vertex_position, 1.0); 
}; 

Fragment Shader

#version 410\n 
in vec2 texture_coordinates; 
uniform sampler2D basic_texture; 
out vec4 frag_colour; 
void main() { 
    vec4 texel = texture(basic_texture, vec2(texture_coordinates.x, 1 - texture_coordinates.y)); 
    frag_colour = texel; 
}; 

und ich bin damit auch die Tiefenpuffer und Keulung Gesicht

glEnable(GL_DEPTH_BUFFER); 
glDepthFunc(GL_NEVER); 

glEnable(GL_CULL_FACE); 
glCullFace(GL_BACK); 
glFrontFace(GL_CCW); 

So sieht es aus:

Antwort

2

Sie ermöglicht nicht eingehend getestet. Ändern Sie glEnable(GL_DEPTH_BUFFER); in glEnable(GL_DEPTH_TEST); Dieser Fehler konnte mit glGetError() erkannt werden.

+0

wow ... Jetzt fühle ich mich dumm. Vielen Dank! –

+0

@LuizAugustoWendt: Sie haben auch 'glDepthFunc (GL_NEVER)' verwendet, was bedeutet, dass der Tiefentest * niemals bestanden wird. Also sollten alle Fragmente ausgesondert werden. Der einzige Grund, warum etwas auf dem Bildschirm angezeigt wurde, ist, dass Sie das falsche aktiviert haben. –

+0

Ja, ich benutzte nie nur um zu testen, ob der Tiefentest funktionierte: ~ –

1

Wie SurvivalMachine sagte, ändern Sie GL_DEPTH_BUFFER zu GL_DEPTH_TEST. Und stellen Sie sicher, dass Sie in Ihrer Hauptschleife glClear(GL_DEPTH_BUFFER_BIT) vor allen Zeichenbefehlen aufrufen.