我怎么能单独旋转多个四边形? (pygame的,PyOpengl)(How can I rota

2019-09-28 03:31发布

我想大致在他们自身的轴线旋转,我的四边形。 我首先想到的是使用glPushMatrix()和glPophMatrix(),但不工作。 不管,我相信这是好办法。

码:

import time, pygame
from pygame.locals import *

from OpenGL.GL import *
from OpenGL.GLU import *

def makeQuad():
    glBegin(GL_QUADS)
    glVertex2f(0, 0)
    glVertex2f(0, 50)
    glVertex2f(50, 50)
    glVertex2f(50, 0)
    glEnd()

def main():
    pygame.init()
    display = (800,800)
    pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
    gluOrtho2D(0, 800, 0, 800)

    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(150, 0, 0)

        makeQuad()

        glTranslated(100, 250, 0)

        makeQuad()

        glPopMatrix()

        pygame.display.flip()

main()

Answer 1:

注意,通过该图形glBegin / glEnd序列和固定管线矩阵堆栈中,因为几十年来弃用。 阅读关于固定功能管线 ,看到顶点规格和着色器的渲染艺术方式的状态。


不管怎么说,OpenGL的有不同的矩阵模式,分别是GL_MODELVIEWGL_PROJECTIONGL_TEXTURE -见glMatrixMode
ECH矩阵模式提供当前矩阵和矩阵堆栈。 glPushMatrix / glPopMatrix当前矩阵推到堆栈并弹出顶部桅杆矩阵形成堆叠,并将其存储到当前矩阵

如果你想要做一个单独的矩阵变换到一个对象,那么你必须:

  • 当前矩阵推到堆栈通过glPushMatrix
  • 做这样的转换glTranslateglRotateglScale甚至glLoadMatrix它加载一个完全新的矩阵。 为了完整的SAK,有ALS存在glLoadIdentityglMultMatrix
  • 拉拢的对象。
  • 弹出最顶端的矩阵glPopMatrix ,恢复当前矩阵,矩阵堆栈。 现在,当前矩阵,矩阵堆栈似乎是如此,因为上面的转化永远不会发生。

glPushMatrix()
glTranslated(250, 100, 0)
glRotated(5, 0, 0, 1)
makeQuad()
glPopMatrix()

如果要单独动画四边形,那么我建议使用2个控制变量a1a2 ,其控制旋转角度,并在主循环递增正在进行:

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()

预习:



文章来源: How can I rotate multiple quads separately? (Pygame, PyOpengl)