Qt Quick 3D - Stencil Outline Extension Example
// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause import QtQuick import QtQuick.Controls import QtQuick.Layouts import QtQuick3D import QtQuick3D.Helpers import QtQuick3D.Examples.OutlineRenderExtension ApplicationWindow { width: 640 height: 480 visible: true title: qsTr("Stencil outline example") ColumnLayout { anchors.top: parent.top anchors.left: parent.left anchors.margins: 10 width: 250 RowLayout { Layout.fillWidth: true Label { text: "Outline Color" Layout.fillWidth: true } ColorPicker { id: colorPicker color: outlineMaterial.baseColor onColorModified: (color) => {outlineMaterial.baseColor = color} } } RowLayout { Layout.fillWidth: true Label { text: "Outline Width (" + outlineRenderer.outlineScale.toFixed(2) + ")" Layout.fillWidth: true } Slider { value: 1.05 from: 1.00 to: 3.0 stepSize: 0.01 onValueChanged: outlineRenderer.outlineScale = value } } Label { text: "Click on a model to select it." } } View3D { id: view3d anchors.topMargin: 100 anchors.fill: parent extensions: [ OutlineRenderExtension { id: outlineRenderer outlineMaterial: outlineMaterial } ] PerspectiveCamera { id: camera z: 500 } DirectionalLight { } DirectionalLight { eulerRotation: Qt.vector3d(0, 180, 0) position.z: -600 } PrincipledMaterial { id: outlineMaterial baseColor: "blue" lighting: PrincipledMaterial.NoLighting } Model { source: "models/suzanne.mesh" pickable: true materials: PrincipledMaterial { baseColor: "red" } } Model { position.x: 300 source: "models/suzanne.mesh" pickable: true materials: PrincipledMaterial { baseColor: "green" } } Model { position.x: -300 source: "models/suzanne.mesh" pickable: true materials: PrincipledMaterial { baseColor: "pink" } } } MouseArea { anchors.fill: view3d onClicked: (mouse)=> { let hit = view3d.pick(mouse.x, mouse.y) outlineRenderer.target = hit.objectHit } } }