如何使用Vispy实现立方体的三维旋转
How to use Vispy to rotate cube in three dimensions
如何使用 Vispy 在三个维度(滚动、俯仰、偏航)中旋转立方体?
有一个在二维中旋转立方体的示例 here,但我不确定如何将其扩展为在三维中旋转。
我想我需要修改on_timer()
方法。我尝试将其更改为:
def on_timer(self, event):
self.theta += .5
self.phi += .5
self.model = np.dot(rotate(self.theta, (0, 1, 0)),
rotate(self.phi, (0, 0, 1)))
self.program['u_model'] = self.model
self.update()
至:
def on_timer(self, event):
self.gamma += .5
self.theta += .5
self.phi += .5
self.model = np.dot(
rotate(self.gamma, (1, 0, 0)),
np.dot(rotate(self.theta, (0, 1, 0)),
rotate(self.phi, (0, 0, 1))),
)
self.program['u_model'] = self.model
self.update()
但这似乎只是让第三个维度与第二个维度重复。我做错了什么?
不是增加 gamma、theta 和 phi,运行 相同的代码但只增加三个变量之一。对三个变量中的每一个重复。实际上,您会发现您正在使用新代码同时在三个不同的维度上旋转;也许它看起来不像你想象的那样?或者你以为从立方体的角度会发生变化,但实际上是从相机的角度进行坐标变换?
此外,更简单的起点可能是 scene cube example: https://github.com/vispy/vispy/blob/master/examples/basics/scene/cube.py。除非你真的想了解较低级别的 OpenGL API 层。
如何使用 Vispy 在三个维度(滚动、俯仰、偏航)中旋转立方体?
有一个在二维中旋转立方体的示例 here,但我不确定如何将其扩展为在三维中旋转。
我想我需要修改on_timer()
方法。我尝试将其更改为:
def on_timer(self, event):
self.theta += .5
self.phi += .5
self.model = np.dot(rotate(self.theta, (0, 1, 0)),
rotate(self.phi, (0, 0, 1)))
self.program['u_model'] = self.model
self.update()
至:
def on_timer(self, event):
self.gamma += .5
self.theta += .5
self.phi += .5
self.model = np.dot(
rotate(self.gamma, (1, 0, 0)),
np.dot(rotate(self.theta, (0, 1, 0)),
rotate(self.phi, (0, 0, 1))),
)
self.program['u_model'] = self.model
self.update()
但这似乎只是让第三个维度与第二个维度重复。我做错了什么?
不是增加 gamma、theta 和 phi,运行 相同的代码但只增加三个变量之一。对三个变量中的每一个重复。实际上,您会发现您正在使用新代码同时在三个不同的维度上旋转;也许它看起来不像你想象的那样?或者你以为从立方体的角度会发生变化,但实际上是从相机的角度进行坐标变换?
此外,更简单的起点可能是 scene cube example: https://github.com/vispy/vispy/blob/master/examples/basics/scene/cube.py。除非你真的想了解较低级别的 OpenGL API 层。