qtdoc/examples/demos/dice/Scene.qml

110 lines
2.7 KiB
QML

// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick3D
import QtQuick3D.Physics
import QtQuick3D.Helpers
Item {
id: item
property real settingGravity: 980.7
property real settingsStaticFriction: 0.5
property real settingsDynamicFriction: 0.5
property real settingsRestitution: 0.5
function spawnDice(numberOfDice, rollForce, diceWidth) {
diceSpawner.spawnDice(numberOfDice, physicsMaterial, rollForce, diceWidth)
}
function setDiceWidth(diceWidth) {
diceSpawner.setDiceWidth(diceWidth);
}
PhysicsWorld {
id: physicsWorld
running: true
enableCCD: true
scene: viewport.scene
gravity: Qt.vector3d(0, -settingGravity, 0)
typicalLength: 1
typicalSpeed: 1000
minimumTimestep: 15
maximumTimestep: 20
}
PhysicsMaterial {
id: physicsMaterial
staticFriction: settingsStaticFriction
dynamicFriction: settingsDynamicFriction
restitution: settingsRestitution
}
OrbitCameraController {
anchors.fill: parent
origin: originNode
camera: camera
}
View3D {
id: viewport
anchors.fill: parent
camera: camera
Node {
id: originNode
eulerRotation: Qt.vector3d(-14.2885, 410.287, 0)
PerspectiveCamera {
id: camera
position: Qt.vector3d(0, -20, 60)
clipFar: 1000
clipNear: 0.1
}
}
environment: SceneEnvironment {
clearColor: "white"
backgroundMode: SceneEnvironment.SkyBox
antialiasingMode: SceneEnvironment.MSAA
antialiasingQuality: SceneEnvironment.High
lightProbe: proceduralSky
}
Texture {
id: proceduralSky
textureData: ProceduralSkyTextureData {
sunLongitude: -115
}
}
Node {
id: scene
DirectionalLight {
eulerRotation: Qt.vector3d(-45, 25, 0)
castsShadow: true
brightness: 1
shadowMapQuality: Light.ShadowMapQualityVeryHigh
}
PhysicalTable {
id: table
}
DiceSpawner {
id: diceSpawner
}
Carpet {
position: Qt.vector3d(0, -50, 0)
}
// floor
StaticRigidBody {
position: Qt.vector3d(0, -50, 0)
eulerRotation: Qt.vector3d(-90, 0, 0)
collisionShapes: PlaneShape {}
}
}
}
}