私はhttps://pythonprogramming.net/opengl-pyopengl-python-pygame-tutorial/で利用可能なチュートリアルに従っており、pyOpenGL と pygame でキューブをレンダリングする方法を教えています。
立方体をレンダリングするとき、チュートリアルは立方体のすべての頂点に色を設定してから表示します。ただし、私のプロジェクトでは、https://www.pygame.org/wiki/OBJFileLoaderで提供されているコードを使用して .obj ファイルからオブジェクトを読み込みます 。オブジェクトのほとんどは完全に白です。
結論: 画面にレンダリングすると、完全な白しか表示されず、非常に醜いです。そのため、オブジェクトをよりよく見るためにライトを使用することにしましたが、これを機能させることはできません。
私はpyOpenGlについてほとんど知らないので、より深いチュートリアルを見つけることができません。
コードの一部と、チュートリアルで提供されている結果を次に示します。(頂点、辺、面、色変数はタプルのタプルです)
def Cube():
glBegin(GL_QUADS)
for surface in surfaces:
x = 0
for vertex in surface:
x+=1
glColor3fv(colors[x])
glVertex3fv(verticies[vertex])
glEnd()
glBegin(GL_LINES)
for edge in edges:
for vertex in edge:
glVertex3fv(verticies[vertex])
glEnd()
def main():
pygame.init()
display = (800,600)
pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
gluPerspective(45, (display[0]/display[1]), 0.1, 50.0)
glTranslatef(0.0,0.0, -5)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
glRotatef(1, 3, 1, 1)
Cube()
pygame.display.flip()
pygame.time.wait(10)
main()
メイン関数を編集して単純なライトを挿入しようとしましたが、立方体の色が消えました:
def main():
pygame.init()
display = (800,600)
pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
gluPerspective(45, (display[0]/display[1]), 0.1, 50.0)
glTranslatef(0.0,0.0, -5)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
glRotatef(1, 3, 1, 1)
glEnable(GL_LIGHTING)
glEnable(GL_LIGHT0)
glPushMatrix()
glTranslatef(0.0,0.0, 5)
glLight(GL_LIGHT0, GL_POSITION, (0, 1, 0, 1))
glLightfv(GL_LIGHT0, GL_AMBIENT, (0, 1.5, 1, 0))
glPopMatrix()
Cube()
glDisable(GL_LIGHT0)
glDisable(GL_LIGHTING)
pygame.display.flip()
pygame.time.wait(10)
私が欲しいのは、その色と光で照らされた立方体です。コードの何が問題で、どのように修正すればよいですか?