Revision control

++ // Copyright (C) 2024 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
++
++ pragma ComponentBehavior: Bound
++
++ import QtQuick
++ import QtQuick3D
++ import QtQuick3D.Helpers
++ import QtQuick.Controls
++
++ Item {
++ id: mainView
++
++ required property Loader loader
++
++ readonly property real listItemWidth: 180
++ readonly property real listItemHeight: 40
++
++ anchors.fill: parent
++
++ ListModel {
++ id: demosModel
++ ListElement {
++ name: "Particles"
++ file: "Particles.qml"
++ }
++ ListElement {
++ name: "Instancing"
++ file: "Instancing.qml"
++ }
++ ListElement {
++ name: "Blend Value correctness"
++ file: "BlendValueTest.qml"
++ }
++ }
++
++
++ View3D {
++ id: view3D
++ anchors.fill: parent
++ //! [scene environment]
++ environment: SceneEnvironment {
++ clearColor: "#000000"
++ backgroundMode: SceneEnvironment.Color
++ antialiasingMode: AppSettings.antialiasingMode
++ antialiasingQuality: AppSettings.antialiasingQuality
++ oitMethod: SceneEnvironment.OITWeightedBlended
++ }
++ //! [scene environment]
++ camera: PerspectiveCamera {
++ position: Qt.vector3d(0, 0, 600)
++ clipFar: 2000
++ }
++
++ PointLight {
++ id: pointLight
++ position: Qt.vector3d(400, 200, 400)
++ brightness: 50
++ ambientColor: Qt.rgba(0.5, 0.3, 0.1, 1.0)
++ SequentialAnimation {
++ loops: Animation.Infinite
++ running: true
++ NumberAnimation {
++ target: pointLight
++ property: "brightness"
++ to: 400
++ duration: 2000
++ easing.type: Easing.OutElastic
++ }
++ NumberAnimation {
++ target: pointLight
++ property: "brightness"
++ to: 50
++ duration: 6000
++ easing.type: Easing.InOutQuad
++ }
++ }
++ }
++
++ component QtCubeModel : Model {
++ property alias xRotationDuration: cubeXAnim.duration
++ property alias yRotationDuration: cubeYAnim.duration
++ property alias materialOpacity: cubeMaterial.opacity
++
++ source: "#Cube"
++ position: Qt.vector3d(0, 0, 100)
++ NumberAnimation on eulerRotation.y {
++ id: cubeYAnim
++ loops: Animation.Infinite
++ from: 0
++ to: 360
++ }
++ NumberAnimation on eulerRotation.x {
++ id: cubeXAnim
++ loops: Animation.Infinite
++ from: 0
++ to: 360
++ }
++ materials: PrincipledMaterial {
++ id: cubeMaterial
++ baseColorMap: Texture {
++ source: "images/qt_logo2.png"
++ }
++ normalMap: Texture {
++ source: "images/qt_logo2_n.png"
++ }
++ cullMode: Material.NoCulling
++ }
++ }
++ QtCubeModel {
++ scale: Qt.vector3d(2.0, 2.0, 2.0)
++ xRotationDuration: 8000
++ yRotationDuration: 10000
++ materialOpacity: 0.5
++ }
++ QtCubeModel {
++ scale: Qt.vector3d(1.0, 1.0, 1.0)
++ xRotationDuration: 14000
++ yRotationDuration: 20000
++ materialOpacity: 0.7
++ }
++ }
++
++ Component {
++ id: listComponent
++ Button {
++ id: button
++ required property string name
++ required property string file
++
++ width: mainView.listItemWidth
++ height: mainView.listItemHeight
++ background: Rectangle {
++ id: buttonBackground
++ border.width: 0.5
++ border.color: "#d0808080"
++ color: "#d0404040"
++ opacity: button.hovered ? 1.0 : 0.5
++ }
++ contentItem: Text {
++ anchors.centerIn: parent
++ color: "#f0f0f0"
++ font.pointSize: AppSettings.fontSizeSmall
++ text: button.name
++ }
++
++ onClicked: {
++ mainView.loader.source = button.file
++ }
++ }
++ }
++
++ Text {
++ id: topLabel
++ anchors.horizontalCenter: parent.horizontalCenter
++ anchors.top: parent.top
++ anchors.topMargin: 20
++ text: qsTr("Qt Quick 3D - Order Independent Transparency")
++ color: "#f0f0f0"
++ font.pointSize: AppSettings.fontSizeLarge
++ }
++
++ Row {
++ anchors.top: topLabel.bottom
++ anchors.topMargin: 20
++ anchors.rightMargin: 50
++ anchors.right: parent.right
++ spacing: 20
++ ListView {
++ id: demosListView
++ width: mainView.listItemWidth
++ height: count * mainView.listItemHeight
++ model: demosModel
++ delegate: listComponent
++ }
++ }
++ 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
++ }
++ }
++ }
++ }
++ }