Qt Quick 3D - Stencil Outline Extension Example | Qt Quick 3D 6.7.2
Description: Demonstrates how the QtQuick3D Render Extension can be used to implement stencil outlining.

- Qt 6.7
- Qt Quick 3D
- Qt Quick 3D Examples and Tutorials
- Qt Quick 3D - Stencil Outline Extension Example
- Qt Quick 3D | Commercial or GPLv3

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