Я использую python для создания кубического приложения Рубика с OpenGL и pyGame. Я вижу куб и хочу нажать кнопку и загрузить цвета, но цвета не отображаются. (Я окрашиваю каждый маленький кубик в одиночку, но не думаю, что это имеет значение).
Если я вызываю функцию, которая окрашивает куб в функции, которая рисует вершины для куба (в начале программы), цвета прекрасно отображаются, но если я вызываю функцию цвета с нажатием клавиши (используя pyGame), когда приложение уже запущено, но не работает.
функция, которая окрашивает маленький кубик:
def color_cubie(self):
surfaces = (
(0, 1, 2, 3),
(4, 5, 6, 7),
(0, 3, 7, 4),
(1, 2, 6, 5),
(2, 3, 7, 6),
(0, 1, 5, 4)
)
colors = [
(1, 0, 0), (1, 0.5, 0),
(0, 1, 0), (0, 0, 1),
(1, 1, 1), (1, 1, 0)
]
#faces
glBegin(GL_QUADS)
index=0
for surface in surfaces:
glColor3fv(colors[index])
for vertex in surface:
glVertex3fv(self.verticies[vertex])
index+=1
glEnd()
часть, которую я вызываю функцией (оператор if равен true, когда я нажимаю клавишу c на клавиатуре). Также куб является массивом 3x3x3, который заполнен объектами cubie.
if move == "c":
for row in self.cube[2]:
for cubie in row:
cubie.color_cubie()
функция main / render:
def render():
pygame.init()
display = (WIDTH, HEIGHT)
screen = pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
pygame.display.set_caption("Rubiks Cube")
glEnable(GL_DEPTH_TEST)
glClearColor(1, 1, 1, 1)
gluPerspective(45, (display[0]/display[1]), 0.1, 50.0)
glTranslatef(0.0, 0.0, -7)
glLineWidth(10)
while True:
mouse_pos = pygame.mouse.get_rel()
glRotatef(1, mouse_pos[1], mouse_pos[0], 0)
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
#create cube object
new_cube = Cube()
new_cube.show_cube()
pygame.display.flip()
pygame.time.wait(10)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == K_c:
new_cube.rotate_cube("c")
Когда я читаю, я должен перерисовать экран, чтобы увидеть цветной куб. Но glClear (...) не делает этого?