summaryrefslogtreecommitdiffstats
path: root/tests/manual/qardboard/QardboardCamera.qml
diff options
context:
space:
mode:
Diffstat (limited to 'tests/manual/qardboard/QardboardCamera.qml')
-rw-r--r--tests/manual/qardboard/QardboardCamera.qml89
1 files changed, 89 insertions, 0 deletions
diff --git a/tests/manual/qardboard/QardboardCamera.qml b/tests/manual/qardboard/QardboardCamera.qml
new file mode 100644
index 000000000..f20a18078
--- /dev/null
+++ b/tests/manual/qardboard/QardboardCamera.qml
@@ -0,0 +1,89 @@
+// Copyright (C) 2017 Klaralvdalens Datakonsult AB (KDAB).
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import Qt3D.Core 2.0
+import Qt3D.Render 2.0
+import Qardboard 1.0
+
+Entity {
+ id: root
+ property real convergence: 2000.0
+ property real eyeSeparation: 35.0
+ property real aspectRatio: _window.width / _window.height
+ property real fieldOfView: 60.0
+ property real nearPlane: 1.
+ property real farPlane: 1000.0
+
+ property vector3d position: Qt.vector3d(0.0, 0.0, 0.0)
+ property vector3d viewDirection: Qt.vector3d(0.0, 0.0, 1.0)
+ property vector3d viewUp: Qt.vector3d(0.0, 1.0, 0.0)
+ property alias viewMatrix: eyeTransform.matrix
+
+ readonly property real _fov2: Math.tan(fieldOfView * Math.PI / 180 * 0.5)
+ readonly property real top: nearPlane * _fov2
+ readonly property real a: aspectRatio * _fov2 * convergence
+
+ DeviceOrientation {
+ id: orientation
+ enabled: true
+ }
+
+ CameraLens {
+ id: leftEyeLens
+ projectionType: CameraLens.FrustumProjection
+ nearPlane : root.nearPlane
+ farPlane : root.farPlane
+ left: -(a - eyeSeparation * 0.5) * nearPlane / convergence
+ right: (a + eyeSeparation * 0.5) * nearPlane / convergence
+ top: root.top
+ bottom: -root.top
+ }
+
+ CameraLens {
+ id: rightEyeLens
+ projectionType: CameraLens.FrustumProjection
+ nearPlane : root.nearPlane
+ farPlane : root.farPlane
+ left: -(a + eyeSeparation * 0.5) * nearPlane / convergence
+ right: (a - eyeSeparation * 0.5) * nearPlane / convergence
+ top: root.top
+ bottom: -root.top
+ }
+
+ Transform {
+ id: eyeTransform
+
+ function computeMatrix(roll, pitch, yaw) {
+ var n = Qt.matrix4x4()
+ n.rotate(-roll, Qt.vector3d(1, 0, 0))
+ n.rotate(yaw, Qt.vector3d(0, 1, 0))
+ var vd = n.times(stereoCamera.viewDirection)
+ var vu = n.times(stereoCamera.viewUp)
+ var vc = stereoCamera.position.minus(vd)
+
+ var m = Qt.matrix4x4();
+ m.translate(stereoCamera.position)
+ var zAxis = stereoCamera.position.minus(vc).normalized()
+ var xAxis = vu.crossProduct(zAxis).normalized();
+ var yAxis = zAxis.crossProduct(xAxis);
+ var r = Qt.matrix4x4(xAxis.x, yAxis.x, zAxis.x, 0,
+ xAxis.y, yAxis.y, zAxis.y, 0,
+ xAxis.z, yAxis.z, zAxis.z, 0,
+ 0, 0, 0, 1)
+ return m.times(r);
+ }
+
+ matrix: computeMatrix(orientation.roll, orientation.pitch, orientation.yaw)
+ }
+
+ components: [ eyeTransform ]
+
+ property Entity leftCamera: Entity {
+ components: [ leftEyeLens ]
+ }
+
+ property Entity rightCamera: Entity {
+ id: rightCameraEntity
+ components: [ rightEyeLens ]
+ }
+}