ff4ff35918
Red Bear OS is a full fork. All sources must be available from git clone with zero network access. Removed gitignore rules that excluded fetched source trees under recipes/*/source/, local/recipes/kde/*/source/, local/recipes/qt/*/source/, and vendor source trees. Build artifacts (target/, build/, source.tar, *.o, *.so) remain excluded. 127291 files added — kernel, relibc, base, bootloader, pkgar, all KDE/Qt frameworks, mesa, wayland, DRM drivers, and every other recipe source.
238 lines
7.3 KiB
QML
238 lines
7.3 KiB
QML
// Copyright (C) 2021 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
|
|
import QtQuick
|
|
import QtQuick3D
|
|
import QtQuick3D.Particles3D
|
|
import QtQuick3D.Helpers
|
|
import QtQuick.Controls
|
|
|
|
Window {
|
|
id: window
|
|
width: 1024
|
|
height: 768
|
|
visible: true
|
|
title: qsTr("Reflection Probes")
|
|
|
|
View3D {
|
|
id: view
|
|
anchors.fill: parent
|
|
environment: SceneEnvironment {
|
|
clearColor: window.color
|
|
backgroundMode: SceneEnvironment.SkyBox
|
|
lightProbe: Texture {
|
|
source: "res/OpenfootageNET_lowerAustria01-1024.hdr"
|
|
}
|
|
probeOrientation: Qt.vector3d(0, -90, 0)
|
|
}
|
|
|
|
PerspectiveCamera {
|
|
id: camera
|
|
position: Qt.vector3d(-50, 700, 475)
|
|
eulerRotation.x: -50
|
|
}
|
|
|
|
DirectionalLight { }
|
|
|
|
Model {
|
|
property real angle
|
|
source: "#Sphere"
|
|
x: Math.cos(angle) * 100
|
|
z: Math.sin(angle) * 100
|
|
y: 300
|
|
receivesReflections: settingsPanel.sphereReceivesReflection
|
|
materials: PrincipledMaterial {
|
|
metalness: 1.0
|
|
roughness: settingsPanel.sphereRoughness
|
|
}
|
|
|
|
NumberAnimation on angle {
|
|
from: 0
|
|
to: Math.PI * 2
|
|
duration: 8000
|
|
loops: Animation.Infinite
|
|
}
|
|
|
|
ReflectionProbe {
|
|
objectName: "sphereReflProbe"
|
|
timeSlicing: {
|
|
if (settingsPanel.timeSlicingIndex == 0) ReflectionProbe.None
|
|
else if (settingsPanel.timeSlicingIndex == 1) ReflectionProbe.AllFacesAtOnce
|
|
else ReflectionProbe.IndividualFaces
|
|
}
|
|
refreshMode: {
|
|
if (settingsPanel.refreshModeIndex == 0) ReflectionProbe.EveryFrame
|
|
else ReflectionProbe.FirstFrame
|
|
}
|
|
quality: {
|
|
if (settingsPanel.qualityIndex == 0) ReflectionProbe.VeryLow
|
|
else if (settingsPanel.qualityIndex == 1) ReflectionProbe.Low
|
|
else if (settingsPanel.qualityIndex == 2) ReflectionProbe.Medium
|
|
else if (settingsPanel.qualityIndex == 3) ReflectionProbe.High
|
|
else ReflectionProbe.VeryHigh
|
|
}
|
|
boxSize: Qt.vector3d(300, 300, 300)
|
|
}
|
|
}
|
|
|
|
Model {
|
|
position: Qt.vector3d(200, 300, 0)
|
|
source: "#Sphere"
|
|
materials: PrincipledMaterial {
|
|
baseColor: "green"
|
|
}
|
|
}
|
|
|
|
Model {
|
|
position: Qt.vector3d(-200, 300, 0)
|
|
source: "#Sphere"
|
|
materials: PrincipledMaterial {
|
|
baseColor: "green"
|
|
}
|
|
}
|
|
|
|
Model {
|
|
position: Qt.vector3d(0, 200, -285)
|
|
scale: Qt.vector3d(6, 4, 0.3)
|
|
source: "#Cube"
|
|
materials: PrincipledMaterial {
|
|
baseColor: "yellow"
|
|
roughness: 0.1
|
|
metalness: 1.0
|
|
}
|
|
}
|
|
|
|
Model {
|
|
scale: Qt.vector3d(6, 0.1, 6)
|
|
source: "#Cube"
|
|
receivesReflections: settingsPanel.floorReceivesReflection
|
|
materials: PrincipledMaterial {
|
|
baseColor: "lightBlue"
|
|
roughness: 0.1
|
|
metalness: 1.0
|
|
}
|
|
}
|
|
|
|
ReflectionProbe {
|
|
objectName: "reflProbe"
|
|
position: settingsPanel.probePosition
|
|
timeSlicing: {
|
|
if (settingsPanel.timeSlicingIndex == 0) ReflectionProbe.None
|
|
else if (settingsPanel.timeSlicingIndex == 1) ReflectionProbe.AllFacesAtOnce
|
|
else ReflectionProbe.IndividualFaces
|
|
}
|
|
refreshMode: {
|
|
if (settingsPanel.refreshModeIndex == 0) ReflectionProbe.EveryFrame
|
|
else ReflectionProbe.FirstFrame
|
|
}
|
|
quality: {
|
|
if (settingsPanel.qualityIndex == 0) ReflectionProbe.VeryLow
|
|
else if (settingsPanel.qualityIndex == 1) ReflectionProbe.Low
|
|
else if (settingsPanel.qualityIndex == 2) ReflectionProbe.Medium
|
|
else if (settingsPanel.qualityIndex == 3) ReflectionProbe.High
|
|
else ReflectionProbe.VeryHigh
|
|
}
|
|
parallaxCorrection: settingsPanel.probeParallaxCorrection
|
|
boxSize: settingsPanel.probeSize
|
|
}
|
|
|
|
ParticleSystem3D {
|
|
position: Qt.vector3d(0, 300, 0)
|
|
|
|
SpriteParticle3D {
|
|
id: snowFlakeParticle
|
|
sprite: Texture {
|
|
source: "res/snowflake.png"
|
|
}
|
|
maxAmount: 100
|
|
particleScale: 20.0
|
|
fadeOutDuration: 500
|
|
billboard: true
|
|
}
|
|
|
|
ParticleEmitter3D {
|
|
enabled: settingsPanel.spriteParticlesEnabled
|
|
particle: snowFlakeParticle
|
|
velocity: VectorDirection3D {
|
|
direction: Qt.vector3d(100, 200, 0)
|
|
directionVariation: Qt.vector3d(20, 20, 20)
|
|
}
|
|
particleScaleVariation: 0.4
|
|
emitRate: 50
|
|
lifeSpan: 4000
|
|
}
|
|
|
|
Gravity3D {
|
|
magnitude: 100
|
|
}
|
|
}
|
|
|
|
ParticleSystem3D {
|
|
position: Qt.vector3d(0, 300, 0)
|
|
|
|
Component {
|
|
id: particleComponent
|
|
Model {
|
|
source: "#Sphere"
|
|
scale: Qt.vector3d(0.8, 0.8, 0.8)
|
|
receivesReflections: true
|
|
materials: PrincipledMaterial {
|
|
baseColor: "red"
|
|
roughness: 0.1
|
|
metalness: 1.0
|
|
}
|
|
}
|
|
}
|
|
|
|
ModelParticle3D {
|
|
id: particleRed
|
|
delegate: particleComponent
|
|
maxAmount: 10
|
|
}
|
|
|
|
ParticleEmitter3D {
|
|
enabled: settingsPanel.modelParticlesEnabled
|
|
particle: particleRed
|
|
velocity: VectorDirection3D {
|
|
direction: Qt.vector3d(-100, 200, 0)
|
|
}
|
|
emitRate: 1
|
|
lifeSpan: 4000
|
|
}
|
|
|
|
Gravity3D {
|
|
magnitude: 100
|
|
}
|
|
}
|
|
}
|
|
|
|
SettingsPanel {
|
|
id: settingsPanel
|
|
iconSize: 16 + Math.max(window.width, window.height) * 0.05
|
|
}
|
|
|
|
Item {
|
|
width: debugViewToggleText.implicitWidth
|
|
height: debugViewToggleText.implicitHeight
|
|
anchors.right: parent.right
|
|
Label {
|
|
id: debugViewToggleText
|
|
text: "Click here " + (dbg.visible ? "to hide DebugView" : "for DebugView")
|
|
color: "white"
|
|
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: view
|
|
id: dbg
|
|
visible: false
|
|
}
|
|
}
|
|
}
|
|
}
|