| /**************************************************************************** |
| ** |
| ** 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$ |
| ** |
| ****************************************************************************/ |
| |
| import QtQuick 2.0 as Quick |
| import Qt3D.Core 2.0 |
| import Qt3D.Render 2.0 |
| import Qt3D.Examples 2.0 |
| import Qt3D.Input 2.0 |
| import Qt3D.Extras 2.0 |
| |
| Entity |
| { |
| components: [ |
| RenderSettings { |
| activeFrameGraph: ForwardRenderer { |
| clearColor: Qt.rgba(0, 0.5, 1, 1) |
| camera: camera |
| } |
| }, |
| // Event Source will be set by the Qt3DQuickWindow |
| InputSettings { } |
| ] |
| |
| 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 ) |
| } |
| |
| FirstPersonCameraController { |
| camera: camera |
| } |
| |
| // test_scene.dae contains three named nodes. Once the asynchronous loading of the |
| // scene completes, we look up some of them. |
| SceneHelper { |
| id: sceneHelper |
| } |
| |
| Quick.Component { |
| id: animParamComp |
| Quick.SequentialAnimation { |
| id: seqAnim |
| loops: Quick.Animation.Infinite |
| property variant target: null |
| Quick.ColorAnimation { |
| target: seqAnim.target |
| property: "value" |
| from: Qt.rgba(0, 0, 0, 1) |
| to: Qt.rgba(1, 1, 1, 1) |
| duration: 2000 |
| } |
| Quick.ColorAnimation { |
| target: seqAnim.target |
| property: "value" |
| from: Qt.rgba(1, 1, 1, 1) |
| to: Qt.rgba(0, 0, 0, 1) |
| duration: 1000 |
| } |
| } |
| } |
| |
| Quick.Component { |
| id: animRotComp |
| Quick.QtObject { |
| id: rotationData |
| property real userAngle: 0.0 |
| property vector3d axis: Qt.vector3d(0, 0, 1) |
| Quick.NumberAnimation on userAngle { |
| from: 0 |
| to: 360 |
| duration: 5000 |
| loops: Quick.Animation.Infinite |
| } |
| } |
| } |
| |
| Entity { |
| components: [ |
| Transform { |
| matrix: { |
| var m = Qt.matrix4x4(); |
| m.rotate(90, Qt.vector3d(0, 1, 0)); |
| return m; |
| } |
| }, |
| SceneLoader { |
| id: sceneLoader |
| source: "qrc:/assets/test_scene.dae" |
| onStatusChanged: { |
| console.log("SceneLoader status: " + status); |
| if (status == SceneLoader.Ready) { |
| console.log("Scene is ready"); |
| |
| // Now find the torus and animate one of the material effect's parameters. |
| var e = sceneHelper.findEntity(sceneLoader, "Torus"); |
| console.log("Found entity: " + e + " its components are:"); |
| for (var i = 0; i < e.components.length; ++i) { |
| console.log(" " + e.components[i]); |
| if (e.components[i].effect !== undefined) { |
| var p = e.components[i].effect.parameters; |
| if (p !== undefined) { |
| for (var j = 0; j < p.length; ++j) { |
| if (p[j].name === "kd") { |
| var anim = animParamComp.createObject(p[j]); |
| anim.target = p[j]; |
| anim.running = true; |
| break; |
| } |
| } |
| } |
| } |
| } |
| |
| // Add an animated rotation transform to make Suzanne orbit around. |
| e = sceneHelper.findEntity(sceneLoader, "Suzanne"); |
| var t = sceneHelper.findComponent(e, "Qt3DCore::QTransform"); |
| if (!t) |
| return; |
| |
| // Add object with animation data as a child |
| var suzanneAnim = animRotComp.createObject(t); |
| |
| // Query the existing transformation. We will use parts of this in |
| // the replacement animation |
| var origTranslation = t.translation; |
| var origRotation = t.rotation; |
| var origScale = t.scale; |
| console.log("origTranslation = " + origTranslation); |
| console.log("origRotation = " + origRotation); |
| console.log("origScale = " + origScale); |
| |
| // Make a deep copy of the original translation. This will not be updated when the |
| // transformation's translation property gets updated due to the animation. |
| var constantTranslation = Qt.vector3d(origTranslation.x, origTranslation.y, origTranslation.z); |
| |
| t.matrix = Qt.binding(function() { |
| var m = Qt.matrix4x4(); |
| m.rotate(suzanneAnim.userAngle, suzanneAnim.axis); |
| m.translate(constantTranslation); |
| m.rotate(90, Qt.vector3d(1, 0, 0)); |
| m.scale(origScale); |
| return m; |
| }) |
| } |
| } |
| } |
| ] |
| } |
| |
| Entity { |
| components: [ |
| Transform { |
| scale: 0.2 |
| translation: Qt.vector3d(0.0, -15.0, 0.0) |
| }, |
| SceneLoader { |
| source: "qrc:/assets/obj/material-sphere.obj" |
| } |
| ] |
| } |
| } |