diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2016-08-30 14:42:46 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-11-22 14:19:19 +0000 |
commit | ab0cd65b7e1ea3b96804bf759a9a5fb0b95061bf (patch) | |
tree | c3fcdcfd1e43ee722d9f0e31db0fa22d1538f08a /tests/manual/additional-attributes-qml | |
parent | 8a6e3a9ab639804e2ca378d09744aed17692af29 (diff) |
Add manual test for additional attributes
Change-Id: I2a43d51d0f890b2da98415f5612f5cbdb4b1df22
Task-number: QTBUG-54869
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'tests/manual/additional-attributes-qml')
5 files changed, 570 insertions, 0 deletions
diff --git a/tests/manual/additional-attributes-qml/CameraController.qml b/tests/manual/additional-attributes-qml/CameraController.qml new file mode 100644 index 000000000..69eff70ed --- /dev/null +++ b/tests/manual/additional-attributes-qml/CameraController.qml @@ -0,0 +1,297 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Paul Lemire <paul.lemire350@gmail.com> +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt3D.Core 2.0 +import Qt3D.Render 2.0 +import Qt3D.Input 2.0 +import Qt3D.Logic 2.0 +import QtQml 2.2 + +Entity { + id: root + property Camera camera + property real linearSpeed: 10.0 + property real orbitSpeed: -180.0 + property real lookSpeed: 180.0 + property bool firstPersonMode: true + + QtObject { + id: d + readonly property vector3d firstPersonUp: Qt.vector3d(0, 1, 0) + property bool leftMouseButtonPressed: false + property bool rightMouseButtonPressed: false + property real vx: 0; + property real vy: 0; + property real vz: 0; + property real dx: 0 + property real dy: 0 + property bool fineMotion: false + } + + KeyboardDevice { + id: keyboardSourceDevice + } + + MouseDevice { + id: mouseSourceDevice + sensitivity: d.fineMotion ? 0.01 : 0.1 + } + + LogicalDevice { + id: cameraControlDevice + + actions: [ + Action { + name: "LMB" + inputs: [ + ActionInput { + sourceDevice: mouseSourceDevice + buttons: [MouseEvent.LeftButton] + } + ] + }, + Action { + name: "RMB" + inputs: [ + ActionInput { + sourceDevice: mouseSourceDevice + buttons: [MouseEvent.RightButton] + } + ] + }, + Action { + name: "fineMotion" + inputs: [ + ActionInput { + sourceDevice: keyboardSourceDevice + buttons: [Qt.Key_Shift] + } + ] + } + + ] // actions + + axes: [ + // Rotation + Axis { + name: "RX" + inputs: [ + AnalogAxisInput { + sourceDevice: mouseSourceDevice + axis: MouseDevice.X + } + ] + }, + Axis { + name: "RY" + inputs: [ + AnalogAxisInput { + sourceDevice: mouseSourceDevice + axis: MouseDevice.Y + } + ] + }, + // Translation + Axis { + name: "TX" + inputs: [ + ButtonAxisInput { + sourceDevice: keyboardSourceDevice + buttons: [Qt.Key_Left] + scale: -1.0 + }, + ButtonAxisInput { + sourceDevice: keyboardSourceDevice + buttons: [Qt.Key_Right] + scale: 1.0 + } + ] + }, + Axis { + name: "TZ" + inputs: [ + ButtonAxisInput { + sourceDevice: keyboardSourceDevice + buttons: [Qt.Key_Up] + scale: 1.0 + }, + ButtonAxisInput { + sourceDevice: keyboardSourceDevice + buttons: [Qt.Key_Down] + scale: -1.0 + } + ] + }, + Axis { + name: "TY" + inputs: [ + ButtonAxisInput { + sourceDevice: keyboardSourceDevice + buttons: [Qt.Key_PageUp] + scale: 1.0 + }, + ButtonAxisInput { + sourceDevice: keyboardSourceDevice + buttons: [Qt.Key_PageDown] + scale: -1.0 + } + ] + } + ] // axes + } + + components: [ + AxisActionHandler { + id: handler + logicalDevice: cameraControlDevice + + onAxisValueChanged: { + + switch (name) { + + case "TX": { + d.vx = axisValue * linearSpeed + break; + } + + case "TY": { + d.vy = axisValue * linearSpeed + break; + } + + case "TZ": { + d.vz = axisValue * linearSpeed + break; + } + + case "RX": { + d.dx = axisValue; + break; + } + + case "RY": { + d.dy = axisValue; + break; + } + + } + } + + onActionStarted: { + + switch (name) { + + case "LMB": { + d.leftMouseButtonPressed = true; + break; + } + + case "RMB": { + d.rightMouseButtonPressed = true; + break; + } + + case "fineMotion": { + console.log("fineMotion started") + d.fineMotion = true; + break; + } + + } + + } + + onActionFinished: { + + switch (name) { + + case "LMB": { + d.leftMouseButtonPressed = false; + break; + } + + case "RMB": { + d.rightMouseButtonPressed = false; + break; + } + + case "fineMotion": { + console.log("fineMotion finished") + d.fineMotion = false; + break; + } + + } + } + }, + + FrameAction { + onTriggered: { + // The time difference since the last frame is passed in as the + // argument dt. It is a floating point value in units of seconds. + root.camera.translate(Qt.vector3d(d.vx, d.vy, d.vz).times(dt)) + + if (d.leftMouseButtonPressed) { + if (root.firstPersonMode) + root.camera.pan(root.lookSpeed * d.dx * dt, d.firstPersonUp) + else + root.camera.pan(root.lookSpeed * d.dx * dt) + root.camera.tilt(root.lookSpeed * d.dy * dt) + } else if (d.rightMouseButtonPressed) { + if (root.firstPersonMode) + root.camera.panAboutViewCenter(root.lookSpeed * d.dx * dt, d.firstPersonUp) + else + root.camera.panAboutViewCenter(root.lookSpeed * d.dx * dt) + root.camera.tiltAboutViewCenter(root.orbitSpeed * d.dy * dt) + } + } + } + ] // components +} diff --git a/tests/manual/additional-attributes-qml/additional-attributes-qml.pro b/tests/manual/additional-attributes-qml/additional-attributes-qml.pro new file mode 100644 index 000000000..f7612bf99 --- /dev/null +++ b/tests/manual/additional-attributes-qml/additional-attributes-qml.pro @@ -0,0 +1,14 @@ +!include( ../manual.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +QT += 3dcore 3drender 3dinput 3dquick 3dlogic qml quick 3dquickextras + +SOURCES += \ + main.cpp + +OTHER_FILES += \ + main.qml + +RESOURCES += \ + additional-attributes-qml.qrc diff --git a/tests/manual/additional-attributes-qml/additional-attributes-qml.qrc b/tests/manual/additional-attributes-qml/additional-attributes-qml.qrc new file mode 100644 index 000000000..9d95d9835 --- /dev/null +++ b/tests/manual/additional-attributes-qml/additional-attributes-qml.qrc @@ -0,0 +1,6 @@ +<RCC> + <qresource prefix="/"> + <file>main.qml</file> + <file>CameraController.qml</file> + </qresource> +</RCC> diff --git a/tests/manual/additional-attributes-qml/main.cpp b/tests/manual/additional-attributes-qml/main.cpp new file mode 100644 index 000000000..32ae912df --- /dev/null +++ b/tests/manual/additional-attributes-qml/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <Qt3DQuickExtras/qt3dquickwindow.h> +#include <QGuiApplication> + +int main(int argc, char* argv[]) +{ + QGuiApplication app(argc, argv); + Qt3DExtras::Quick::Qt3DQuickWindow view; + view.setSource(QUrl("qrc:/main.qml")); + view.show(); + + return app.exec(); +} diff --git a/tests/manual/additional-attributes-qml/main.qml b/tests/manual/additional-attributes-qml/main.qml new file mode 100644 index 000000000..75c010a9d --- /dev/null +++ b/tests/manual/additional-attributes-qml/main.qml @@ -0,0 +1,191 @@ +/**************************************************************************** +** +** Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB). +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.2 as QQ2 +import Qt3D.Core 2.0 +import Qt3D.Render 2.0 +import Qt3D.Input 2.0 +import Qt3D.Extras 2.0 + +Entity { + id: sceneRoot + + Camera { + id: camera + projectionType: CameraLens.PerspectiveProjection + fieldOfView: 45 + aspectRatio: 16/9 + 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 ) + } + + OrbitCameraController { + camera: camera + } + + components: [ + RenderSettings { + activeFrameGraph: ForwardRenderer { + clearColor: Qt.rgba(0, 0.5, 1, 1) + camera: camera + } + }, + // Event Source will be set by the Qt3DQuickWindow + InputSettings { } + ] + + readonly property Buffer translationBuffer: Buffer { + data: { + var array = new Float32Array(20 * 3) + for (var i = 0; i < 20; ++i) { + var j = i * 3; + array[j] = i * 4.0; + array[j + 1] = 0.0; + array[j + 2] = 0.0; + } + return array; + } + } + + readonly property Material instancedMaterial: Material { + effect: Effect { + techniques: Technique { + filterKeys: FilterKey { name: "renderingStyle"; value: "forward" } + + graphicsApiFilter { + api: GraphicsApiFilter.OpenGL + majorVersion: 3 + minorVersion: 2 + profile: GraphicsApiFilter.CoreProfile + } + + renderPasses: RenderPass { + shaderProgram: ShaderProgram { + vertexShaderCode: " + #version 150 + in vec3 vertexPosition; + in vec3 translation; + uniform mat4 mvp; + + void main() + { + gl_Position = mvp * vec4(vertexPosition + translation, 1.0); + } + " + + fragmentShaderCode: " + #version 150 + + out vec4 fragColor; + + void main() + { + fragColor = vec4(1.0, 0.0, 0.0, 1.0); + } + " + } + } + } + } + } + + GeometryRenderer { + id: torusMesh + instanceCount: 20 + geometry: torusGeometry + } + + TorusGeometry { + id: torusGeometry + minorRadius: 0.5 + attributes: [ + Attribute { + attributeType: Attribute.VertexAttribute + vertexBaseType: Attribute.Float + vertexSize: 3 + byteStride: 3 * 4 // vector3d + byteOffset: 0 + divisor: 1 // One translation per instance + name: "translation" + buffer: translationBuffer + } + ] + } + + // Doesn't work +// TorusMesh { +// id: torusMesh +// geometry.attributes: [ +// Attribute { +// attributeType: Attribute.VertexAttribute +// vertexBaseType: Attribute.Float +// vertexSize: 3 +// byteStride: 3 * 4 // vector3d +// byteOffset: 0 +// divisor: 1 // One translation per instance +// name: "translation" +// buffer: translationBuffer +// } +// ] +// } + + Transform { + id: torusTransform + rotation: fromAxisAndAngle(Qt.vector3d(1, 0, 0), 45) + } + + Entity { + id: torusEntity + components: [ torusMesh, instancedMaterial, torusTransform ] + } +} |