1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick
import QtTest
import QtQuick3D
import QtQuick3D.Physics
import QtQuick3D.Physics.Helpers
import Geometry
// This test tries repeatedly adding and removing a geometry from a triangle mesh.
// It should fallback to the source property.
Item {
width: 640
height: 480
visible: true
PhysicsWorld {
scene: viewport.scene
minimumTimestep: 16
maximumTimestep: 16
forceDebugDraw: true
}
View3D {
id: viewport
anchors.fill: parent
environment: SceneEnvironment {
clearColor: "#d6dbdf"
backgroundMode: SceneEnvironment.Color
}
PerspectiveCamera {
position: Qt.vector3d(-200, 100, 500)
eulerRotation: Qt.vector3d(-20, -20, 0)
clipFar: 5000
clipNear: 1
}
DirectionalLight {
eulerRotation.x: -45
eulerRotation.y: 45
castsShadow: true
brightness: 1
shadowFactor: 100
}
StaticRigidBody {
position: Qt.vector3d(0, -100, 0)
eulerRotation: Qt.vector3d(-90, 0, 0)
collisionShapes: PlaneShape {}
Model {
source: "#Rectangle"
scale: Qt.vector3d(10, 10, 1)
materials: DefaultMaterial {
diffuseColor: "green"
}
castsShadows: false
receivesShadows: true
}
}
DynamicRigidBody {
id: dynamicBox
property bool hit : false
onBodyContact: () => {
dynamicBox.hit = true
}
receiveContactReports: true
sendContactReports: true
position: Qt.vector3d(-50, 300, 0)
collisionShapes: ConvexMeshShape {
geometry: ExampleTriangleGeometry { }
}
Model {
geometry: ExampleTriangleGeometry { }
materials: PrincipledMaterial {
baseColor: "yellow"
}
}
onPositionChanged: frameAnimation.stepFrame()
}
StaticRigidBody {
id: staticBox
sendContactReports: true
position: Qt.vector3d(0, 0, 0)
scale: Qt.vector3d(1, 1, 1)
collisionShapes: TriangleMeshShape {
id: staticBoxShape
geometry: ExampleTriangleGeometry { }
source: "qrc:/data/tetrahedron.cooked.tri"
}
}
}
QtObject {
id: frameAnimation
property int frame: -1
function stepFrame() {
frame += 1;
let step = frame % 2;
if (step == 0) {
staticBox.scale = Qt.vector3d(100, 100, 100)
staticBoxShape.geometry = null
} else if (step == 1) {
staticBox.scale = Qt.vector3d(1, 1, 1)
let shape = Qt.createQmlObject(`
import QtQuick
import QtQuick3D
import QtQuick3D.Physics
import QtQuick3D.Physics.Helpers
import Geometry
ExampleTriangleGeometry { }
`,
frameAnimation,
"myGeometry"
);
staticBoxShape.geometry = shape
}
}
}
TestCase {
name: "scene"
when: dynamicBox.hit
function triggered() { }
}
}
|