2015-12-06 112 views
0

我需要帮助。我发现了几个在OpenGl中绘制立方体的解决方案,但是我遇到了问题。如何在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); 

贝娄是我想要得到的形象和我得到的图像。 expected image and the image I get

如何解决这个问题呢? 在此先感谢。

+0

顺时针绘制您的QUADS。 – Rabbid76

+0

我想我必须这样做,但我不知道如何做到这一点 – VeDe88

+0

您是否启用了深度测试? – BDL

回答

1

您必须启用深度测试。否则三角形按代码给出的顺序绘制,即使三角形位于另一个三角形的后面,也会导致透支。要启用深度测试拨打电话

glEnable(GL_DEPTH_TEST); 

发出第一次拨打电话之前。