10#include <QtQuick3D/private/qquick3dnode_p_p.h>
12#include <QtQuick3DUtils/private/qssgassert_p.h>
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
35QQuick3DXrOrigin::QQuick3DXrOrigin(QQuick3DNode *parent)
36 : QQuick3DNode(parent)
39 QQuick3DXrEyeCamera *leftEyeCamera =
new QQuick3DXrEyeCamera(
this);
40 leftEyeCamera->setParentItem(
this);
42 QQuick3DXrEyeCamera *rightEyeCamera =
new QQuick3DXrEyeCamera(
this);
43 rightEyeCamera->setParentItem(
this);
45 m_eyeCameras = { leftEyeCamera, rightEyeCamera };
48QQuick3DXrOrigin::~QQuick3DXrOrigin()
54
55
56
57
58
59
60
61
62
63
64
65
67QQuick3DXrCamera *QQuick3DXrOrigin::camera()
const
72void QQuick3DXrOrigin::setCamera(QQuick3DXrCamera *newCamera)
74 if (m_camera == newCamera)
77 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DXrOrigin::setCamera, m_camera, newCamera);
83 QQuick3DObject *camParentItem = m_camera->parentItem();
84 if (camParentItem !=
this) {
85 m_camera->setParentItem(
this);
86 if (camParentItem !=
nullptr)
87 qWarning() <<
"XrCamera needs to be a child of XrOrigin. Reparenting...";
95 resetCameraSettings();
101QQuick3DXrEyeCamera *QQuick3DXrOrigin::eyeCamera(
int index)
const
103 return m_eyeCameras[index];
106void QQuick3DXrOrigin::syncCameraSettings()
108 QSSG_ASSERT(m_camera !=
nullptr,
return);
110 for (
auto eyeCamera : m_eyeCameras) {
111 eyeCamera->setClipNear(m_camera->clipNear());
112 eyeCamera->setClipFar(m_camera->clipFar());
116void QQuick3DXrOrigin::resetCameraSettings()
120 if (QQuick3DXrView *xrView = qobject_cast<QQuick3DXrView *>(parentItem())) {
122 float nearClip, farClip;
123 xrView->xrManager()->getDefaultClipDistances(nearClip, farClip);
124 for (
auto eyeCamera : m_eyeCameras) {
125 eyeCamera->setClipNear(nearClip);
126 eyeCamera->setClipFar(farClip);
131void QQuick3DXrOrigin::updateTrackedCamera(
const QMatrix4x4 &transform)
134 QQuick3DNodePrivate::get(m_camera)->setLocalTransform(transform);
137void QQuick3DXrOrigin::updateTrackedCamera(QVector3D position, QQuaternion rotation)
140 m_camera->setPosition(position);
141 m_camera->setRotation(rotation);
Combined button and popup list for selecting options.