VTK  9.1.0
vtkOpenVRRenderWindow.h
Go to the documentation of this file.
1/*=========================================================================
2
3Program: Visualization Toolkit
4
5Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
6All rights reserved.
7See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
8
9This software is distributed WITHOUT ANY WARRANTY; without even
10the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11PURPOSE. See the above copyright notice for more information.
12
13=========================================================================*/
60#ifndef vtkOpenVRRenderWindow_h
61#define vtkOpenVRRenderWindow_h
62
63#include "vtkRenderingOpenVRModule.h" // For export macro
64#include "vtkVRRenderWindow.h"
65
66#include "vtkEventData.h" // for enums
67#include "vtkOpenGLHelper.h" // used for ivars
68#include "vtk_glew.h" // used for methods
69#include <openvr.h> // for ivars
70#include <vector> // ivars
71
72class vtkCamera;
73class vtkMatrix4x4;
74class vtkOpenVRModel;
77class vtkTransform;
78
79class VTKRENDERINGOPENVR_EXPORT vtkOpenVRRenderWindow : public vtkVRRenderWindow
80{
81public:
84
85 void Initialize(void) override;
86
87 void ReleaseGraphicsResources(vtkWindow* renWin) override;
88
92 vr::IVRSystem* GetHMD() { return this->HMD; }
93
94 static bool IsHMDPresent();
95
101
102 void Render() override;
103
108 void StereoMidpoint() override;
109
114 void StereoRenderComplete() override;
115
120
122 /*
123 * Set/Get the overlay to use on the VR dashboard
124 */
125 vtkGetObjectMacro(DashboardOverlay, vtkOpenVROverlay);
128
130
133 vtkGetMacro(BaseStationVisibility, bool);
134 vtkSetMacro(BaseStationVisibility, bool);
135 vtkBooleanMacro(BaseStationVisibility, bool);
137
143 void UpdateHMDMatrixPose() override;
144
146
151
155 vr::IVRRenderModels* GetOpenVRRenderModels() { return this->OpenVRRenderModels; }
156
161
166 {
167 return this->GetTrackedDeviceIndexForDevice(dev, 0);
168 }
169 vr::TrackedDeviceIndex_t GetTrackedDeviceIndexForDevice(vtkEventDataDevice dev, uint32_t index);
171
175 vr::TrackedDevicePose_t* GetTrackedDevicePose(vtkEventDataDevice idx)
176 {
177 return this->GetTrackedDevicePose(idx, 0);
178 }
179 vr::TrackedDevicePose_t* GetTrackedDevicePose(vtkEventDataDevice idx, uint32_t index);
180 vr::TrackedDevicePose_t& GetTrackedDevicePose(vr::TrackedDeviceIndex_t idx)
181 {
182 return this->TrackedDevicePose[idx];
183 }
184
188 void RenderModels() override;
189
191 vtkEventDataDevice device, vtkMatrix4x4* poseMatrixWorld) override;
192
193 void ConvertOpenVRPoseToMatrices(const vr::TrackedDevicePose_t& tdPose,
194 vtkMatrix4x4* poseMatrixWorld, vtkMatrix4x4* poseMatrixPhysical = nullptr);
195
196protected:
199
201
202 bool GetSizeFromAPI() override;
203
205
206 vr::IVRSystem* HMD;
207 vr::IVRRenderModels* OpenVRRenderModels;
208
209 bool CreateFramebuffers() override;
210
211 bool CreateOneFramebuffer(int nWidth, int nHeight, FramebufferDesc& framebufferDesc);
212
213 // convert a device index to a human string
214 std::string GetTrackedDeviceString(vr::IVRSystem* pHmd, vr::TrackedDeviceIndex_t unDevice,
215 vr::TrackedDeviceProperty prop, vr::TrackedPropertyError* peError = nullptr);
216
217 // devices may have polygonal models
218 // load them
219 vtkOpenVRModel* FindOrLoadRenderModel(const char* modelName);
220
221 vr::TrackedDevicePose_t TrackedDevicePose[vr::k_unMaxTrackedDeviceCount];
222
224
225private:
227 void operator=(const vtkOpenVRRenderWindow&) = delete;
228};
229
230#endif
a virtual camera for 3D rendering
Definition: vtkCamera.h:55
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:45
OpenVR device model.
OpenVR overlay.
OpenVR rendering window.
bool GetPoseMatrixWorldFromDevice(vtkEventDataDevice device, vtkMatrix4x4 *poseMatrixWorld) override
Store in poseMatrixWorld the pose matrix in world coordinate from an event data device.
bool GetSizeFromAPI() override
Attempt to get the size of the display from the API and store it in this->Size.
void UpdateHMDMatrixPose() override
Update the HMD pose based on hardware pose and physical to world transform.
vr::IVRSystem * GetHMD()
Get the system pointer.
void ConvertOpenVRPoseToMatrices(const vr::TrackedDevicePose_t &tdPose, vtkMatrix4x4 *poseMatrixWorld, vtkMatrix4x4 *poseMatrixPhysical=nullptr)
static vtkOpenVRRenderWindow * New()
vr::TrackedDevicePose_t * GetTrackedDevicePose(vtkEventDataDevice idx, uint32_t index)
void SetDashboardOverlay(vtkOpenVROverlay *)
vr::TrackedDeviceIndex_t GetTrackedDeviceIndexForDevice(vtkEventDataDevice dev)
Get the index corresponding to the tracked device.
vtkRenderWindowInteractor * MakeRenderWindowInteractor() override
Create an interactor to control renderers in this window.
void RenderModels() override
Render the controller and base station models.
vr::IVRRenderModels * GetOpenVRRenderModels()
Get the openVR Render Models.
bool CreateFramebuffers() override
vr::TrackedDevicePose_t * GetTrackedDevicePose(vtkEventDataDevice idx)
Get the most recent pose corresponding to the tracked device.
vr::TrackedDeviceIndex_t GetTrackedDeviceIndexForDevice(vtkEventDataDevice dev, uint32_t index)
vr::TrackedDevicePose_t & GetTrackedDevicePose(vr::TrackedDeviceIndex_t idx)
std::string GetWindowTitleFromAPI() override
vtkOpenVRModel * FindOrLoadRenderModel(const char *modelName)
bool CreateOneFramebuffer(int nWidth, int nHeight, FramebufferDesc &framebufferDesc)
~vtkOpenVRRenderWindow() override
vtkEventDataDevice GetDeviceFromDeviceIndex(vr::TrackedDeviceIndex_t index)
Get the EventDataDevice corresponding to the OpenVR index.
uint32_t GetNumberOfTrackedDevicesForDevice(vtkEventDataDevice dev)
void StereoRenderComplete() override
Handles work required once both views have been rendered when using stereo rendering.
void ReleaseGraphicsResources(vtkWindow *renWin) override
Free up any graphics resources associated with this window a value of NULL means the context may alre...
void RenderOverlay()
Draw the overlay.
void StereoMidpoint() override
Intermediate method performs operations required between the rendering of the left and right eye.
vtkVRModel * GetTrackedDeviceModel(vtkEventDataDevice idx, uint32_t index) override
Get the VRModel corresponding to the tracked device.
std::string GetTrackedDeviceString(vr::IVRSystem *pHmd, vr::TrackedDeviceIndex_t unDevice, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError *peError=nullptr)
void Render() override
Overridden to not release resources that would interfere with an external application's rendering.
void Initialize(void) override
Initialize the rendering window.
vtkOpenVROverlay * DashboardOverlay
vr::IVRRenderModels * OpenVRRenderModels
static bool IsHMDPresent()
platform-independent render window interaction including picking and frame rate control.
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:64
VR device model.
Definition: vtkVRModel.h:41
VR rendering window.
vtkVRModel * GetTrackedDeviceModel(vtkEventDataDevice idx)
Get the VRModel corresponding to the tracked device.
window superclass for vtkRenderWindow
Definition: vtkWindow.h:45
@ index
Definition: vtkX3D.h:252
@ string
Definition: vtkX3D.h:496
vtkEventDataDevice
platform-independent event data structures
Definition: vtkEventData.h:26