Qt Quick 3D Physics - Material Example

 // Copyright (C) 2022 The Qt Company Ltd.
 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
 import QtQuick
 import QtQuick3D
 import QtQuick3D.Physics
 import QtQuick3D.Helpers
 import QtQuick.Controls
 import QtQuick.Layouts

 Window {
     id: appWindow
     width: 800
     height: 600
     visible: true
     title: qsTr("Qt Quick 3D Physics - Material example")

     PhysicsWorld {
         scene: viewport.scene
     }

     View3D {
         id: viewport
         anchors.fill: parent

         environment: SceneEnvironment {
             antialiasingMode: SceneEnvironment.MSAA
             backgroundMode: SceneEnvironment.Color
             clearColor: "#f0f0f0"
         }

         PerspectiveCamera {
             position: Qt.vector3d(0, 500, 1500)
             eulerRotation: Qt.vector3d(-20, 0, 0)
             clipFar: 10000
             clipNear: 10
         }

         DirectionalLight {
             eulerRotation: Qt.vector3d(-45, 45, 0)
             castsShadow: true
             brightness: 1
             shadowFactor: 100
             shadowMapQuality: Light.ShadowMapQualityVeryHigh
         }

         PhysicsMaterial {
             id: physicsMaterial
             staticFriction: staticFrictionSlider.value
             dynamicFriction: dynamicFrictionSlider.value
             restitution: restitutionSlider.value
         }

         StaticRigidBody {
             eulerRotation: Qt.vector3d(-79, -90, 0)
             scale: Qt.vector3d(20, 30, 100)
             physicsMaterial: physicsMaterial
             collisionShapes: PlaneShape {}
             Model {
                 source: "#Rectangle"
                 materials: DefaultMaterial {
                     diffuseColor: "green"
                 }
                 castsShadows: false
                 receivesShadows: true
             }
         }

         DynamicRigidBody {
             id: box
             physicsMaterial: physicsMaterial
             massMode: DynamicRigidBody.CustomDensity
             density: 10
             property vector3d startPosition: Qt.vector3d(700, 300, 0)
             position: startPosition
             Model {
                 source: "#Cube"
                 materials: PrincipledMaterial {
                     baseColor: "red"
                 }
             }
             collisionShapes: BoxShape {}
         }
     }

     Frame {
         background: Rectangle {
             color: "#c0c0c0"
             border.color: "#202020"
         }
         anchors.top: parent.top
         anchors.left: parent.left
         anchors.margins: 10

         ColumnLayout {
             Label {
                 text: "Static friction: " + staticFrictionSlider.value.toFixed(2)
             }
             Slider {
                 id: staticFrictionSlider
                 focusPolicy: Qt.NoFocus
                 from: 0
                 to: 1
                 value: 0.1
             }
             Label {
                 text: "Dynamic friction: " + dynamicFrictionSlider.value.toFixed(2)
             }
             Slider {
                 id: dynamicFrictionSlider
                 focusPolicy: Qt.NoFocus
                 from: 0
                 to: 1
                 value: 0.1
             }
             Label {
                 text: "Restitution: " + restitutionSlider.value.toFixed(2)
             }
             Slider {
                 id: restitutionSlider
                 focusPolicy: Qt.NoFocus
                 from: 0
                 to: 1
                 value: 0.1
             }
             Button {
                 id: resetButton
                 Layout.alignment: Qt.AlignHCenter
                 text: "Reset box"
                 onClicked: box.reset(box.startPosition, Qt.vector3d(0, 0, 0))
             }
         }
     }
 }