openGL 3D 矩形在 C++ 中没有正确重叠
openGL 3D Rectangle not overlapping properly in C++
给你 3 个矩形条,其顶点坐标如下。
- 矩形 A(红色)(-0.5,0.6,-0.8), (-0.2,0.9,-0.8), (0.8,-0.1, 0.8), (0.5, -0.4, 0.8)
- 矩形 B(绿色)(0.0, 0.8, 0.8), (0.3, 0.5, 0.8), (-0.7, -0.5, -0.8), (-1.0, -0.2, -0.8)
- 矩形 C(蓝色)(0.6, 0, -0.8), (0.6, -0.3, -0.8), (-0.9, -0.3, 0.8), (-0.9, 0, 0.8)
在屏幕上绘制这些条带。将背景设为黑色。
所需输出:
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。但它会产生相同的输出。请帮我解决这个问题。
这不起作用的原因是因为
- 您将显示模式初始化为
GLUT_SINGLE
(不包括 GLUT_DEPTH
)。
- 您没有启用
glEnable(GL_DEPTH_TEST)
。
这两个是启用深度测试所必需的,因此,您必须将glEnable(GL_DEPTH_TEST);
放在glClear
之后,并将glutInitDisplayMode(GLUT_SINGLE)
更改为glutInitDisplayMode(GLUT_SINGLE|GLUT_DEPTH)
。
给你 3 个矩形条,其顶点坐标如下。
- 矩形 A(红色)(-0.5,0.6,-0.8), (-0.2,0.9,-0.8), (0.8,-0.1, 0.8), (0.5, -0.4, 0.8)
- 矩形 B(绿色)(0.0, 0.8, 0.8), (0.3, 0.5, 0.8), (-0.7, -0.5, -0.8), (-1.0, -0.2, -0.8)
- 矩形 C(蓝色)(0.6, 0, -0.8), (0.6, -0.3, -0.8), (-0.9, -0.3, 0.8), (-0.9, 0, 0.8)
在屏幕上绘制这些条带。将背景设为黑色。
所需输出: 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。但它会产生相同的输出。请帮我解决这个问题。
这不起作用的原因是因为
- 您将显示模式初始化为
GLUT_SINGLE
(不包括GLUT_DEPTH
)。 - 您没有启用
glEnable(GL_DEPTH_TEST)
。
这两个是启用深度测试所必需的,因此,您必须将glEnable(GL_DEPTH_TEST);
放在glClear
之后,并将glutInitDisplayMode(GLUT_SINGLE)
更改为glutInitDisplayMode(GLUT_SINGLE|GLUT_DEPTH)
。