我在尝试在VTK中制作一种FPS时遇到了麻烦。我需要的是用户能够使用鼠标(不点击任何按钮)移动相机进行俯仰,打哈欠等,并使用键盘(标准FPS)向前,向后,向左或向右移动。我虽然使用任何交互样式都很容易,但似乎没有人支持这种功能。我能用什么想法?
由于
答案 0 :(得分:2)
有“飞行”相机 - vtkInteractorStyleFlight
如果它不适合你,你可能需要自己制作。但是,它不应该太难,只需从vtkInteractorStyle
派生出一个新的交互器,它已经有了OnMouseMove
,OnKeyDown
之类的各种方法,你可以覆盖并填充您的相机移动(即根据鼠标移动计算滚动/俯仰/偏航)。您可以通过<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,也许它也有一些有用的信息。