Я следую руководству, доступному на странице https://pythonprogramming.net/opengl-pyopengl-python-pygame-tutorial/, где он учит, как рендерить куб с помощью pyOpenGL в pygame.
При рендеринге куба учебник устанавливает цвет для всех вершин куба, а затем отображает его. Однако в моем проекте я загружаю объект из файла .obj, используя код, представленный в https://www.pygame.org/wiki/OBJFileLoader, и большинство моих объектов полностью белые.
Вывод: когда я визуализирую изображение на экране, я вижу только полностью белый цвет, что очень некрасиво. Поэтому мне пришлось использовать свет, чтобы лучше рассмотреть объект, но я не могу заставить это работать.
Я очень мало знаю 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)
Я хочу куб с его цветами и освещенный светом. Что не так с моим кодом и как это исправить?