Revision control

++ // Copyright (C) 2024 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
++
++ import QtQuick
++ import QtQuick.Controls
++ import QtQuick3D
++ import QtQuick3D.Helpers
++
++ Item {
++ id: mainWindow
++ anchors.fill: parent
++
++ View3D {
++ id: view3D
++ anchors.fill: parent
++ camera: PerspectiveCamera {
++ position: Qt.vector3d(0, 100, 300)
++ }
++
++ environment: SceneEnvironment {
++ clearColor: "#000000"
++ antialiasingMode: AppSettings.antialiasingMode
++ antialiasingQuality: AppSettings.antialiasingQuality
++ backgroundMode: SceneEnvironment.SkyMaterial
++ skyMaterial: ProceduralSkyMaterial {}
++ oitMethod: SceneEnvironment.OITWeightedBlended
++ }
++
++ Node {
++ id: sceneRoot
++
++ Model {
++ id: pillar
++ source: "#Cylinder"
++ scale: Qt.vector3d(0.3, 100, 0.3)
++ position: Qt.vector3d(100, 0, 100)
++ materials: [
++ PrincipledMaterial {
++ id: pillarMaterial
++ normalMap: Texture {
++ source: "images/pillar_normal.png"
++ scaleU: 20.0
++ }
++ roughness: 0.2
++ }
++ ]
++ }
++
++ Model {
++ id: pillar2
++ source: "#Cylinder"
++ scale: Qt.vector3d(0.3, 100, 0.3)
++ position: Qt.vector3d(-100, 0, 100)
++ materials: [
++ PrincipledMaterial {
++ id: pillarMaterial2
++ normalMap: Texture {
++ source: "images/pillar_normal.png"
++ scaleU: 20.0
++ }
++
++ roughness: 0.2
++ }
++ ]
++ }
++
++ RandomInstancing {
++ id: randomInstancing
++ instanceCount: 80
++
++ position: InstanceRange {
++ from: Qt.vector3d(-200, -200, -200)
++ to: Qt.vector3d(200, 200, 200)
++ }
++ scale: InstanceRange {
++ from: Qt.vector3d(5, 5, 5)
++ to: Qt.vector3d(20, 20, 20)
++ proportional: true
++ }
++ rotation: InstanceRange {
++ from: Qt.vector3d(0, 0, 0)
++ to: Qt.vector3d(360, 360, 360)
++ }
++ color: InstanceRange {
++ from: "grey"
++ to: "white"
++ proportional: true
++ }
++
++ randomSeed: 1423
++ }
++ DirectionalLight {
++ position: Qt.vector3d(0, -300, 0)
++ eulerRotation: Qt.vector3d(-90, 0, 0)
++ brightness: 4
++ color: Qt.rgba(0.8, 0.8, 1.0, 1.0)
++ }
++
++ Node {
++ NumberAnimation on eulerRotation.y {
++ duration: 30000
++ from: 0
++ to: 360
++ loops: Animation.Infinite
++ running: true
++ }
++ PointLight {
++ id: pointLight
++ position: Qt.vector3d(0, 100, 300)
++ brightness: 1
++ ambientColor: Qt.rgba(0.5, 0.3, 0.1, 1.0)
++ SequentialAnimation {
++ loops: Animation.Infinite
++ running: true
++ NumberAnimation {
++ target: pointLight
++ property: "brightness"
++ to: 1
++ duration: 2000
++ easing.type: Easing.OutElastic
++ }
++ NumberAnimation {
++ target: pointLight
++ property: "brightness"
++ to: 2
++ duration: 6000
++ easing.type: Easing.InOutQuad
++ }
++ }
++ }
++ PointLight {
++ id: pointLight2
++ position: Qt.vector3d(100, 100, 300)
++ brightness: 1
++ ambientColor: Qt.rgba(0.5, 0.3, 0.1, 1.0)
++ SequentialAnimation {
++ loops: Animation.Infinite
++ running: true
++ NumberAnimation {
++ target: pointLight
++ property: "brightness"
++ to: 1
++ duration: 2000
++ easing.type: Easing.OutElastic
++ }
++ NumberAnimation {
++ target: pointLight
++ property: "brightness"
++ to: 2
++ duration: 6000
++ easing.type: Easing.InOutQuad
++ }
++ }
++ }
++ Model {
++ instancing: randomInstancing
++ source: "meshes/asteroid.mesh"
++ opacity: 0.5
++
++ materials: [
++ PrincipledMaterial {
++ baseColor: "#c0e0cc"
++ roughness: 0.1
++ cullMode: Material.NoCulling
++ }
++ ]
++ }
++ }
++
++ }
++ }
++
++ Pane {
++ anchors.top: view3D.top
++ anchors.right: parent.right
++ Label {
++ id: debugViewToggleText
++ text: dbg.visible ? "Hide DebugView" : "Show DebugView"
++ anchors.right: parent.right
++ anchors.top: parent.top
++ MouseArea {
++ anchors.fill: parent
++ onClicked: dbg.visible = !dbg.visible
++ DebugView {
++ y: debugViewToggleText.height * 2
++ anchors.right: parent.right
++ source: view3D
++ id: dbg
++ visible: false
++ }
++ }
++ }
++ }
++ }