在OpenGL中渲染多维数据集

时间:2012-05-19 12:58:50

标签: python opengl pyqt

我正在尝试编制旋转立方体。因此,我使用make_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)

1 个答案:

答案 0 :(得分:2)

这是由剔除造成的。你的正面和背面仅在z分量上有所不同,这意味着一个是顺时针方向的另一个反击,而对于其他相反的方面也是如此。

#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