From 1dc0ddf0534180b94c56084117c78232350223b0 Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Wed, 24 Jan 2018 14:22:15 +0100 Subject: multiviewport: Adapt SimpleCamera to viewMatrix changes Change-Id: I3e276e8cd7d754905ed41a80ace19b72eb50175f Reviewed-by: Mike Krus --- examples/qt3d/multiviewport/SimpleCamera.qml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'examples/qt3d') diff --git a/examples/qt3d/multiviewport/SimpleCamera.qml b/examples/qt3d/multiviewport/SimpleCamera.qml index e1cb95426..20741ae20 100644 --- a/examples/qt3d/multiviewport/SimpleCamera.qml +++ b/examples/qt3d/multiviewport/SimpleCamera.qml @@ -65,8 +65,15 @@ Entity { id: transform matrix: { var m = Qt.matrix4x4(); - m.lookAt(root.position, root.viewCenter, root.upVector); - return m; + m.translate(root.position) + var zAxis = root.position.minus(root.viewCenter).normalized() + var xAxis = root.upVector.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); } } } -- cgit v1.2.3 From 42a8d30929a3dd3bd81c12a1b5ba289b1c3897bb Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Wed, 24 Jan 2018 15:09:27 +0100 Subject: anaglyph-rendering: Fix StereoCamera following viewMatrix changes Change-Id: I42d0091368914e0f3f8cb76c707d576227d7b5f2 Reviewed-by: Mike Krus --- examples/qt3d/anaglyph-rendering/StereoCamera.qml | 24 +++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'examples/qt3d') diff --git a/examples/qt3d/anaglyph-rendering/StereoCamera.qml b/examples/qt3d/anaglyph-rendering/StereoCamera.qml index c8db4c0a9..ea013c0b0 100644 --- a/examples/qt3d/anaglyph-rendering/StereoCamera.qml +++ b/examples/qt3d/anaglyph-rendering/StereoCamera.qml @@ -62,6 +62,7 @@ Entity { property vector3d viewCenter: Qt.vector3d(0.0, 0.0, 0.0) property vector3d position: Qt.vector3d(0.0, 0.0, 1.0) + property vector3d upVector: Qt.vector3d(0.0, 1.0, 0.0) readonly property real _fov2: Math.tan(fieldOfView * Math.PI / 180 * 0.5) readonly property real top: nearPlane * _fov2 @@ -94,23 +95,26 @@ Entity { matrix: { var m = Qt.matrix4x4(); - m.lookAt(root.position, root.viewCenter, Qt.vector3d(0.0, 1.0, 0.0)); - return m; + m.translate(root.position) + var zAxis = root.position.minus(root.viewCenter).normalized() + var xAxis = root.upVector.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); } } + components: [ eyeTransform ] + property Entity leftCamera: Entity { - components: [ - leftEyeLens, - eyeTransform - ] + components: [ leftEyeLens ] } property Entity rightCamera: Entity { id: rightCameraEntity - components: [ - rightEyeLens, - eyeTransform - ] + components: [ rightEyeLens ] } } -- cgit v1.2.3 From 1d449ab5027abe297b01aa5f276d21dcb57af94c Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Wed, 24 Jan 2018 15:09:45 +0100 Subject: 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 --- examples/qt3d/qardboard/QardboardCamera.qml | 48 +++++++++++++++---------- examples/qt3d/qardboard/QardboardRootEntity.qml | 25 ------------- 2 files changed, 30 insertions(+), 43 deletions(-) (limited to 'examples/qt3d') 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 - } } } -- cgit v1.2.3