VTK中的第一人称模式

First person mode in VTK

我在尝试使用 VTK 制作一种 FPS 时遇到问题。我需要的是用户能够使用鼠标(无需单击任何按钮)移动相机进行俯仰、打哈欠等,并使用键盘(您的标准 FPS)向前、向后、向左或向右移动。我虽然使用任何交互方式都很容易,但似乎 none 支持这种功能。有什么想法可以使用吗?

谢谢

有 "flight" 相机 - vtkInteractorStyleFlight

如果它不适合您,您可能必须自己制作。然而,它应该不会太难,只需从 vtkInteractorStyle 派生一个新的交互器,它已经有各种方法,如 OnMouseMoveOnKeyDown 等,你可以覆盖和填充您的相机移动(即根据鼠标移动计算 roll/pitch/yaw)。您可以通过 <your_vtkInteractorStyle_instance>->GetCurrentRenderer()->GetActiveCamera() 访问当前相机,它已经有 yaw/pitch/roll.

的方法

在 vtkInteractorStyle 中,this->Interactor 会给你一个 vtkRenderWindowInteractor 绑定到 InteractorStyle 的实例,它有你需要的关于鼠标和键盘的所有数据(current/last 鼠标位置、按键等)。它的事件被 vtkInteractorStyle 捕获并触发所有 OnMouseMove 等,所以你需要做的就是覆盖和 "fill" 那些。

一个问题是 vtkInteractorStyle 已经有一些功能绑定到一些键,最显着的是绑定到 'W' 键。您可能必须重写 OnChar 方法,这样就不会以原始 vtkInteractorStyle 的方式处理键。或者您可以直接从抽象派生您的交互器 class vtkInteractorObserver,但是您将不得不做更多的工作,因为并非所有必要的事件都定义了它们的回调。

我认为最好的方法是简单地查看 vtkInteractorStyle sources 以了解它是如何实现的,然后根据您的目的进行类似的操作。

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