Revision control

Copy as Markdown

// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick3D
import QtQuick3D.Helpers
import QtQuick3DTest.RhiRendering
Window {
width: 1280
height: 720
visible: true
title: qsTr("QRhi-based rendering within a View3D")
View3D {
id: view3d
anchors.fill: parent
environment: SceneEnvironment {
clearColor: "skyblue"
backgroundMode: SceneEnvironment.Color
antialiasingMode: cbMsaa.checked ? SceneEnvironment.MSAA : SceneEnvironment.NoAA
antialiasingQuality: SceneEnvironment.High // 4x
}
extensions: [
RhiRenderingExtension {
id: renderer
SequentialAnimation on x {
NumberAnimation { from: 500; to: -500; duration: 4000 }
NumberAnimation { from: -500; to: 500; duration: 4000 }
loops: -1
}
}
]
PerspectiveCamera {
id: camera
z: 500
}
DirectionalLight {
}
PrincipledMaterial {
id: material
baseColor: "red"
// Having < 1 opacity or setting alphaMode to Blend all make
// the object belong to the back-to-front pass with no depth
// write, which has then consequences for the QRhi-rendered
// object's depth test. (and then the mode being Underlay or
// Overlay suddenly matters!)
opacity: cbAlpha.checked ? 0.25 : 1.0
}
Model {
source: "#Sphere"
materials: material
}
Model {
source: "#Cube"
materials: material
x: 200
}
Model {
source: "#Cube"
materials: material
x: -200
}
}
WasdController {
controlledObject: camera
}
Item {
width: debugViewToggleText.implicitWidth
height: debugViewToggleText.implicitHeight
anchors.right: parent.right
Label {
id: debugViewToggleText
text: "Click here " + (dbg.visible ? "to hide DebugView" : "for 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
}
}
}
ColumnLayout {
CheckBox {
id: cbAlpha
text: "Semi-transparent material"
checked: false
}
RowLayout {
Label {
text: "Extension render mode"
}
ComboBox {
id: modeComboBox
textRole: "text"
valueRole: "value"
implicitContentWidthPolicy: ComboBox.WidestText
onActivated: {
renderer.mode = currentValue;
view3d.rebuildExtensionList();
}
Component.onCompleted: modeComboBox.currentIndex = modeComboBox.indexOfValue(renderer.mode)
model: [
{ value: RhiRenderingExtension.Underlay, text: "Underlay"},
{ value: RhiRenderingExtension.Overlay, text: "Overlay"}
]
}
}
CheckBox {
id: cbMsaa
text: "MSAA (4x)"
checked: false
}
}
}