Обратите внимание, что рисование с помощью glBegin
/ glEnd
последовательностей и стека матрицы конвейеров с фиксированными функциями устарело с десятилетий.Прочитайте о конвейере с фиксированными функциями и посмотрите Спецификация вершин и Шейдер для современного способа рендеринга.
В любом случае,OpenGL имеет различные режимы работы с матрицами: GL_MODELVIEW
, GL_PROJECTION
и GL_TEXTURE
- см. glMatrixMode
.
В режиме матрицы Ech предусмотрена текущая матрица и стек матрицы.glPushMatrix
/ glPopMatrix
поместите текущую матрицу в стек и вставьте верхнюю матрицу мачты из стека и сохраните ее в текущей матрице
Если вы хотите создать отдельную матрицупреобразование в объект, тогда вы должны:
- Вставить текущую матрицу в стек на
glPushMatrix
- Выполнить преобразования, такие как
glTranslate
,glRotate
, glScale
или даже glLoadMatrix
, который загружает совершенно новую матрицу.Для полноты картины существуют также glLoadIdentity
и glMultMatrix
. - Нарисуйте объект.
- Вставьте самую верхнюю матрицу
glPopMatrix
, чтобы восстановить текущую матрицу и матричный стек.Теперь кажется, что текущая матрица и матричный стек таковы, как никогда не происходили бы вышеуказанные преобразования.
Например,
glPushMatrix()
glTranslated(250, 100, 0)
glRotated(5, 0, 0, 1)
makeQuad()
glPopMatrix()
Если вы хотите анимировать четырехугольники отдельно,затем я рекомендую использовать 2 управляющие переменные a1
и a2
, которые управляют углом поворота и постепенно увеличиваются в основном цикле:
a1, a2 = 0, 0
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)
glPushMatrix()
glTranslated(250, 100, 0)
glRotated(a1, 0, 0, 1)
makeQuad()
glPopMatrix()
glPushMatrix()
glTranslated(100, 250, 0)
glRotated(a2, 0, 0, 1)
makeQuad()
glPopMatrix()
a1 += 1
a2 += 2
pygame.display.flip()
Предварительный просмотр: