在 PyOpenGL 中切换 Y 轴和 Z 轴
Switch axis Y and Z in PyOpenGL
我想在 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)
我想在 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)