摄像头的初始视角在未设定时,会自动朝向正上方,所以需要加一个初始视角的设定
m_cam.rotate(90, (1, 0, 0))
之后直接使用订阅的欧拉角使摄像机的视角转动。这里我直接用np带的弧度转角度方法,因为vispy的旋转需要直接使用角度。
m_cam.rotate(np.degrees(y_raw), (0, 0, 1)) # 偏航
m_cam.rotate(np.degrees(p_raw), (1, 0, 0)) # 俯仰
m_cam.rotate(np.degrees(r_raw), (0, 1, 0)) # 横滚
self.view.camera.transform.matrix = m_cam.matrix
地平线与pitch ladder直接固定在世界坐标系中
self.earth_node.transform = MatrixTransform()
画图时地平线默认是在z=0的平面上,所以不用做过多的参数设定
pitch ladder的旋转只关心偏航角。
scroll_gain = 0
total_yaw = np.degrees(y_raw) + (np.degrees(y_raw) * scroll_gain)
m_ladder.rotate(total_yaw, (0, 0, 1))
这里还考虑了一下pitch ladder的滑动感,但是会有偏移问题。

本文章使用limfx的vscode插件快速发布