0

I'm trying to program a rotaing cube. Therefore I generate a cube using my make_cube method. Unfortunatly some faces of the cube don't get rendered. I tried a lot I don't understand why the cube is not "extruded" fully. Here is my code for generating the cube:

def make_cube(self):
    glColor3f(0, 1, 0)
    #front
    GL.glVertex3d(0.0, 0.0, 0.0)
    GL.glVertex3d(0.2, 0.0, 0.0)
    GL.glVertex3d(0.2, 0.2, 0.0)
    GL.glVertex3d(0.0, 0.2, 0.0)
    # back
    GL.glVertex3d(0.0, 0.0, -0.2)
    GL.glVertex3d(0.2, 0.0, -0.2)
    GL.glVertex3d(0.2, 0.2, -0.2)
    GL.glVertex3d(0.0, 0.2, -0.2)
    # right
    GL.glVertex3d(0.2, 0.0, 0.0)
    GL.glVertex3d(0.2, 0.0, -0.2)
    GL.glVertex3d(0.2, 0.2, -0.2)
    GL.glVertex3d(0.2, 0.2, 0.0)
    # left
    GL.glVertex3d(0.0, 0.0, 0.0)
    GL.glVertex3d(0.0, 0.0, -0.2)
    GL.glVertex3d(0.0, 0.2, -0.2)
    GL.glVertex3d(0.0, 0.2, 0.0)
    # top
    GL.glVertex3d(0.0, 0.2, 0.0)
    GL.glVertex3d(0.2, 0.2, 0.0)
    GL.glVertex3d(0.2, 0.2, -0.2)
    GL.glVertex3d(0.0, 0.2, -0.2)
    # bottom
    GL.glVertex3d(0.0, 0.0, 0.0)
    GL.glVertex3d(0.2, 0.0, 0.0)
    GL.glVertex3d(0.2, 0.0, -0.2)
    GL.glVertex3d(0.0, 0.0, -0.2)
4

1 回答 1

2

它是由剔除引起的。您的正面和背面仅在 z 分量上有所不同,这意味着一个按顺时针方向呈现另一个逆 cw 并且对于其他所有相对侧都相同。

#front
GL.glVertex3d(0.0, 0.0, 0.0)
GL.glVertex3d(0.2, 0.0, 0.0)
GL.glVertex3d(0.2, 0.2, 0.0)
GL.glVertex3d(0.0, 0.2, 0.0)
# back
GL.glVertex3d(0.0, 0.0, -0.2)
GL.glVertex3d(0.2, 0.0, -0.2)
GL.glVertex3d(0.2, 0.2, -0.2)
GL.glVertex3d(0.0, 0.2, -0.2)

OpenGL 剔除背面以提高性能,但是您必须拥有所有基元 CW 或 CCW。

看看glCullFaceglFrontFace

于 2012-05-19T14:06:26.170 回答