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