- Qt 6.5
- Qt Quick 3D
- Qt Quick 3D Examples and Tutorials
- Qt Quick 3D - Level of Detail Helper Example
- Qt Quick 3D | Commercial or GPLv3

# Qt Quick 3D - Level of Detail Helper Example

     // Copyright (C) 2022 The Qt Company Ltd.
     // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

     import QtQuick
     import QtQuick3D
     import QtQuick3D.Helpers

     Window {
         id: window
         width: 1280
         height: 720
         visible: true

         View3D {
             id: view
             anchors.fill: parent

             environment: SceneEnvironment {
                 clearColor: "black"
                 backgroundMode: SceneEnvironment.Color
                 antialiasingMode: SceneEnvironment.MSAA
                 antialiasingQuality: SceneEnvironment.High
             }

             PerspectiveCamera {
                 id: camera
                 position: Qt.vector3d(0, 10, 300)
                 clipNear: 1.0
                 NumberAnimation on z {
                     from: 200
                     to: -100
                     duration: 40 * 1000
                 }
             }

             DirectionalLight {
                 eulerRotation.x: -30
                 eulerRotation.y: -70
                 ambientColor: Qt.rgba(0.5, 0.5, 0.5, 1.0)
             }

             RandomInstancing {
                 id: randomInstancing
                 instanceCount: 800

                 position: InstanceRange {
                     from: Qt.vector3d(-200, 0, -200)
                     to: Qt.vector3d(200, 1, 200)
                 }
                 scale: InstanceRange {
                     from: Qt.vector3d(10, 10, 10)
                     to: Qt.vector3d(10, 10, 10)
                 }
                 rotation: InstanceRange {
                     from: Qt.vector3d(0, 0, 0)
                     to: Qt.vector3d(0, 0, 0)
                 }
                 color: InstanceRange {
                     from: "grey"
                     to: "white"
                     proportional: true
                 }

                 randomSeed: 2021
             }

             PrincipledMaterial {
                 id: marbleMaterial
                 baseColorMap: Texture {
                     source: "maps/baseColor.png"
                     generateMipmaps: true
                     mipFilter: Texture.Linear
                 }
                 opacityChannel: Material.A
                 metalnessMap: Texture {
                     source: "maps/occlusionRoughnessMetallic.png"
                     generateMipmaps: true
                     mipFilter: Texture.Linear
                 }
                 metalnessChannel: Material.B
                 roughnessMap: Texture {
                     source: "maps/occlusionRoughnessMetallic.png"
                     generateMipmaps: true
                     mipFilter: Texture.Linear
                 }
                 roughnessChannel: Material.G
                 metalness: 1
                 roughness: 1
                 normalMap: Texture {
                     source: "maps/normal.png"
                     generateMipmaps: true
                     mipFilter: Texture.Linear
                 }
             }

             LodManager {
                 camera: camera
                 distances: [100, 140, 180]
                 fadeDistance: 10

                 Model {
                     scale: Qt.vector3d(100, 100, 100);
                     source: "meshes/marble_bust_01_LOD_0.mesh"
                     materials: marbleMaterial
                 }

                 Model {
                     scale: Qt.vector3d(100, 100, 100);
                     source: "meshes/marble_bust_01_LOD_1.mesh"
                     materials: marbleMaterial
                 }

                 Model {
                     scale: Qt.vector3d(100, 100, 100);
                     source: "meshes/marble_bust_01_LOD_2.mesh"
                     materials: marbleMaterial
                 }

                 Model {
                     scale: Qt.vector3d(100, 100, 100);
                     source: "meshes/marble_bust_01_LOD_3.mesh"
                     materials: marbleMaterial
                 }
             }

             LodManager {
                 camera: camera
                 distances: [50, 100, 150]

                 Model {
                     instancing: randomInstancing
                     source: "#Sphere"
                     materials: [
                         PrincipledMaterial {
                             metalness: 0
                             roughness: 1
                             baseColor: "red"
                         }
                     ]
                     scale: Qt.vector3d(0.005, 0.005, 0.005)
                 }

                 Model {
                     instancing: randomInstancing
                     source: "#Cylinder"
                     materials: [
                         PrincipledMaterial {
                             metalness: 0
                             roughness: 1
                             baseColor: "orange"
                         }
                     ]
                     scale: Qt.vector3d(0.005, 0.005, 0.005)
                 }

                 Model {
                     instancing: randomInstancing
                     source: "#Cube"
                     materials: [
                         PrincipledMaterial {
                             metalness: 0
                             roughness: 1
                             baseColor: "yellow"
                         }
                     ]
                     scale: Qt.vector3d(0.005, 0.005, 0.005)
                 }

                 Model {
                     instancing: randomInstancing
                     source: "#Rectangle"
                     materials: [
                         PrincipledMaterial {
                             metalness: 0
                             roughness: 1
                             baseColor: "green"
                         }
                     ]
                     scale: Qt.vector3d(0.005, 0.005, 0.005)
                 }
             }
         }

         DebugView {
             source: view
         }
     }