diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-11-06 13:33:45 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2016-01-21 10:57:01 +0000 |
commit | c71faa27e6173255356df2e34050b8af15e4585b (patch) | |
tree | 424b9eea279f4403184998e49758651da134a532 /examples | |
parent | 5d921dda57bff431487e6f1d64ef5111d464655d (diff) |
Updated picking-qml example
handle device pixel ratio and none full-window Scene3D
Change-Id: Iadc504a00816d9363847bf9ec1e09d4b7c631666
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'examples')
-rw-r--r-- | examples/qt3d/picking-qml/PickableEntity.qml | 85 | ||||
-rw-r--r-- | examples/qt3d/picking-qml/main.qml | 284 | ||||
-rw-r--r-- | examples/qt3d/picking-qml/picking-qml.qrc | 1 |
3 files changed, 261 insertions, 109 deletions
diff --git a/examples/qt3d/picking-qml/PickableEntity.qml b/examples/qt3d/picking-qml/PickableEntity.qml new file mode 100644 index 000000000..f9f7f7e9e --- /dev/null +++ b/examples/qt3d/picking-qml/PickableEntity.qml @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt3D.Core 2.0 +import Qt3D.Render 2.0 + +Entity { + id: root + signal pressed(var event) + signal clicked(var event) + signal released(var event) + signal entered() + signal exited() + + property real x: 0 + property real y: 0 + property real z: 0 + property alias scale: transform.scale + property alias hoverEnabled: objectPicker.hoverEnabled + property alias recursive: debugVolume.recursive + property alias diffuseColor: material.diffuse + property alias ambientColor: material.ambient + readonly property bool containsMouse: objectPicker.containsMouse + readonly property bool isPressed: objectPicker.pressed + + property GeometryRenderer mesh; + + ObjectPicker { + id: objectPicker + onClicked: root.clicked(event) + onPressed: root.pressed(event) + onReleased: root.released(event) + onEntered: root.entered() + onExited: root.exited(); + } + + BoundingVolumeDebug { id: debugVolume } + PhongMaterial { id: material } + + Transform { + id: transform + translation: Qt.vector3d(x, y, z) + } + + Layer { + id: layer + names: "content" + } + + components: [mesh, material, transform, debugVolume, objectPicker, layer] +} + diff --git a/examples/qt3d/picking-qml/main.qml b/examples/qt3d/picking-qml/main.qml index 2c9e7a955..8b7111b4d 100644 --- a/examples/qt3d/picking-qml/main.qml +++ b/examples/qt3d/picking-qml/main.qml @@ -37,117 +37,183 @@ import Qt3D.Core 2.0 import Qt3D.Render 2.0 import Qt3D.Input 2.0 -import QtQuick 2.0 as QQ2 - -Entity { - id: sceneRoot - - Camera { - id: camera - projectionType: CameraLens.PerspectiveProjection - fieldOfView: 45 - aspectRatio: _view.width / _view.height - nearPlane : 0.1 - farPlane : 1000.0 - position: Qt.vector3d( 0.0, 0.0, 40.0 ) - upVector: Qt.vector3d( 0.0, 1.0, 0.0 ) - viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 ) - } - - FirstPersonCameraController { camera: camera } - - components: FrameGraph { - ForwardRenderer { - camera: camera - clearColor: "black" - } - } - - SphereMesh { - id: sphereMesh - } - - Entity { - id: sphere1 - - property real scaleFactor: objectPicker.pressed ? 3.0 : 1.0 - QQ2.Behavior on scaleFactor { QQ2.NumberAnimation { duration: 150; easing.type: QQ2.Easing.InQuad } } - - property Transform transform: Transform { - scale: sphere1.scaleFactor - translation: Qt.vector3d(-8, 0, 0) - } - - property Material material: PhongMaterial { - ambient: "green" - diffuse: "green" - } - - property ObjectPicker objectPicker: ObjectPicker { - hoverEnabled: true - - onPressed: sphere1.material.diffuse = "orange" - onReleased: sphere1.material.diffuse = "green" - - onEntered: sphere1.material.ambient = "blue" - onExited: sphere1.material.ambient = "green" - - onClicked: console.log("Clicked Sphere 1") - } - - components: [sphereMesh, material, transform, objectPicker] - } - Entity { - id: sphere2 - - property Material material: PhongMaterial { - ambient: sphere2.objectPicker.containsMouse ? "blue" : "red" - } - - property Transform transform: Transform { - scale: 1.5 - } - - property ObjectPicker objectPicker: ObjectPicker { - hoverEnabled: true - - onPressed: sphere2.material.diffuse = "white" - onReleased: sphere2.material.diffuse = "red" - - onClicked: console.log("Clicked Sphere 2") - } - - components: [sphereMesh, material, transform, objectPicker] - } - - Entity { - id: sphere3 - - property Material material: PhongMaterial { - diffuse: "yellow" - } - - property bool toggled: false - property real scaleFactor: toggled ? 5.0 : 0.5 - QQ2.Behavior on scaleFactor { QQ2.NumberAnimation { duration: 200; easing.type: QQ2.Easing.InQuad } } - - property Transform transform: Transform { - scale: sphere3.scaleFactor - translation: Qt.vector3d(8, 0, 0) - } - - property ObjectPicker objectPicker: ObjectPicker { - hoverEnabled: false - - onPressed: sphere3.toggled = !sphere3.toggled - - onEntered: sphere3.material.ambient = "black" - onExited: sphere3.material.ambient = "white" - - onClicked: console.log("Clicked Sphere 3") +import QtQuick 2.0 as QQ2 +import QtQuick.Window 2.2 as W +import QtQuick.Scene3D 2.0 + +W.Window +{ + id: _view + visible: true + width: 1024 + height: 768 + + Scene3D { +// anchors.fill: parent + id: sceneItem + x: parent.width / 2 - width / 2 + y: parent.height / 2 - height / 2 + width: parent.width / 2 + height: parent.height / 2 + focus: true + aspects: "input" + + Entity { + id: sceneRoot + + Camera { + id: camera + projectionType: CameraLens.PerspectiveProjection + fieldOfView: 45 + aspectRatio: _view.width * 0.5 / _view.height + nearPlane : 0.1 + farPlane : 1000.0 + position: Qt.vector3d( 0.0, 0.0, -40.0 ) + upVector: Qt.vector3d( 0.0, 1.0, 0.0 ) + viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 ) + } + + Camera { + id: camera2 + projectionType: CameraLens.PerspectiveProjection + fieldOfView: 45 + aspectRatio: _view.width * 0.5 / _view.height + nearPlane : 0.1 + farPlane : 1000.0 + position: Qt.vector3d( 40.0, 5.0, -20.0 ) + upVector: Qt.vector3d( 0.0, 1.0, 0.0 ) + viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 ) + } + + FirstPersonCameraController { + camera: camera + } + + // Draw 2 viewports + // one with the content, the other with content + debug volumes + components: FrameGraph { + Viewport { + ClearBuffer { + buffers : ClearBuffer.ColorDepthBuffer + NoDraw {} + } + Viewport { + rect: Qt.rect(0.0, 0.0, 0.5, 1.0) + CameraSelector { + camera: camera + LayerFilter { layers: "content"} + } + } + Viewport { + rect: Qt.rect(0.5, 0.0, 0.5, 1.0) + CameraSelector { + camera: camera2 + LayerFilter { + // To show Debug volumes + layers: ["content", "debug"] + } + } + } + } + } + + CuboidMesh { id: cubeMesh } + + PickableEntity { + id: cube1 + property real scaleFactor: isPressed ? 3.0 : 1.0 + QQ2.Behavior on scaleFactor { QQ2.NumberAnimation { duration: 150; easing.type: QQ2.Easing.InQuad } } + + mesh: cubeMesh + scale: cube1.scaleFactor + x: -8 + + ambientColor: "green" + diffuseColor: "green" + + hoverEnabled: true + onPressed: cube1.diffuseColor = "orange" + onReleased: cube1.diffuseColor = "green" + onEntered: cube1.ambientColor = "blue" + onExited: cube1.ambientColor = "green" + onClicked: console.log("Clicked cube 1") + } + + PickableEntity { + id: cube2 + mesh: cubeMesh + + ambientColor: cube2.containsMouse ? "blue" : "red" + scale: 1.5 + hoverEnabled: true + + onPressed: cube2.diffuseColor = "white" + onReleased: cube2.diffuseColor = "red" + + property bool toggled: false + onClicked: { + console.log("Clicked cube 2") + toggled = !toggled + sceneItem.width = _view.width * (toggled ? .7 : .5) + sceneItem.height = _view.height * (toggled ? .7 : .5) + console.log(sceneItem.width, sceneItem.height) + } + } + PickableEntity { + id: cube3 + mesh: cubeMesh + + diffuseColor: "yellow" + + property bool toggled: false + property real scaleFactor: toggled ? 5.0 : 0.5 + QQ2.Behavior on scaleFactor { QQ2.NumberAnimation { duration: 200; easing.type: QQ2.Easing.InQuad } } + + scale: cube3.scaleFactor + x: 8 + + onPressed: cube3.toggled = !cube3.toggled + onEntered: cube3.ambientColor = "black" + onExited: cube3.ambientColor = "white" + onClicked: console.log("Clicked cube 3") + } + + Entity { + readonly property ObjectPicker objectPicker: ObjectPicker { + hoverEnabled: true + onPressed: cube4.toggled = !cube4.toggled + onClicked: console.log("Clicked cube 4's parent Entity") + onEntered: cube4.material.diffuse = "white" + onExited: cube4.material.diffuse = "blue" + } + + readonly property BoundingVolumeDebug debugVolume: BoundingVolumeDebug { + recursive: true + } + + components: [objectPicker, debugVolume] + + Entity { + id: cube4 + property bool toggled: false + property real scaleFactor: toggled ? 2.0 : 1.0 + QQ2.Behavior on scaleFactor { QQ2.NumberAnimation { duration: 200; easing.type: QQ2.Easing.InQuad } } + + readonly property Transform transform: Transform { + scale: cube4.scaleFactor + translation: Qt.vector3d(3, 4, 0) + } + readonly property Layer layer: Layer { names: "content" } + readonly property BoundingVolumeDebug debugVolume: BoundingVolumeDebug {} + readonly property PhongMaterial material: PhongMaterial { diffuse: "red" } + + components: [cubeMesh, transform, material, debugVolume, layer] + } + } } - components: [sphereMesh, material, transform, objectPicker] + QQ2.Behavior on width { QQ2.NumberAnimation { duration: 200 } } + QQ2.Behavior on height { QQ2.NumberAnimation { duration: 200 } } } } diff --git a/examples/qt3d/picking-qml/picking-qml.qrc b/examples/qt3d/picking-qml/picking-qml.qrc index 5f6483ac3..15bdbb178 100644 --- a/examples/qt3d/picking-qml/picking-qml.qrc +++ b/examples/qt3d/picking-qml/picking-qml.qrc @@ -1,5 +1,6 @@ <RCC> <qresource prefix="/"> <file>main.qml</file> + <file>PickableEntity.qml</file> </qresource> </RCC> |