VTK  9.2.5
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{
34public:
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
86protected:
87 vtkOpenXRUtilities() = default;
88 ~vtkOpenXRUtilities() override = default;
89
90private:
92 void operator=(const vtkOpenXRUtilities&) = delete;
93};
94
95//----------------------------------------------------------------------------
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
176inline 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
216inline 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//----------------------------------------------------------------------------
233inline 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
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:42
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 Transpose(const vtkMatrix4x4 *in, vtkMatrix4x4 *out)
Transpose the matrix and put it into out.
Definition: vtkMatrix4x4.h:130
abstract base class for most VTK objects
Definition: vtkObject.h:63
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 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 vtkOpenXRUtilities * New()
~vtkOpenXRUtilities() override=default
static const XrPosef & GetIdentityPose()
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,...