Opengl奇怪的观看

时间:2012-11-18 07:40:29

标签: opengl

从下图中可以看出,我有两个并排的三角形(从正面看)。但是当我从右边看时,黄色三角形显示它好像在绿色三角形的前面,它不应该是可见的,因为它在绿色三角形后面(见右视图),为什么会发生这种情况?从左边查看它很好(见左视图)。感谢。

FrontView中:

Front View

右视图(为什么黄色三角形仍然可见?):

enter image description here

左视图(从这里观看很好):

enter image description here

这是我的渲染方法。即使我不使用glColor4f并以现代方式进行着色,我仍然有相同的结果。我还设置了glEnable(GL_DEPTH);和     glDepthFunc(GL_LESS);

void display(){
glClear(GL_COLOR_BUFFER_BIT);

control(0.2, 0.2, mi);
view = updateCam();

glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableClientState(GL_VERTEX_ARRAY);

model = glm::rotate(glm::mat4(1.0), 45, glm::vec3(0, 1, 0));
glColor4f(0, 1, 0, 1);
glDrawArrays(GL_TRIANGLES, 0, 3);
resetMatrix();

model = glm::translate(glm::mat4(1.0), glm::vec3(5, 0, 0));
model = glm::rotate(model, 45, glm::vec3(0, 1, 0));
glColor4f(1, 1, 0, 1);
glDrawArrays(GL_TRIANGLES, 0, 3);

glDisableVertexAttribArray(0);
resetMatrix();
SDL_GL_SwapBuffers();

}

1 个答案:

答案 0 :(得分:1)

您只是清除颜色缓冲区。深度缓冲区仍然包含先前帧的深度值,因此您的Z测试不能按预期工作。

清除它们:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);