File: rhitest.qml

package info (click to toggle)
qt6-quick3d 6.8.2-5
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 140,860 kB
  • sloc: cpp: 380,464; ansic: 36,078; xml: 252; sh: 241; makefile: 29
file content (117 lines) | stat: -rw-r--r-- 4,195 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only

import QtQuick
import QtQuick3D

Item {
    Component.onCompleted: {
        console.log("Keys:\n[L] - toggle lighting\n[N] - add a new point light\n[R] - remove a point light\n[T] - toggle directional light");
    }

    id: root

    Text {
        color: "#ffffff"
        style: Text.Outline
        styleColor: "#606060"
        font.pixelSize: 28
        property int api: GraphicsInfo.api
        text: {
            if (GraphicsInfo.api === GraphicsInfo.OpenGL)
                "OpenGL";
            else if (GraphicsInfo.api === GraphicsInfo.Software)
                "Software";
            else if (GraphicsInfo.api === GraphicsInfo.Direct3D12)
                "D3D12";
            else if (GraphicsInfo.api === GraphicsInfo.OpenVG)
                "OpenVG";
            else if (GraphicsInfo.api === GraphicsInfo.OpenGLRhi)
                "OpenGL via QRhi";
            else if (GraphicsInfo.api === GraphicsInfo.Direct3D11Rhi)
                "D3D11 via QRhi";
            else if (GraphicsInfo.api === GraphicsInfo.VulkanRhi)
                "Vulkan via QRhi";
            else if (GraphicsInfo.api === GraphicsInfo.MetalRhi)
                "Metal via QRhi";
            else if (GraphicsInfo.api === GraphicsInfo.Null)
                "Null via QRhi";
            else
                "Unknown API";
        }
    }

    Image {
        source: "qt_logo.png"
        x: 50
        NumberAnimation on y { from: 50; to: 400; duration: 3000; loops: -1 }
    }

    property bool useLighting: false;
    property var lights: []

    focus: true
    Keys.onPressed: {
        if (event.key === Qt.Key_L) {
            useLighting = !useLighting;
        } else if (event.key === Qt.Key_N && lights.length + 2 <= 7) {
            var colors = [ "yellow", "red", "green", "blue", "purple", "magenta" ];
            var lightColor = colors[lights.length];
            console.log("Adding new point light: " + (lights.length + 1) + " color: " + lightColor);
            var component = Qt.createComponent("qrc:/SomePointLight.qml");
            var newLight = component.createObject(pointLightContainer, { color: lightColor });
            lights.push(newLight);
        } else if (event.key === Qt.Key_R && lights.length > 0) {
            console.log("Removing last point light. Remaining: " + (lights.length - 1));
            var dyingLight = lights.pop();
            dyingLight.destroy();
        } else if (event.key === Qt.Key_T) {
            console.log("Toggling visibility of directional light: " + !dirLight.visible);
            dirLight.visible = !dirLight.visible
        }
    }

    View3D {
        id: v3d
        anchors.fill: parent
        camera: camera
        renderMode: View3D.Overlay

        environment: SceneEnvironment {
            depthPrePassEnabled: true
        }

        PerspectiveCamera {
            id: camera
            position: Qt.vector3d(0, 200, 300)
            eulerRotation: Qt.vector3d(-30, 0, 0)
        }
        Model {
            source: "#Cube"
            materials: [ DefaultMaterial {
                    lighting: root.useLighting ? DefaultMaterial.FragmentLighting : DefaultMaterial.NoLighting
                } ]
            eulerRotation: Qt.vector3d(0, -90, 0)
            PropertyAnimation on eulerRotation.y { from: 0; to: -360; duration: 5000; loops: -1 }
        }
        Model {
            source: "teapot.mesh"
            x: 100
            y: 100
            scale: Qt.vector3d(15, 15, 15)
            materials: [ DefaultMaterial {
                    lighting: root.useLighting ? DefaultMaterial.FragmentLighting : DefaultMaterial.NoLighting
                    diffuseColor: "salmon"
                } ]
            PropertyAnimation on eulerRotation.y { from: 0; to: 360; duration: 2000; loops: -1 }
            PropertyAnimation on eulerRotation.z { from: 0; to: 360; duration: 2000; loops: -1 }
        }
        DirectionalLight {
            id: dirLight
            ambientColor: Qt.rgba(0.1, 0.1, 0.1, 1.0);
        }
        Node {
            id: pointLightContainer
        }
    }
}