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