如何使用Vispy以三维方式旋转立方体

时间:2016-10-25 01:50:43

标签: python 3d rotation geometry vispy

如何使用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()

但这似乎只是让第三个维度与第二个维度重复。我做错了什么?

1 个答案:

答案 0 :(得分:0)

不是增加gamma,theta和phi,而是运行相同的代码,但只增加三个变量中的一个。对三个变量中的每一个重复一遍。实际上,您将看到您使用新代码一次以三个不同的维度旋转;也许它只是看起来不像你认为的那样?或者你可能认为它会从立方体的角度改变,但它实际上是从相机的角度进行坐标转换?

此外,更容易的起点可能来自scene cube example: https://github.com/vispy/vispy/blob/master/examples/basics/scene/cube.py。除非您真的想要了解较低级别的OpenGL API层。