2016-07-01 13 views
2

私はGLFWとGLEWでopenGLを使用しています。シェーダを使ってすべてをレンダリングしていますが、デプスバッファが機能しないようです。私は3Dレンダリングのために使用してい シェーダは以下のとおりです。深度バッファが機能しないようです - OpenGL 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); 
}; 

フラグメントシェーダ

#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; 
}; 

と私はまた、深度バッファとカル顔を有効にしています

glEnable(GL_DEPTH_BUFFER); 
glDepthFunc(GL_NEVER); 

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

これは見た目です:

答えて

2

あなたはデプステストを可能にしていません。 glEnable(GL_DEPTH_BUFFER);glEnable(GL_DEPTH_TEST);に変更してください。このエラーは、glGetError()を使用して検出されている可能性があります。

+0

うわー...今、私は馬鹿だと感じています。ありがとうございました! –

+0

@LuizAugustoWendt:また、 'glDepthFunc(GL_NEVER)'を使用しました。これは、深さテストが決して*通過しないことを意味します*。だから、すべての断片を捨てるべきです。何かが画面に表示された唯一の理由は、間違ったことを有効にしたためです。 –

+0

うん、深度テストがうまくいっているかどうかテストするのは決して使っていなかった:〜 –

1

SurvivalMachineと同様に、GL_DEPTH_BUFFERからGL_DEPTH_TESTに変更しました。また、メインループで描画コマンドの前にglClear(GL_DEPTH_BUFFER_BIT)を呼び出すようにしてください。

関連する問題