如何在OpenGL中绘制一个立方体?

6

我需要帮助。我找到了几种在OpenGl中绘制立方体的解决方案,但我有一个问题。

我的代码如下:

    wglMakeCurrent(pDC->m_hDC, m_hrc);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glTranslatef(1.5f, 0.0f, -7.0f);  // Move right and into the screen

glBegin(GL_QUADS);                // Begin drawing the color cube with 6 quads
                                  // Top face (y = 1.0f)
                                  // Define vertices in counter-clockwise (CCW) order with normal pointing out
glColor3f(0.0f, 1.0f, 0.0f);     // Green
glVertex3f(1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(1.0f, 1.0f, 1.0f);

// Bottom face (y = -1.0f)
glColor3f(1.0f, 0.5f, 0.0f);     // Orange
glVertex3f(1.0f, -1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(1.0f, -1.0f, -1.0f);

// Front face  (z = 1.0f)
glColor3f(1.0f, 0.0f, 0.0f);     // Red
glVertex3f(1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f(1.0f, -1.0f, 1.0f);

// Back face (z = -1.0f)
glColor3f(1.0f, 1.0f, 0.0f);     // Yellow
glVertex3f(1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f(1.0f, 1.0f, -1.0f);

// Left face (x = -1.0f)
glColor3f(0.0f, 0.0f, 1.0f);     // Blue
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);

// Right face (x = 1.0f)
glColor3f(1.0f, 0.0f, 1.0f);     // Magenta
glVertex3f(1.0f, 1.0f, -1.0f);
glVertex3f(1.0f, 1.0f, 1.0f);
glVertex3f(1.0f, -1.0f, 1.0f);
glVertex3f(1.0f, -1.0f, -1.0f);
glEnd();  // End of drawing color-cube

glFlush();                  

SwapBuffers(pDC->m_hDC);
wglMakeCurrent(NULL, NULL);

以下是我想要获取的图像和我获得的图像。 期望的图像和我获得的图像 如何解决这个问题?

我想我必须这样做,但我不确定该怎么做。 - VeDe88
你启用了深度测试吗? - BDL
我找到了一个解决方案。就是在我的代码前面加上 glEnable(GL_DEPTH_TEST); 谢谢。 - VeDe88
此外,在 Windows 10 下,您指定的颜色看起来太暗了。我通过使用 10.0f 而不是 1.0f 来使立方体清晰可见,即红色如下 glColor3f(10.0f, 0.0f, 0.0f) - ManuelJE
我还发现我漏掉了glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);(除了清除颜色缓冲区外,还要清除深度缓冲区),这导致在旋转立方体时出现了一些奇怪的伪影。 - undefined
1个回答

8

您需要启用深度测试。否则,即使一个三角形在另一个三角形后面,它们也会按照代码中给出的顺序绘制,从而导致过度绘制。要启用深度测试,请调用

glEnable(GL_DEPTH_TEST);

在发出第一个绘制调用之前。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接