Hello Qt Quick 3D Example

// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

import QtQuick
import QtQuick.Timeline
import QtQuick3D
import HelloExample

Window {
    id: window
    width: 1280
    height: 720
    visible: true

    View3D {
        id: view
        anchors.fill: parent

        environment: SceneEnvironment {
            clearColor: "black"
            backgroundMode: SceneEnvironment.Color
        }

        Node {
            id: cameraNode

            PerspectiveCamera {
                id: camera
                position: Qt.vector3d(0, 0, 650)
            }

            property bool isRotating: false
            PropertyAnimation on eulerRotation.x {
                from: 0
                to: 360
                duration: 20000
                loops: Animation.Infinite
                running: cameraNode.isRotating
            }

            Timeline {
                id: timeline0
                startFrame: 0
                endFrame: 1000
                enabled: true

                SequentialAnimation on currentFrame {
                    NumberAnimation {
                        from: 0
                        to: 500
                        duration: 4000
                    }
                    NumberAnimation {
                        from: 500
                        to: 1000
                        duration: 10000
                        loops: Animation.Infinite
                    }
                }

                KeyframeGroup {
                    target: cameraNode
                    property: "isRotating"

                    Keyframe {
                        frame: 0
                        value: false
                    }
                    Keyframe {
                        frame: 500
                        value: true
                    }
                }

                KeyframeGroup {
                    target: oldLogo
                    property: "isRotating"

                    Keyframe {
                        frame: 0
                        value: false
                    }
                    Keyframe {
                        frame: 100
                        value: true
                    }
                }

                KeyframeGroup {
                    target: camera
                    property: "z"

                    Keyframe {
                        frame: 0
                        value: 2000
                    }
                    Keyframe {
                        frame: 100
                        value: 2000
                    }
                    Keyframe {
                        frame: 400
                        value: 100
                    }
                    Keyframe {
                        frame: 500
                        value: 200
                    }
                    Keyframe {
                        frame: 550
                        value: 200
                    }
                    Keyframe {
                        frame: 700
                        value: 1000
                        easing.type: Easing.OutElastic
                    }
                    Keyframe {
                        frame: 750
                        value: 1000
                    }
                    Keyframe {
                        frame: 800
                        value: 1000
                    }
                    Keyframe {
                        frame: 950
                        value: 200
                        easing.type: Easing.OutElastic
                    }
                    Keyframe {
                        frame: 1000
                        value: 200
                    }

                }
            }
        }

        DirectionalLight {
            eulerRotation.x: 250
            eulerRotation.y: -30
            brightness: 1.0
            ambientColor: "#7f7f7f"
        }

        Model {
            id: oldLogo
            property real s: 4.75
            property real r: 0
            property bool isRotating: false
            scale: Qt.vector3d(s, s, s);
            source: "oldqtlogo.mesh"
            instancing: ImageInstanceTable {
                gridSize: 40
                gridSpacing: 20
                image: ":/qt_logo.png"
            }
            materials: PrincipledMaterial { baseColor: "white" }
            NumberAnimation {
                target: oldLogo
                property: "r"
                running: oldLogo.isRotating
                from: 0
                to: 360
                duration: 3000
                loops: Animation.Infinite
            }
            onRChanged: rotate(2.5, Qt.vector3d(1, -1, 0), Node.LocalSpace)
        }
    }
}