// 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 } } }