1

你如何使用 Vispy 在三个维度(滚动、俯仰、偏航)上旋转立方体?

这里有一个二维旋转立方体的示例,但我不确定如何将其扩展为在三维旋转。

我想我需要修改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()

但这似乎只会使第三维重复第二维。我究竟做错了什么?

4

1 回答 1

0

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

此外,更容易的起点可能来自场景立方体示例:https://github.com/vispy/vispy/blob/master/examples/basics/scene/cube.py。除非你真的想了解底层的 OpenGL API 层。

于 2016-10-27T21:04:09.687 回答