diff options
Diffstat (limited to 'examples/qt3d/picking-qml/main.qml')
-rw-r--r-- | examples/qt3d/picking-qml/main.qml | 284 |
1 files changed, 175 insertions, 109 deletions
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 } } } } |