VTK  9.1.0
vtkOpenVRRenderWindow.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3 Program: Visualization Toolkit
4 
5 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
6 All rights reserved.
7 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
8 
9 This software is distributed WITHOUT ANY WARRANTY; without even
10 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11 PURPOSE. See the above copyright notice for more information.
12 
13 =========================================================================*/
140 #ifndef vtkOpenVRRenderWindow_h
141 #define vtkOpenVRRenderWindow_h
142 
143 #include "vtkRenderingOpenVRModule.h" // For export macro
144 #include "vtkVRRenderWindow.h"
145 
146 #include "vtkEventData.h" // for enums
147 #include "vtkOpenGLHelper.h" // used for ivars
148 #include "vtk_glew.h" // used for methods
149 #include <openvr.h> // for ivars
150 #include <vector> // ivars
151 
152 class vtkCamera;
153 class vtkMatrix4x4;
154 class vtkOpenVRModel;
155 class vtkOpenVROverlay;
157 class vtkTransform;
158 
159 class VTKRENDERINGOPENVR_EXPORT vtkOpenVRRenderWindow : public vtkVRRenderWindow
160 {
161 public:
164 
165  void Initialize(void) override;
166 
167  void ReleaseGraphicsResources(vtkWindow* renWin) override;
168 
172  vr::IVRSystem* GetHMD() { return this->HMD; }
173 
174  static bool IsHMDPresent();
175 
181 
182  void Render() override;
183 
188  void StereoMidpoint() override;
189 
194  void StereoRenderComplete() override;
195 
200 
202  /*
203  * Set/Get the overlay to use on the VR dashboard
204  */
205  vtkGetObjectMacro(DashboardOverlay, vtkOpenVROverlay);
208 
210 
213  vtkGetMacro(BaseStationVisibility, bool);
214  vtkSetMacro(BaseStationVisibility, bool);
215  vtkBooleanMacro(BaseStationVisibility, bool);
217 
223  void UpdateHMDMatrixPose() override;
224 
226 
231 
235  vr::IVRRenderModels* GetOpenVRRenderModels() { return this->OpenVRRenderModels; }
236 
241 
246  {
247  return this->GetTrackedDeviceIndexForDevice(dev, 0);
248  }
249  vr::TrackedDeviceIndex_t GetTrackedDeviceIndexForDevice(vtkEventDataDevice dev, uint32_t index);
251 
255  vr::TrackedDevicePose_t* GetTrackedDevicePose(vtkEventDataDevice idx)
256  {
257  return this->GetTrackedDevicePose(idx, 0);
258  }
259  vr::TrackedDevicePose_t* GetTrackedDevicePose(vtkEventDataDevice idx, uint32_t index);
260  vr::TrackedDevicePose_t& GetTrackedDevicePose(vr::TrackedDeviceIndex_t idx)
261  {
262  return this->TrackedDevicePose[idx];
263  }
264 
268  void RenderModels() override;
269 
271  vtkEventDataDevice device, vtkMatrix4x4* poseMatrixWorld) override;
272 
273  void ConvertOpenVRPoseToMatrices(const vr::TrackedDevicePose_t& tdPose,
274  vtkMatrix4x4* poseMatrixWorld, vtkMatrix4x4* poseMatrixPhysical = nullptr);
275 
276 protected:
279 
281 
282  bool GetSizeFromAPI() override;
283 
285 
286  vr::IVRSystem* HMD;
287  vr::IVRRenderModels* OpenVRRenderModels;
288 
289  bool CreateFramebuffers() override;
290 
291  bool CreateOneFramebuffer(int nWidth, int nHeight, FramebufferDesc& framebufferDesc);
292 
293  // convert a device index to a human string
294  std::string GetTrackedDeviceString(vr::IVRSystem* pHmd, vr::TrackedDeviceIndex_t unDevice,
295  vr::TrackedDeviceProperty prop, vr::TrackedPropertyError* peError = nullptr);
296 
297  // devices may have polygonal models
298  // load them
299  vtkOpenVRModel* FindOrLoadRenderModel(const char* modelName);
300 
301  vr::TrackedDevicePose_t TrackedDevicePose[vr::k_unMaxTrackedDeviceCount];
302 
304 
305 private:
307  void operator=(const vtkOpenVRRenderWindow&) = delete;
308 };
309 
310 #endif
vtkOpenVRRenderWindow::UpdateHMDMatrixPose
void UpdateHMDMatrixPose() override
Update the HMD pose based on hardware pose and physical to world transform.
vtkOpenVRRenderWindow::GetOpenVRRenderModels
vr::IVRRenderModels * GetOpenVRRenderModels()
Get the openVR Render Models.
Definition: vtkOpenVRRenderWindow.h:235
vtkVRModel
VR device model.
Definition: vtkVRModel.h:41
vtkOpenVRRenderWindow::~vtkOpenVRRenderWindow
~vtkOpenVRRenderWindow() override
vtkOpenGLHelper.h
vtkOpenVRRenderWindow::GetDeviceFromDeviceIndex
vtkEventDataDevice GetDeviceFromDeviceIndex(vr::TrackedDeviceIndex_t index)
Get the EventDataDevice corresponding to the OpenVR index.
vtkOpenVRRenderWindow::GetTrackedDeviceIndexForDevice
vr::TrackedDeviceIndex_t GetTrackedDeviceIndexForDevice(vtkEventDataDevice dev)
Get the index corresponding to the tracked device.
Definition: vtkOpenVRRenderWindow.h:245
vtkOpenVRRenderWindow::vtkOpenVRRenderWindow
vtkOpenVRRenderWindow()
vtkTransform
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:164
vtkOpenVRRenderWindow::Initialize
void Initialize(void) override
Initialize the rendering window.
vtkVRRenderWindow.h
vtkWindow
window superclass for vtkRenderWindow
Definition: vtkWindow.h:39
vtkOpenVRRenderWindow::StereoMidpoint
void StereoMidpoint() override
Intermediate method performs operations required between the rendering of the left and right eye.
vtkOpenVRModel
OpenVR device model.
Definition: vtkOpenVRModel.h:32
vtkOpenVRRenderWindow::GetTrackedDevicePose
vr::TrackedDevicePose_t * GetTrackedDevicePose(vtkEventDataDevice idx, uint32_t index)
vtkOpenVRRenderWindow::SetDashboardOverlay
void SetDashboardOverlay(vtkOpenVROverlay *)
vtkOpenVRRenderWindow::RenderOverlay
void RenderOverlay()
Draw the overlay.
vtkOpenVRRenderWindow::GetTrackedDeviceString
std::string GetTrackedDeviceString(vr::IVRSystem *pHmd, vr::TrackedDeviceIndex_t unDevice, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError *peError=nullptr)
vtkOpenVRRenderWindow::GetTrackedDevicePose
vr::TrackedDevicePose_t & GetTrackedDevicePose(vr::TrackedDeviceIndex_t idx)
Definition: vtkOpenVRRenderWindow.h:260
vtkOpenVRRenderWindow::CreateOneFramebuffer
bool CreateOneFramebuffer(int nWidth, int nHeight, FramebufferDesc &framebufferDesc)
vtkVRRenderWindow::GetTrackedDeviceModel
vtkVRModel * GetTrackedDeviceModel(vtkEventDataDevice idx)
Get the VRModel corresponding to the tracked device.
Definition: vtkVRRenderWindow.h:92
vtkOpenVRRenderWindow::Render
void Render() override
Overridden to not release resources that would interfere with an external application's rendering.
vtkOpenVROverlay
OpenVR overlay.
Definition: vtkOpenVROverlay.h:44
vtkOpenVRRenderWindow
OpenVR rendering window.
Definition: vtkOpenVRRenderWindow.h:160
vtkMatrix4x4
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:145
vtkCamera
a virtual camera for 3D rendering
Definition: vtkCamera.h:155
vtkOpenVRRenderWindow::ConvertOpenVRPoseToMatrices
void ConvertOpenVRPoseToMatrices(const vr::TrackedDevicePose_t &tdPose, vtkMatrix4x4 *poseMatrixWorld, vtkMatrix4x4 *poseMatrixPhysical=nullptr)
vtkOpenGLVertexBufferObject
Definition: vtkOpenGLVertexBufferObject.h:41
vtkEventData.h
vtkOpenVRRenderWindow::GetNumberOfTrackedDevicesForDevice
uint32_t GetNumberOfTrackedDevicesForDevice(vtkEventDataDevice dev)
vtkOpenVRRenderWindow::GetTrackedDevicePose
vr::TrackedDevicePose_t * GetTrackedDevicePose(vtkEventDataDevice idx)
Get the most recent pose corresponding to the tracked device.
Definition: vtkOpenVRRenderWindow.h:255
vtkOpenVRRenderWindow::HMD
vr::IVRSystem * HMD
Definition: vtkOpenVRRenderWindow.h:286
vtkRenderWindowInteractor
platform-independent render window interaction including picking and frame rate control.
Definition: vtkRenderWindowInteractor.h:192
vtkOpenVRRenderWindow::MakeRenderWindowInteractor
vtkRenderWindowInteractor * MakeRenderWindowInteractor() override
Create an interactor to control renderers in this window.
vtkOpenVRRenderWindow::GetHMD
vr::IVRSystem * GetHMD()
Get the system pointer.
Definition: vtkOpenVRRenderWindow.h:172
vtkX3D::string
@ string
Definition: vtkX3D.h:496
vtkOpenVRRenderWindow::GetTrackedDeviceIndexForDevice
vr::TrackedDeviceIndex_t GetTrackedDeviceIndexForDevice(vtkEventDataDevice dev, uint32_t index)
vtkOpenVRRenderWindow::FindOrLoadRenderModel
vtkOpenVRModel * FindOrLoadRenderModel(const char *modelName)
vtkOpenVRRenderWindow::OpenVRRenderModels
vr::IVRRenderModels * OpenVRRenderModels
Definition: vtkOpenVRRenderWindow.h:287
vtkVRRenderWindow
VR rendering window.
Definition: vtkVRRenderWindow.h:54
vtkEventDataDevice
vtkEventDataDevice
platform-independent event data structures
Definition: vtkEventData.h:26
vtkOpenVRRenderWindow::DashboardOverlay
vtkOpenVROverlay * DashboardOverlay
Definition: vtkOpenVRRenderWindow.h:303
vtkOpenVRRenderWindow::New
static vtkOpenVRRenderWindow * New()
vtkOpenVRRenderWindow::GetWindowTitleFromAPI
std::string GetWindowTitleFromAPI() override
vtkOpenVRRenderWindow::BaseStationVisibility
bool BaseStationVisibility
Definition: vtkOpenVRRenderWindow.h:284
vtkOpenVRRenderWindow::ReleaseGraphicsResources
void ReleaseGraphicsResources(vtkWindow *renWin) override
Free up any graphics resources associated with this window a value of NULL means the context may alre...
vtkOpenVRRenderWindow::StereoRenderComplete
void StereoRenderComplete() override
Handles work required once both views have been rendered when using stereo rendering.
vtkOpenVRRenderWindow::GetSizeFromAPI
bool GetSizeFromAPI() override
Attempt to get the size of the display from the API and store it in this->Size.
vtkOpenVRRenderWindow::RenderModels
void RenderModels() override
Render the controller and base station models.
vtkOpenVRRenderWindow::GetPoseMatrixWorldFromDevice
bool GetPoseMatrixWorldFromDevice(vtkEventDataDevice device, vtkMatrix4x4 *poseMatrixWorld) override
Store in poseMatrixWorld the pose matrix in world coordinate from an event data device.
vtkOpenVRRenderWindow::GetTrackedDeviceModel
vtkVRModel * GetTrackedDeviceModel(vtkEventDataDevice idx, uint32_t index) override
Get the VRModel corresponding to the tracked device.
vtkX3D::index
@ index
Definition: vtkX3D.h:252
vtkVRRenderWindow::FramebufferDesc
Definition: vtkVRRenderWindow.h:335
vtkOpenVRRenderWindow::CreateFramebuffers
bool CreateFramebuffers() override
vtkOpenVRRenderWindow::IsHMDPresent
static bool IsHMDPresent()