VTK中的第一人称模式

时间:2018-02-07 13:59:34

标签: camera vtk frame-rate

我在尝试在VTK中制作一种FPS时遇到了麻烦。我需要的是用户能够使用鼠标(不点击任何按钮)移动相机进行俯仰,打哈欠等,并使用键盘(标准FPS)向前,向后,向左或向右移动。我虽然使用任何交互样式都很容易,但似乎没有人支持这种功能。我能用什么想法?

由于

1 个答案:

答案 0 :(得分:2)

有“飞行”相机 - vtkInteractorStyleFlight

如果它不适合你,你可能需要自己制作。但是,它不应该太难,只需从vtkInteractorStyle派生出一个新的交互器,它已经有了OnMouseMoveOnKeyDown之类的各种方法,你可以覆盖并填充您的相机移动(即根据鼠标移动计算滚动/俯仰/偏航)。您可以通过<your_vtkInteractorStyle_instance>->GetCurrentRenderer()->GetActiveCamera()访问当前相机,它已经有偏航/俯仰/滚动的方法。

在vtkInteractorStyle中,this->Interactor将为您提供绑定到InteractorStyle的vtkRenderWindowInteractor实例,该实例包含您需要的鼠标和键盘的所有数据(鼠标的当前/最后位置,按键等) )。它的事件由vtkInteractorStyle捕获,并且已经触发了所有OnMouseMove等,所以您需要做的就是覆盖并“填充”这些事件。

一个问题是vtkInteractorStyle已经有一些功能绑定到某些键,最明显的是“W”键。您可能必须覆盖OnChar方法,以便不以原始vtkInteractorStyle的方式处理密钥。或者你可以直接从抽象类vtkInteractorObserver派生你的交互器,但是你必须做更多的工作,因为并非所有必需事件都定义了它们的回调。

我认为最好只是查看vtkInteractorStyle sources以了解它是如何实现的,并为您的目的进行类似的操作。

BTW,一些快速的谷歌搜索给了我this about 1st person camera in VTK,也许它也有一些有用的信息。