Qt Quick 3D Physics - Material Example▲
Sélectionnez
// 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
))
}
}
}
}