Python Vispy转盘摄像头-滚动选项不工作

Python Vispy转盘摄像头-滚动选项不工作,python,vispy,Python,Vispy,我有一个问题,滚动角度不工作在vispy转盘相机 def surface_3D(x, y, z, name): canvas = scene.SceneCanvas(keys='interactive') view = canvas.central_widget.add_view() view.camera = 'turntable' view.camera.center = (0,0,0) view.camera.fov = 50 view.c

我有一个问题,滚动角度不工作在vispy转盘相机

def surface_3D(x, y, z, name):

    canvas = scene.SceneCanvas(keys='interactive')
    view = canvas.central_widget.add_view()
    view.camera = 'turntable'
    view.camera.center = (0,0,0)
    view.camera.fov = 50
    view.camera.distance = 3
    view.camera.azimuth = -90  
    view.camera.elevation = 30
    view.camera.roll = 30  # This angle is not working

    Y, X = np.meshgrid(y, x)   

    tray1  = np.zeros_like(X)
    tray2  = np.zeros_like(X)

    tray1[0,:] = 0.5 ; tray1[:,0] = 1 ; tray1[-1,:] = 1 ; tray1[:,-1] = 1
    tray2[0,:] = z[0,:] ; tray2[:,0] = z[:,0] ;  tray2[-1,:] = z[-1,:] ; tray2[:,-1] = z[:,-1]

    surface  = scene.visuals.SurfacePlot(x, y, z, shading='smooth', color='#289fd2')
    surface1 = scene.visuals.SurfacePlot(x, y, tray1, shading='smooth', color=(0.5,0.5,0.5,0.2))
    surface2 = scene.visuals.SurfacePlot(x, y, tray2, shading='smooth', color='#289fd2')

    view.add(surface)
    view.add(surface2)
    view.add(surface1)

    canvas.show(run=True)

    im = _screenshot((0, 0, canvas.size[0], canvas.size[1]))
    io.imsave('vispy_screenshot.png', im)

    return 
即使我给出30度的滚动角,视图也不会旋转。但方位角、仰角和中心都能很好地工作

我在这里的主要目的是滚动摄影机,而不是滚动坦克来制作动画。(晃动研究)


你好,谢谢你的建议

我可以通过在vispy库中的_rotate_tr函数中添加一行来解决滚动问题

原始代码:

def _rotate_tr(self):
        """Rotate the transformation matrix based on camera parameters"""
        up, forward, right = self._get_dim_vectors()
        self.transform.rotate(self.elevation, -right)
        self.transform.rotate(self.azimuth, up)
修改代码

def _rotate_tr(self):
        """Rotate the transformation matrix based on camera parameters"""
        up, forward, right = self._get_dim_vectors()
        self.transform.rotate(self.elevation, -right)
        self.transform.rotate(self.azimuth, up)
        self.transform.rotate(self.roll, -right)  # New line added here
滚动角度为0度和180度的结果如下所示


有一点令人担忧的是,有人评论说,roll可能没有得到充分利用。很可能这些方法需要更新,但我对这台相机不是很熟悉。太棒了!你认为你可以为这个修复提出请求吗?嗨@djoese,我刚刚意识到另一个问题。我提到的解决方法并不是任意的:(。但是你给我的建议帮助我解决了我现有的问题。如果我找到了一个通用的解决方案,我会提出拉取请求。