Итак, у меня есть проблема, за которой я гоняюсь уже пару дней, и я не могу найти ничего, чтобы помочь.Я только начал пытаться изучать pyOpenGL и быстро столкнулся с этой проблемой.Я надеюсь, что я включил достаточно информации, спасибо за любую помощь.
Проблема:
Когда я рисую куб, кажется, что некоторые из граней сзади отрисовываются поверх граней.спереди.Это не имеет смысла для меня, так как задние лица должны быть дальше и будут появляться позади передних лиц.У меня есть короткое видео проблемы ниже.Я должен упомянуть, что эта проблема возникла в учебнике, за которым я следовал, но не был упомянут или исправлен.Как я уже сказал, я новичок в этом, и любая помощь будет признательна.
Проблемное видео: https://media.giphy.com/media/OT6SrDbj5NopQpD8Pt/giphy.gif (куб вращается слева направо)
Настройка:
Я запускаю это на Ubuntu Linux, используя python 2.7.15 и pyOpenGL 3.1.0 и pygame 1.9.4
Исходный код:
import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *
colors=(
(255, 0, 0), #Red
(0, 255, 0), #Green
(0, 0, 255), #Blue
)
verts = (
(1.0, -1.0, -1.0),
(1.0, -1.0, 1.0),
(-1.0, -1.0, 1.0),
(-1.0, -1.0, -1.0),
(1.0, 1.0, -1.0),
(1.0, 1.0, 1.0),
(-1.0, 1.0, 1.0),
(-1.0, 1.0, -1.0)
)
surfaces = (
(0, 1, 2, 3),
(4, 7, 6, 5),
(0, 4, 5, 1),
(1, 5, 6, 2),
(2, 6, 7, 3),
(4, 0, 3, 7)
)
def cube_obj(faces, vertices):
glBegin(GL_QUADS)
x = 0
for face in faces:
glColor3fv(colors[x])
x += 1
if x > 2:
x = 0
for vertex in face:
glVertex3fv(vertices[vertex])
glEnd()
def main():
pygame.init()
display = (800, 600)
pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
gluPerspective(75, (display[0]/display[1]), 0.1, 50.0)
glTranslatef(-0.0, 0.0, -10.0)
glClearColor(1, 1, 1, 1)
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)
cube_obj(surfaces, verts)
glRotatef(.5, 0, 1, 0)
pygame.display.flip()
pygame.time.wait(10)
main()