python - 在 PyOpenGL 中切换 Y 轴和 Z 轴
问题描述
我想在 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)
解决方案
通过交换组件和反转组件之一,可以将二维向量旋转 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)
推荐阅读
- java - 当我在我的 android 应用程序中使用滚动视图时,底部导航视图一直出现在我的键盘上方
- python - 动态构建时如何摆脱字典编号
- python - 如何使用 MPI4PY 从 Python 中的主机进程分发/分配任务
- python - 接收python代码结果的问题
- r - 通过在 r 中的多列上将前一行的值相加来计算数字
- pandas - Pandas udf 在多个列上,pandas 在 pyspark 中应用模拟
- c# - 为什么我无法让 Serilog 登录到磁盘或 App Insights?
- express - 当 SameSite 设置为“无”且安全设置为 true 时,Express cookie-session 不保存 cookie
- class - Mockito 无法模拟此类:接口 org.infinispan.client.hotrod.RemoteCache
- python - 基于两个参数将数据从一个电子表格合并到另一个