Revision control
Copy as Markdown
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick3D
import QtQuick3D.Helpers
import QtQuick3D.Xr
XrView {
id: xrView
referenceSpace: XrView.ReferenceSpaceLocalFloor
depthSubmissionEnabled: true
environment: SceneEnvironment {
id: sceneEnvironment
skyMaterial: ProceduralSkyMaterial {}
antialiasingMode: SceneEnvironment.MSAA
antialiasingQuality: SceneEnvironment.High
backgroundMode: SceneEnvironment.Color
clearColor: "skyblue"
probeHorizon: 0.5
}
DirectionalLight {
eulerRotation.x: -30
eulerRotation.y: -70
}
//! [origin]
XrOrigin {
id: theOrigin
z: 50
TouchHand {
id: rightHandModel
hand: XrHandModel.RightHand
view: xrView
touchId: 0
onTouchPositionChanged: buttons.handleTouch(touchPosition)
}
TouchHand {
id: leftHandModel
hand: XrHandModel.LeftHand
view: xrView
touchId: 1
onTouchPositionChanged: buttons.handleTouch(touchPosition)
}
}
xrOrigin: theOrigin
//! [origin]
Model {
id: floor
source: "#Rectangle"
eulerRotation.x: -90
scale: Qt.vector3d(5,5,5)
materials: [ PrincipledMaterial {
baseColor: "green"
}
]
}
Model {
id: table
property real height: 70
position: Qt.vector3d(0, height - 2.5, 0)
source: "#Cube"
scale: Qt.vector3d(1.5, 0.05, 0.6)
materials: PrincipledMaterial {
baseColor: "white"
}
}
Node {
id: buttons
y: table.height
z: 20
property ExampleButton activeButton: midButton
function handleTouch(touchPos : vector3d) {
for (const b of [leftButton, midButton, rightButton]) {
if (b.hit(touchPos)) {
if (buttons.activeButton !== b) {
buttons.activeButton = b
monitor.monitorRotation = b.degrees
}
break
}
}
}
ExampleButton {
id: leftButton
x: -20
on: buttons.activeButton === this
objectName: "Button 1"
degrees: -20
}
ExampleButton {
id: midButton
x: 0
on: buttons.activeButton === this
objectName: "Button 2"
degrees: 0
}
ExampleButton {
id: rightButton
x: 20
on: buttons.activeButton === this
objectName: "Button 3"
degrees: 20
}
}
Monitor {
id: monitor
y: table.height
eulerRotation.y: monitorRotation
property real monitorRotation: 0
Behavior on monitorRotation {
NumberAnimation { duration: 500 }
}
XrItem {
id: theScreen
y: monitor.yOffset + height
x: -width / 2
width: monitor.width
height: monitor.height
contentItem: ScreenContent {}
}
}
}