gpt4 book ai didi

python - 在 PyOpenGL 中切换 Y 轴和 Z 轴

转载 作者:行者123 更新时间:2023-12-01 06:43:18 27 4
gpt4 key购买 nike

我想在 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]]

错误结果: enter image description here

使用单位矩阵: enter image description here

预计: enter image description here

编辑:这有效:

        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)

最佳答案

通过交换分量并反转其中一个分量,可以将 2 维向量旋转 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)
<小时/>

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

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

关于python - 在 PyOpenGL 中切换 Y 轴和 Z 轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59354346/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com