0

回転する立方体をプログラムしようとしています。したがって、自分の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)
4

1 に答える 1

2

カリングが原因です。表側と裏側はzコンポーネントのみが異なります。つまり、1つは時計回りに別のカウンター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 に答える