OpenGL深度缓冲区不起作用

时间:2013-01-31 04:02:47

标签: opengl buffer depth

我试图用openGL做一个简单的绘图。但是,深度缓冲区似乎不起作用。

其他有类似问题的人通常会做两件事之一:

  1. 不包括glEnable(GL_DEPTH_TEST)

  2. 剪裁值不佳

  3. 但是,我的代码没有这些问题。

    ...
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    gluPerspective(25.0,1.0,10.0,200.0);
    
    // Set the camera location
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(20.0, 10.0, 50.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
    
    // Enable depth test
    glEnable(GL_DEPTH_TEST);
    
    // Cull backfacing polygons
    glCullFace(GL_BACK);
    glEnable(GL_CULL_FACE)
    
    drawCoordinateAxis();
    
    drawBox(5.0,2.0,5.0,0.8,0.0,0.0);
    
    glTranslated(1.0,-1.0,1.0); //The box is 5x2x5, it is shifted 1 unit down and 1 in the x and z directions
    drawBox(5.0,2.0,5.0,0.0,1.0,1.0);
    ...
    

    当我执行我的代码时,会绘制它。 http://imgur.com/G9y41O1

    请注意,蓝色框和红色框会发生碰撞,因此红色框应该覆盖蓝色框的一部分。

    函数drawCoordinateAxis()和drawBox()只是绘制了一些原语,里面没什么花哨的。

    我正在Debian上运行它。

1 个答案:

答案 0 :(得分:1)

void reshape(GLint width, GLint height)
{
   g_Width = width;
   g_Height = height;
   glViewport(0, 0, g_Width, g_Height);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   gluPerspective(65.0, (float)g_Width / g_Height, g_nearPlane, g_farPlane);
   glMatrixMode(GL_MODELVIEW);
}

首先将Matrix Mode设置为GL_PROJECTION,然后设置gluPerspective ....然后再返回MODELVIEW模式。