VTK  9.3.0
vtkOpenXRUtilities.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
14 #ifndef vtkOpenXRUtilities_h
15 #define vtkOpenXRUtilities_h
16 
17 #include "vtkMatrix4x4.h"
18 #include "vtkOpenXR.h"
19 
20 VTK_ABI_NAMESPACE_BEGIN
22 {
23 public:
25  vtkTypeMacro(vtkOpenXRUtilities, vtkObject);
26 
31  static void CreateProjectionFov(vtkMatrix4x4* result, XrFovf fov, float nearZ, float farZ);
32 
37  static void SetMatrixFromXrPose(vtkMatrix4x4* result, const XrPosef& xrPose);
38 
42  static void CreateFromQuaternion(double result[16], const XrQuaternionf& quat);
43 
47  static const char* GetActionTypeAsString(const XrActionType& actionType);
48 
52  static const char* GetViewConfigurationTypeAsString(
53  const XrViewConfigurationType& viewConfigType);
54 
58  static const char* GetStructureTypeAsString(const XrStructureType& structureType);
59 
60  static const XrPosef& GetIdentityPose();
61 
62 protected:
63  vtkOpenXRUtilities() = default;
64  ~vtkOpenXRUtilities() override = default;
65 
66 private:
67  vtkOpenXRUtilities(const vtkOpenXRUtilities&) = delete;
68  void operator=(const vtkOpenXRUtilities&) = delete;
69 };
70 
71 //----------------------------------------------------------------------------
72 inline const XrPosef& vtkOpenXRUtilities::GetIdentityPose()
73 {
74  static const XrPosef pose = {
75  { 0.0, 0.0, 0.0, 1.0 }, // .orientation
76  { 0.0, 0.0, 0.0 } // .position
77  };
78  return pose;
79 }
80 
81 //----------------------------------------------------------------------------
83  vtkMatrix4x4* result, const XrFovf fov, const float nearZ, const float farZ)
84 {
85  const float tanAngleLeft = tanf(fov.angleLeft);
86  const float tanAngleRight = tanf(fov.angleRight);
87 
88  const float tanAngleDown = tanf(fov.angleDown);
89  const float tanAngleUp = tanf(fov.angleUp);
90 
91  const float tanAngleWidth = tanAngleRight - tanAngleLeft;
92 
93  // Clip space with
94  // positive Y up (OpenGL / D3D / Metal).
95  const float tanAngleHeight = (tanAngleUp - tanAngleDown);
96 
97  double matrixArray[16] = { 0 };
98  if (farZ <= nearZ)
99  {
100  // place the far plane at infinity
101  matrixArray[0] = 2 / tanAngleWidth;
102  matrixArray[4] = 0;
103  matrixArray[8] = (tanAngleRight + tanAngleLeft) / tanAngleWidth;
104  matrixArray[12] = 0;
105 
106  matrixArray[1] = 0;
107  matrixArray[5] = 2 / tanAngleHeight;
108  matrixArray[9] = (tanAngleUp + tanAngleDown) / tanAngleHeight;
109  matrixArray[13] = 0;
110 
111  matrixArray[2] = 0;
112  matrixArray[6] = 0;
113  matrixArray[10] = -1;
114  matrixArray[14] = -(nearZ + nearZ);
115 
116  matrixArray[3] = 0;
117  matrixArray[7] = 0;
118  matrixArray[11] = -1;
119  matrixArray[15] = 0;
120  }
121  else
122  {
123  // normal projection
124  matrixArray[0] = 2 / tanAngleWidth;
125  matrixArray[4] = 0;
126  matrixArray[8] = (tanAngleRight + tanAngleLeft) / tanAngleWidth;
127  matrixArray[12] = 0;
128 
129  matrixArray[1] = 0;
130  matrixArray[5] = 2 / tanAngleHeight;
131  matrixArray[9] = (tanAngleUp + tanAngleDown) / tanAngleHeight;
132  matrixArray[13] = 0;
133 
134  matrixArray[2] = 0;
135  matrixArray[6] = 0;
136  matrixArray[10] = -(farZ + nearZ) / (farZ - nearZ);
137  matrixArray[14] = -2 * farZ * nearZ / (farZ - nearZ);
138 
139  matrixArray[3] = 0;
140  matrixArray[7] = 0;
141  matrixArray[11] = -1;
142  matrixArray[15] = 0;
143  }
144 
145  // Set the array to the result vtkMatrix
146  result->DeepCopy(matrixArray);
147  result->Transpose();
148 }
149 
150 //----------------------------------------------------------------------------
151 // transpose of vtk standard
152 inline void vtkOpenXRUtilities::CreateFromQuaternion(double result[16], const XrQuaternionf& quat)
153 {
154  const double x2 = quat.x + quat.x;
155  const double y2 = quat.y + quat.y;
156  const double z2 = quat.z + quat.z;
157 
158  const double xx2 = quat.x * x2;
159  const double yy2 = quat.y * y2;
160  const double zz2 = quat.z * z2;
161 
162  const double yz2 = quat.y * z2;
163  const double wx2 = quat.w * x2;
164  const double xy2 = quat.x * y2;
165  const double wz2 = quat.w * z2;
166  const double xz2 = quat.x * z2;
167  const double wy2 = quat.w * y2;
168 
169  result[0] = 1.0 - yy2 - zz2;
170  result[4] = xy2 + wz2;
171  result[8] = xz2 - wy2;
172  result[12] = 0.0;
173 
174  result[1] = xy2 - wz2;
175  result[5] = 1.0 - xx2 - zz2;
176  result[9] = yz2 + wx2;
177  result[13] = 0.0;
178 
179  result[2] = xz2 + wy2;
180  result[6] = yz2 - wx2;
181  result[10] = 1.0 - xx2 - yy2;
182  result[14] = 0.0;
183 
184  result[3] = 0.0;
185  result[7] = 0.0;
186  result[11] = 0.0;
187  result[15] = 1.0;
188 }
189 
190 //----------------------------------------------------------------------------
191 // transpose of VTK standard
192 inline void vtkOpenXRUtilities::SetMatrixFromXrPose(vtkMatrix4x4* result, const XrPosef& xrPose)
193 {
194  const XrQuaternionf& xrQuat = xrPose.orientation;
195  const XrVector3f& xrPos = xrPose.position;
196 
197  double* elems = result->GetData();
199 
200  // Add the translation
201  elems[3] = xrPos.x;
202  elems[7] = xrPos.y;
203  elems[11] = xrPos.z;
204 
205  result->Modified();
206 }
207 
208 //----------------------------------------------------------------------------
209 inline const char* vtkOpenXRUtilities::GetActionTypeAsString(const XrActionType& actionType)
210 {
211  switch (actionType)
212  {
213  case XR_ACTION_TYPE_BOOLEAN_INPUT:
214  return "XR_ACTION_TYPE_BOOLEAN_INPUT";
215  case XR_ACTION_TYPE_FLOAT_INPUT:
216  return "XR_ACTION_TYPE_FLOAT_INPUT";
217  case XR_ACTION_TYPE_VECTOR2F_INPUT:
218  return "XR_ACTION_TYPE_VECTOR2F_INPUT";
219  case XR_ACTION_TYPE_POSE_INPUT:
220  return "XR_ACTION_TYPE_POSE_INPUT";
221  case XR_ACTION_TYPE_VIBRATION_OUTPUT:
222  return "XR_ACTION_TYPE_VIBRATION_OUTPUT";
223  default:
224  return "UNRECOGNIZED_ACTION_TYPE";
225  }
226 }
227 
228 //----------------------------------------------------------------------------
230  const XrViewConfigurationType& viewConfigType)
231 {
232  switch (viewConfigType)
233  {
234  case XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO:
235  return "XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO";
236  case XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO:
237  return "XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO";
238  case XR_VIEW_CONFIGURATION_TYPE_PRIMARY_QUAD_VARJO:
239  return "XR_VIEW_CONFIGURATION_TYPE_PRIMARY_QUAD_VARJO";
240  case XR_VIEW_CONFIGURATION_TYPE_SECONDARY_MONO_FIRST_PERSON_OBSERVER_MSFT:
241  return "XR_VIEW_CONFIGURATION_TYPE_SECONDARY_MONO_FIRST_PERSON_OBSERVER_MSFT";
242  default:
243  return "UNRECOGNIZED_VIEW_CONFIGURATION_TYPE";
244  }
245 }
246 
247 //----------------------------------------------------------------------------
249  const XrStructureType& structureType)
250 {
251  switch (structureType)
252  {
253  case XR_TYPE_API_LAYER_PROPERTIES:
254  return "XR_TYPE_API_LAYER_PROPERTIES";
255  case XR_TYPE_EXTENSION_PROPERTIES:
256  return "XR_TYPE_EXTENSION_PROPERTIES";
257  case XR_TYPE_INSTANCE_CREATE_INFO:
258  return "XR_TYPE_INSTANCE_CREATE_INFO";
259  case XR_TYPE_SYSTEM_GET_INFO:
260  return "XR_TYPE_SYSTEM_GET_INFO";
261  case XR_TYPE_SYSTEM_PROPERTIES:
262  return "XR_TYPE_SYSTEM_PROPERTIES";
263  case XR_TYPE_VIEW_LOCATE_INFO:
264  return "XR_TYPE_VIEW_LOCATE_INFO";
265  case XR_TYPE_VIEW:
266  return "XR_TYPE_VIEW";
267  case XR_TYPE_SESSION_CREATE_INFO:
268  return "XR_TYPE_SESSION_CREATE_INFO";
269  case XR_TYPE_SWAPCHAIN_CREATE_INFO:
270  return "XR_TYPE_SWAPCHAIN_CREATE_INFO";
271  case XR_TYPE_SESSION_BEGIN_INFO:
272  return "XR_TYPE_SESSION_BEGIN_INFO";
273  case XR_TYPE_VIEW_STATE:
274  return "XR_TYPE_VIEW_STATE";
275  case XR_TYPE_FRAME_END_INFO:
276  return "XR_TYPE_FRAME_END_INFO";
277  case XR_TYPE_HAPTIC_VIBRATION:
278  return "XR_TYPE_HAPTIC_VIBRATION";
279  case XR_TYPE_EVENT_DATA_BUFFER:
280  return "XR_TYPE_EVENT_DATA_BUFFER";
281  case XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING:
282  return "XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING";
283  case XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED:
284  return "XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED";
285  case XR_TYPE_ACTION_STATE_BOOLEAN:
286  return "XR_TYPE_ACTION_STATE_BOOLEAN";
287  case XR_TYPE_ACTION_STATE_FLOAT:
288  return "XR_TYPE_ACTION_STATE_FLOAT";
289  case XR_TYPE_ACTION_STATE_VECTOR2F:
290  return "XR_TYPE_ACTION_STATE_VECTOR2F";
291  case XR_TYPE_ACTION_STATE_POSE:
292  return "XR_TYPE_ACTION_STATE_POSE";
293  case XR_TYPE_ACTION_SET_CREATE_INFO:
294  return "XR_TYPE_ACTION_SET_CREATE_INFO";
295  case XR_TYPE_ACTION_CREATE_INFO:
296  return "XR_TYPE_ACTION_CREATE_INFO";
297  case XR_TYPE_INSTANCE_PROPERTIES:
298  return "XR_TYPE_INSTANCE_PROPERTIES";
299  case XR_TYPE_FRAME_WAIT_INFO:
300  return "XR_TYPE_FRAME_WAIT_INFO";
301  case XR_TYPE_COMPOSITION_LAYER_PROJECTION:
302  return "XR_TYPE_COMPOSITION_LAYER_PROJECTION";
303  case XR_TYPE_COMPOSITION_LAYER_QUAD:
304  return "XR_TYPE_COMPOSITION_LAYER_QUAD";
305  case XR_TYPE_REFERENCE_SPACE_CREATE_INFO:
306  return "XR_TYPE_REFERENCE_SPACE_CREATE_INFO";
307  case XR_TYPE_ACTION_SPACE_CREATE_INFO:
308  return "XR_TYPE_ACTION_SPACE_CREATE_INFO";
309  case XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING:
310  return "XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING";
311  case XR_TYPE_VIEW_CONFIGURATION_VIEW:
312  return "XR_TYPE_VIEW_CONFIGURATION_VIEW";
313  case XR_TYPE_SPACE_LOCATION:
314  return "XR_TYPE_SPACE_LOCATION";
315  case XR_TYPE_SPACE_VELOCITY:
316  return "XR_TYPE_SPACE_VELOCITY";
317  case XR_TYPE_FRAME_STATE:
318  return "XR_TYPE_FRAME_STATE";
319  case XR_TYPE_VIEW_CONFIGURATION_PROPERTIES:
320  return "XR_TYPE_VIEW_CONFIGURATION_PROPERTIES";
321  case XR_TYPE_FRAME_BEGIN_INFO:
322  return "XR_TYPE_FRAME_BEGIN_INFO";
323  case XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW:
324  return "XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW";
325  case XR_TYPE_EVENT_DATA_EVENTS_LOST:
326  return "XR_TYPE_EVENT_DATA_EVENTS_LOST";
327  case XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING:
328  return "XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING";
329  case XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED:
330  return "XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED";
331  case XR_TYPE_INTERACTION_PROFILE_STATE:
332  return "XR_TYPE_INTERACTION_PROFILE_STATE";
333  case XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO:
334  return "XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO";
335  case XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO:
336  return "XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO";
337  case XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO:
338  return "XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO";
339  case XR_TYPE_ACTION_STATE_GET_INFO:
340  return "XR_TYPE_ACTION_STATE_GET_INFO";
341  case XR_TYPE_HAPTIC_ACTION_INFO:
342  return "XR_TYPE_HAPTIC_ACTION_INFO";
343  case XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO:
344  return "XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO";
345  case XR_TYPE_ACTIONS_SYNC_INFO:
346  return "XR_TYPE_ACTIONS_SYNC_INFO";
347  case XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO:
348  return "XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO";
349  case XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO:
350  return "XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO";
351  case XR_TYPE_COMPOSITION_LAYER_CUBE_KHR:
352  return "XR_TYPE_COMPOSITION_LAYER_CUBE_KHR";
353  case XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR:
354  return "XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR";
355  case XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR:
356  return "XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR";
357  case XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR:
358  return "XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR";
359  case XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT:
360  return "XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT";
361  case XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR:
362  return "XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR";
363  case XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR:
364  return "XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR";
365  case XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT:
366  return "XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT";
367  case XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT:
368  return "XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT";
369  case XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT:
370  return "XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT";
371  case XR_TYPE_DEBUG_UTILS_LABEL_EXT:
372  return "XR_TYPE_DEBUG_UTILS_LABEL_EXT";
373  case XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR:
374  return "XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR";
375  case XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR:
376  return "XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR";
377  case XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR:
378  return "XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR";
379  case XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR:
380  return "XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR";
381  case XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR:
382  return "XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR";
383  case XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR:
384  return "XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR";
385  case XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR:
386  return "XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR";
387  case XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR:
388  return "XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR";
389  case XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR:
390  return "XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR";
391  case XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR:
392  return "XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR";
393  case XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR:
394  return "XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR";
395  case XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR:
396  return "XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR";
397  case XR_TYPE_GRAPHICS_BINDING_D3D11_KHR:
398  return "XR_TYPE_GRAPHICS_BINDING_D3D11_KHR";
399  case XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR:
400  return "XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR";
401  case XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR:
402  return "XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR";
403  case XR_TYPE_GRAPHICS_BINDING_D3D12_KHR:
404  return "XR_TYPE_GRAPHICS_BINDING_D3D12_KHR";
405  case XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR:
406  return "XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR";
407  case XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR:
408  return "XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR";
409  case XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT:
410  return "XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT";
411  case XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT:
412  return "XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT";
413  case XR_TYPE_VISIBILITY_MASK_KHR:
414  return "XR_TYPE_VISIBILITY_MASK_KHR";
415  case XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR:
416  return "XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR";
417  case XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX:
418  return "XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX";
419  case XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX:
420  return "XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX";
421  case XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR:
422  return "XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR";
423  case XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT:
424  return "XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT";
425  case XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT:
426  return "XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT";
427  case XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT:
428  return "XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT";
429  case XR_TYPE_GRAPHICS_BINDING_EGL_MNDX:
430  return "XR_TYPE_GRAPHICS_BINDING_EGL_MNDX";
431  case XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT:
432  return "XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT";
433  case XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT:
434  return "XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT";
435  case XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT:
436  return "XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT";
437  case XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT:
438  return "XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT";
439  case XR_TYPE_HAND_JOINT_LOCATIONS_EXT:
440  return "XR_TYPE_HAND_JOINT_LOCATIONS_EXT";
441  case XR_TYPE_HAND_JOINT_VELOCITIES_EXT:
442  return "XR_TYPE_HAND_JOINT_VELOCITIES_EXT";
443  case XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT:
444  return "XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT";
445  case XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT:
446  return "XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT";
447  case XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT:
448  return "XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT";
449  case XR_TYPE_HAND_MESH_MSFT:
450  return "XR_TYPE_HAND_MESH_MSFT";
451  case XR_TYPE_HAND_POSE_TYPE_INFO_MSFT:
452  return "XR_TYPE_HAND_POSE_TYPE_INFO_MSFT";
453  case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT:
454  return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT";
455  case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT:
456  return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT";
457  case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT:
458  return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT";
459  case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT:
460  return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT";
461  case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT:
462  return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT";
463  case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT:
464  return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT";
465  case XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT:
466  return "XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT";
467  case XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT:
468  return "XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT";
469  case XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT:
470  return "XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT";
471  case XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT:
472  return "XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT";
473  case XR_TYPE_CONTROLLER_MODEL_STATE_MSFT:
474  return "XR_TYPE_CONTROLLER_MODEL_STATE_MSFT";
475  case XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC:
476  return "XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC";
477  case XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT:
478  return "XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT";
479  case XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB:
480  return "XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB";
481  case XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE:
482  return "XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE";
483  case XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR:
484  return "XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR";
485  case XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR:
486  return "XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR";
487  case XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR:
488  return "XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR";
489  case XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR:
490  return "XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR";
491  case XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR:
492  return "XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR";
493  case XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB:
494  return "XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB";
495  case XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB:
496  return "XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB";
497  case XR_TYPE_BINDING_MODIFICATIONS_KHR:
498  return "XR_TYPE_BINDING_MODIFICATIONS_KHR";
499  default:
500  return "UNRECOGNIZED_XR_TYPE";
501  }
502 }
503 
504 VTK_ABI_NAMESPACE_END
505 #endif
506 // VTK-HeaderTest-Exclude: vtkOpenXRUtilities.h
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:40
void DeepCopy(const vtkMatrix4x4 *source)
Set the elements of the matrix to the same values as the elements of the given source matrix.
Definition: vtkMatrix4x4.h:57
double * GetData()
Returns the raw double array holding the matrix.
Definition: vtkMatrix4x4.h:225
static void Transpose(const vtkMatrix4x4 *in, vtkMatrix4x4 *out)
Transpose the matrix and put it into out.
Definition: vtkMatrix4x4.h:128
abstract base class for most VTK objects
Definition: vtkObject.h:61
virtual void Modified()
Update the modification time for this object.
Header file that contains utility functions for OpenXR.
static void CreateFromQuaternion(double result[16], const XrQuaternionf &quat)
Given a quaternion, return elements of equivalent matrix as an array.
static vtkOpenXRUtilities * New()
static void SetMatrixFromXrPose(vtkMatrix4x4 *result, const XrPosef &xrPose)
Given an XR pose (orientation quaternion + position vector), set the provided matrix from it.
vtkOpenXRUtilities()=default
static const char * GetActionTypeAsString(const XrActionType &actionType)
Return string representation of given XrActionType.
static const char * GetStructureTypeAsString(const XrStructureType &structureType)
Return string representation of given XrStructureType.
static const char * GetViewConfigurationTypeAsString(const XrViewConfigurationType &viewConfigType)
Return string representation of given XrViewConfigurationType.
static void CreateProjectionFov(vtkMatrix4x4 *result, XrFovf fov, float nearZ, float farZ)
Given a field of view (left, right, up, down angles) and near/far clipping builds,...
~vtkOpenXRUtilities() override=default
static const XrPosef & GetIdentityPose()
Defines the OpenXR types and extensions common to all platforms.