diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-05-29 22:13:56 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-05-29 22:13:56 +0200 |
commit | d1f6d4c8c3c56206c0fd0679012160fd2d5d94cd (patch) | |
tree | 9aff374c0cf3b7c6cfc82390053daef6d20f47bb /modules/openxr/scene/openxr_composition_layer.cpp | |
parent | 76237c5f9bee9895d0913d55a064e95716d86800 (diff) | |
parent | 6a8f2f00ac41d8977b0085203980f889a9644e23 (diff) | |
download | redot-engine-d1f6d4c8c3c56206c0fd0679012160fd2d5d94cd.tar.gz |
Merge pull request #92339 from devloglogan/comp-layer-reference-frame
Apply reference frame transform to `OpenXRCompositionLayer` nodes
Diffstat (limited to 'modules/openxr/scene/openxr_composition_layer.cpp')
-rw-r--r-- | modules/openxr/scene/openxr_composition_layer.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/modules/openxr/scene/openxr_composition_layer.cpp b/modules/openxr/scene/openxr_composition_layer.cpp index b02f3082ab..f69a907be9 100644 --- a/modules/openxr/scene/openxr_composition_layer.cpp +++ b/modules/openxr/scene/openxr_composition_layer.cpp @@ -151,6 +151,16 @@ void OpenXRCompositionLayer::update_fallback_mesh() { should_update_fallback_mesh = true; } +XrPosef OpenXRCompositionLayer::get_openxr_pose() { + Transform3D reference_frame = XRServer::get_singleton()->get_reference_frame(); + Transform3D transform = reference_frame.inverse() * get_transform(); + Quaternion quat(transform.basis.orthonormalized()); + return { + { (float)quat.x, (float)quat.y, (float)quat.z, (float)quat.w }, + { (float)transform.origin.x, (float)transform.origin.y, (float)transform.origin.z } + }; +} + bool OpenXRCompositionLayer::is_viewport_in_use(SubViewport *p_viewport) { for (const OpenXRCompositionLayer *other_composition_layer : composition_layer_nodes) { if (other_composition_layer != this && other_composition_layer->is_inside_tree() && other_composition_layer->get_layer_viewport() == p_viewport) { |