Opengl back object 可以从 front object 看到

Opengl back object can be seen from front object

我正在创建一个机场场景。

我想把塔画在机库后面,机库里的飞机也能看到。 如果我移动我的视线,飞机也会显示在塔楼或机库后面...... 此外,当我从下方向上看时,表面物体也可见..

这是我的代码...

void draw()
{
    glPushMatrix();
    glTranslatef(-8.0, 0, 7);
    drawControlTower(); //grey tower
    glPopMatrix();
    glPushMatrix();
    glTranslatef(5, 1, 0);
    drawHangars(); // Compund to store planes
    glPopMatrix();
}

static void display()
{
    if (hiddenDepth) {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    }
    else 
    {
        glClear(GL_COLOR_BUFFER_BIT);
    }

    draw();
    
    /* Check everything OK and update screen */
    CheckGL();
    glutSwapBuffers();
}

static void initGraphics (void)
{
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_ALWAYS);
    /* Black background */
    glClearColor(0, 0, 0, 0);

}

此行关闭深度测试。删除它:

glDepthFunc(GL_ALWAYS);

并且您应该始终清除深度缓冲区,方法是:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

问题是由 Z-fighting 引起的。地面的几何形状与跑道的几何形状具有相同的深度。

设置深度偏移 glPolygonOffset 并在绘制跑道之前启用深度偏移:

glEnable(GL_POLYGON_OFFSET_FILL); 
glPolygonOffset(-1.0f, -1.0f);

绘制跑道后禁用偏移:

glDisable(GL_POLYGON_OFFSET_FILL);