8#include <QtQuick3D/private/qquick3dnode_p_p.h>
10#include <QtQuick3DUtils/private/qssgassert_p.h>
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
33QQuick3DXrOrigin::QQuick3DXrOrigin(QQuick3DNode *parent)
34 : QQuick3DNode(parent)
37 QQuick3DXrEyeCamera *leftEyeCamera =
new QQuick3DXrEyeCamera(
this);
38 leftEyeCamera->setParentItem(
this);
40 QQuick3DXrEyeCamera *rightEyeCamera =
new QQuick3DXrEyeCamera(
this);
41 rightEyeCamera->setParentItem(
this);
43 m_eyeCameras = { leftEyeCamera, rightEyeCamera };
46QQuick3DXrOrigin::~QQuick3DXrOrigin()
52
53
54
55
56
57
58
59
60
61
62
63
65QQuick3DXrCamera *QQuick3DXrOrigin::camera()
const
70void QQuick3DXrOrigin::setCamera(QQuick3DXrCamera *newCamera)
72 if (m_camera == newCamera)
75 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DXrOrigin::setCamera, m_camera, newCamera);
81 QQuick3DObject *camParentItem = m_camera->parentItem();
82 if (camParentItem !=
this) {
83 m_camera->setParentItem(
this);
84 if (camParentItem !=
nullptr)
85 qWarning() <<
"XrCamera needs to be a child of XrOrigin. Reparenting...";
93 resetCameraSettings();
99QQuick3DXrEyeCamera *QQuick3DXrOrigin::eyeCamera(
int index)
const
101 return m_eyeCameras[index];
104void QQuick3DXrOrigin::syncCameraSettings()
106 QSSG_ASSERT(m_camera !=
nullptr,
return);
108 for (
auto eyeCamera : m_eyeCameras) {
109 eyeCamera->setClipNear(m_camera->clipNear());
110 eyeCamera->setClipFar(m_camera->clipFar());
114void QQuick3DXrOrigin::resetCameraSettings()
118 if (QQuick3DXrView *xrView = qobject_cast<QQuick3DXrView *>(parentItem())) {
120 float nearClip, farClip;
121 xrView->xrManager()->getDefaultClipDistances(nearClip, farClip);
122 for (
auto eyeCamera : m_eyeCameras) {
123 eyeCamera->setClipNear(nearClip);
124 eyeCamera->setClipFar(farClip);
129void QQuick3DXrOrigin::updateTrackedCamera(
const QMatrix4x4 &transform)
132 QQuick3DNodePrivate::get(m_camera)->setLocalTransform(transform);
135void QQuick3DXrOrigin::updateTrackedCamera(QVector3D position, QQuaternion rotation)
138 m_camera->setPosition(position);
139 m_camera->setRotation(rotation);