我正在尝试编制旋转立方体。因此,我使用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)
答案 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的所有原语。