openGL 3D 矩形在 C++ 中没有正确重叠

openGL 3D Rectangle not overlapping properly in C++

给你 3 个矩形条,其顶点坐标如下。

在屏幕上绘制这些条带。将背景设为黑色。

所需输出: Output Image

这是我的 C++ 程序:

#include <iostream>
#include <fstream>
#include <GL/freeglut.h>
#include <GL/gl.h>
#include<bits/stdc++.h>

using namespace std;

void renderFunction(){

    glClearColor(0.0, 0.0, 0.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);

    // Red Polygon
    glColor3f(1.0, 0.0, 0.0);
    glBegin(GL_POLYGON);
        glVertex3f(-0.5,0.6,-0.8);
        glVertex3f(-0.2,0.9,-0.8);
        glVertex3f(0.8,-0.1, 0.8);
        glVertex3f(0.5, -0.4, 0.8);
    glEnd();

    // Green Polygon
    glColor3f(0.0, 1.0, 0.0);
    glBegin(GL_POLYGON);
        glVertex3f(0.0, 0.8, 0.8);
        glVertex3f(0.3, 0.5, 0.8);
        glVertex3f(-0.7, -0.5, -0.8);
        glVertex3f(-1.0, -0.2, -0.8);
    glEnd();

    // Blue Polygon
    glColor3f(0.0, 0.0, 1.0);
    glBegin(GL_POLYGON);
        glVertex3f(0.6, 0.0, -0.8);
        glVertex3f(0.6, -0.3, -0.8);
        glVertex3f(-0.9, -0.3, 0.8);
        glVertex3f(-0.9, 0.0, 0.8);
    glEnd();

    glFlush();
}

int main(int argc, char** argv){

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE);
    glutInitWindowSize(1366, 768);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("Q6 - 3D Polygon");

    glutDisplayFunc(renderFunction);
    glutMainLoop();

    return 0;
}

我的输出: output based on above code

现在的问题是蓝色矩形部分的右端位于红色矩形的顶部,这不是所需的输出。所需的输出是蓝色的右端在红色矩形下方。我不知道出了什么问题。我尝试清除 GL_DEPTH_BUFFER_BIT。但它会产生相同的输出。请帮我解决这个问题。

这不起作用的原因是因为

  1. 您将显示模式初始化为 GLUT_SINGLE(不包括 GLUT_DEPTH)。
  2. 您没有启用glEnable(GL_DEPTH_TEST)

这两个是启用深度测试所必需的,因此,您必须将glEnable(GL_DEPTH_TEST);放在glClear之后,并将glutInitDisplayMode(GLUT_SINGLE)更改为glutInitDisplayMode(GLUT_SINGLE|GLUT_DEPTH)