From 939b9b4b7591e8a421cf048a0a84ed3e75d81d21 Mon Sep 17 00:00:00 2001 From: Mike Krus Date: Wed, 25 Jan 2017 08:07:42 +0000 Subject: Add support to move the camera so that the entire model is visible Adds QCamera::viewAll(), QCamera::viewEntity() and QCamera::viewSphere() to move and rotate the camera so that the view center is the center of the sphere and the sphere fits inside the viewport Only works in perspective projection. Introduces a job to compute the bounding sphere of the scene excluding the camera. Change-Id: Id9d67787ea91c354009d5358d5db63a1c9480c70 Reviewed-by: Sean Harmer --- examples/qt3d/controls/Logo.qml | 14 +++++++++++++- examples/qt3d/controls/main.qml | 9 ++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) (limited to 'examples') diff --git a/examples/qt3d/controls/Logo.qml b/examples/qt3d/controls/Logo.qml index a686e29bd..2eb9abd1a 100644 --- a/examples/qt3d/controls/Logo.qml +++ b/examples/qt3d/controls/Logo.qml @@ -56,6 +56,18 @@ import Qt3D.Extras 2.0 Entity { id: sceneRoot + readonly property double cameraZ: camera.position.z + + function viewAll() { + camera.viewAll() + } + function viewLogo() { + camera.viewEntity(logoEntity) + } + function setPositionZ(z) { + camera.position = Qt.vector3d( 0.0, 0.0, z ) + } + Camera { id: camera projectionType: CameraLens.PerspectiveProjection @@ -63,7 +75,7 @@ Entity { aspectRatio: 4/3 nearPlane : 0.1 farPlane : 1000.0 - position: Qt.vector3d( 0.0, 0.0, viewCenter_z.value ) + position: Qt.vector3d( 0.0, 0.0, 7.5 ) upVector: Qt.vector3d( 0.0, 1.0, 0.0 ) viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 ) } diff --git a/examples/qt3d/controls/main.qml b/examples/qt3d/controls/main.qml index 2b438ac20..5d1f9c02c 100644 --- a/examples/qt3d/controls/main.qml +++ b/examples/qt3d/controls/main.qml @@ -178,13 +178,20 @@ Item { spacing: 5 Text { text: "Camera"; font.bold: true } - Text { text: "View Center Z" } + Text { text: "View Ctr Z: " + watch.cameraZ.toFixed(2) } Slider { id: viewCenter_z Layout.fillWidth: true minimumValue: 4 maximumValue: 12 value: 7.5 + onValueChanged: watch.setPositionZ(value) + } + Button { + id: viewAll + Layout.fillWidth: true + text: "View All" + onClicked: watch.viewLogo() } } -- cgit v1.2.3