Python 如何使用Vispy在三维中旋转立方体

Python 如何使用Vispy在三维中旋转立方体,python,3d,rotation,geometry,vispy,Python,3d,Rotation,Geometry,Vispy,如何使用Vispy在三维空间中旋转立方体(滚动、俯仰、偏航) 有一个在二维旋转立方体的例子,但我不知道如何将其扩展到三维旋转 我想我需要修改on\u timer()方法。我尝试将其从: def on_timer(self, event): self.theta += .5 self.phi += .5 self.model = np.dot(rotate(self.theta, (0, 1, 0)), rotate(self

如何使用Vispy在三维空间中旋转立方体(滚动、俯仰、偏航)

有一个在二维旋转立方体的例子,但我不知道如何将其扩展到三维旋转

我想我需要修改
on\u 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()
致:


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

不是增加gamma、theta和phi,而是运行相同的代码,但只增加三个变量中的一个。对三个变量中的每一个重复上述步骤。你会发现,事实上,你正在用你的新代码在三个不同的维度上同时旋转;也许只是看起来不像你想的那样?或者你可能认为它会从立方体的角度改变,但它实际上是从相机的角度进行坐标变换


此外,一个更容易的起点可能是从。除非您真正想了解较低级别的OpenGL API层。

不要增加gamma、theta和phi,而是运行相同的代码,但只增加三个变量中的一个。对三个变量中的每一个重复上述步骤。你会发现,事实上,你正在用你的新代码在三个不同的维度上同时旋转;也许只是看起来不像你想的那样?或者你可能认为它会从立方体的角度改变,但它实际上是从相机的角度进行坐标变换

此外,一个更容易的起点可能是从。除非你真的想了解OpenGLAPI的底层

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()