我正在关注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)
我想要的是带有颜色并被灯光照亮的立方体。我的代码有什么问题以及如何解决?