在PyOpenGL中切换Y轴和Z轴

brc7rcf0  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(109)

我想在PyOpenGL中切换Y轴和Z轴方向。我试过使用矩阵变换,但我不能做到这一点。
代码:

glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(self.zoom, -self.zoom, -self.zoom, self.zoom, -5000, 5000)
glMatrixMode(GL_MODELVIEW)
glClearColor(1, 1, 1, 0)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glLoadMatrixf(self.m)

其中:

self.zoom = 150
self.m = [[1, 0, 0, 0],
          [0, 0, 1, 0],
          [0, 1, 0, 0],
          [0, 0, 0, 1]]

错误结果:

使用单位矩阵:

预期值:

编辑:这是工作:

glMatrixMode(GL_PROJECTION)
        glLoadIdentity()
        glOrtho(self.zoom, -self.zoom, -self.zoom, self.zoom, -5000, 5000)
        up = 1
        if self.theta == 360:
            up = -1
        gluLookAt(self.x, self.y, self.z, 0, 0, 0, 0, up, 0)
        glMatrixMode(GL_MODELVIEW)
        glClearColor(1, 1, 1, 0)
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
        glLoadMatrixf(self.m)
mfpqipee

mfpqipee1#

一个二维向量可以旋转90°,通过交换分量并反转其中一个分量:

  • 向左旋转(x,y)是(-y,x)
  • Rotate(x,y)right is(y,-x)

你实际上要做的是把右手矩阵变成左手矩阵。它是旋转90°和镜像的串联。
改变矩阵:
要么

self.m = [[1, 0,  0, 0],
          [0, 0, -1, 0],
          [0, 1,  0, 0],
          [0, 0,  0, 1]]

self.m = [[1,  0, 0, 0],
          [0,  0, 1, 0],
          [0, -1, 0, 0],
          [0,  0, 0, 1]]

注意,这可以通过围绕x轴旋转来实现。例如:

glLoadIdentity()
glRotatef(90, 1, 0, 0)

如果你有一个视图矩阵和一个模型矩阵,那么你必须将模型矩阵乘以视图矩阵glMultMatrix

glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
gluLookAt(self.x, self.y, self.z, 0, 0, 0, 0, up, 0)
glMultMatrixf(self.m)

相关问题