在 PyOpenGL 中切换 Y 轴和 Z 轴

Posted

技术标签:

【中文标题】在 PyOpenGL 中切换 Y 轴和 Z 轴【英文标题】:Switch axis Y and Z in PyOpenGL [closed] 【发布时间】:2019-12-16 10:05:42 【问题描述】:

我想方向。我曾尝试使用矩阵变换,但我无法做到。

代码:

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)

【问题讨论】:

"[...] 但我做不到。" - 你必须更具体。究竟是什么问题?这些操作在语法和语义上似乎是正确的。 @Rabbid76 我已经添加了我得到的结果的图片。第三张是用GIMP编辑的,不是真图,是我想要实现的 您的意思是对glLoadMatrixf(self.m) 的调用有效,但它并没有达到您的预期效果? @Rabbid76 是的,场景中的元素没有正确渲染,如您在第一张图片中看到的那样 【参考方案1】:

通过交换组件和反转组件之一,可以将二维向量旋转 90°:

向左旋转 (x, y) 为 (-y, x) 向右旋转 (x, y) 为 (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)

【讨论】:

使用 glRotate 选项我得到与图 1 相同的结果,透视是错误的 我的意思是,为什么我得到的是错误的第一张图片而不是第三张? 不,不是。视角应该保持不变 为什么 glRotate(90, 1, 0, 0) 不等于绕 X 轴旋转 90 度的轴? gluLookAt 函数在模型视图矩阵中,它应该在投影矩阵中,对吧?

以上是关于在 PyOpenGL 中切换 Y 轴和 Z 轴的主要内容,如果未能解决你的问题,请参考以下文章

如何获取echarts点击点的X轴和Y轴值

如何设置 highcharts X轴和Y轴值

如何获取echarts点击点的X轴和Y轴值

如何获取echarts点击点的X轴和Y轴值

如何获取echarts点击点的X轴和Y轴值

Matplotlib附加到z轴