summaryrefslogtreecommitdiffstats
path: root/examples/qt3d/qardboard
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2018-01-24 15:09:45 +0100
committerPaul Lemire <paul.lemire@kdab.com>2018-01-24 15:02:57 +0000
commit1d449ab5027abe297b01aa5f276d21dcb57af94c (patch)
tree2e22f8f9300ccc2ff9c95c1b6f20cff9e1f6f7d6 /examples/qt3d/qardboard
parent42a8d30929a3dd3bd81c12a1b5ba289b1c3897bb (diff)
qardboard: Fix QardboardCamera following viewMatrix changes
Bonus: also remove the binding loop on the matrix property that was being reported. Change-Id: I2489a1f7ac5f65b4061ce069796d5afeab1811de Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'examples/qt3d/qardboard')
-rw-r--r--examples/qt3d/qardboard/QardboardCamera.qml48
-rw-r--r--examples/qt3d/qardboard/QardboardRootEntity.qml25
2 files changed, 30 insertions, 43 deletions
diff --git a/examples/qt3d/qardboard/QardboardCamera.qml b/examples/qt3d/qardboard/QardboardCamera.qml
index 1912b8a22..4832aeadc 100644
--- a/examples/qt3d/qardboard/QardboardCamera.qml
+++ b/examples/qt3d/qardboard/QardboardCamera.qml
@@ -50,6 +50,7 @@
import Qt3D.Core 2.0
import Qt3D.Render 2.0
+import Qardboard 1.0
Entity {
id: root
@@ -63,12 +64,17 @@ Entity {
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: leftEyeTransform.matrix
+ 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
@@ -92,33 +98,39 @@ Entity {
}
Transform {
- id: leftEyeTransform
+ 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)
- matrix: {
var m = Qt.matrix4x4();
- m.lookAt(root.position, root.position + root.viewDirection, root.viewUp);
- return m;
+ 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);
}
- }
- Transform {
- id: rightEyeTransform
-
- matrix: leftEyeTransform.matrix
+ matrix: computeMatrix(orientation.roll, orientation.pitch, orientation.yaw)
}
+ components: [ eyeTransform ]
+
property Entity leftCamera: Entity {
- components: [
- leftEyeLens,
- leftEyeTransform
- ]
+ components: [ leftEyeLens ]
}
property Entity rightCamera: Entity {
id: rightCameraEntity
- components: [
- rightEyeLens,
- rightEyeTransform
- ]
+ components: [ rightEyeLens ]
}
}
diff --git a/examples/qt3d/qardboard/QardboardRootEntity.qml b/examples/qt3d/qardboard/QardboardRootEntity.qml
index 85e4fbc7e..004ebadc5 100644
--- a/examples/qt3d/qardboard/QardboardRootEntity.qml
+++ b/examples/qt3d/qardboard/QardboardRootEntity.qml
@@ -51,7 +51,6 @@
import Qt3D.Core 2.0
import Qt3D.Render 2.0
import Qt3D.Input 2.0
-import Qardboard 1.0
Entity {
id: root
@@ -75,31 +74,7 @@ Entity {
}
]
- DeviceOrientation {
- id: orientation
- enabled: true
- }
-
QardboardCamera {
id: stereoCamera
- viewMatrix: computeMatrix(orientation.roll, orientation.pitch, orientation.yaw)
-
- property vector3d vc
- property vector3d vd
- property vector3d vu
-
- function computeMatrix(roll, pitch, yaw) {
- var m = Qt.matrix4x4()
- m.rotate(-roll, Qt.vector3d(1, 0, 0))
- m.rotate(yaw, Qt.vector3d(0, 1, 0))
- vd = m.times(stereoCamera.viewDirection)
- vu = m.times(stereoCamera.viewUp)
- var r = Qt.matrix4x4()
- vc = stereoCamera.position.minus(vd)
- r.lookAt(stereoCamera.position, vc, vu)
-// console.log(roll.toFixed(2), pitch.toFixed(2), yaw.toFixed(2), stereoCamera.position, vd, vc, vu)
-// console.log(r)
- return r
- }
}
}