Qt Quick 3D - XR Simple Touch Beispiel

Demonstriert die Eingabe durch Handverfolgung in Qt Quick 3D Xr.

Dieses Beispiel zeigt, wie man die Hand-Tracking-API in Qt Quick 3D Xr verwendet, um mit 2D- und 3D-Objekten in der Szene zu interagieren. Es folgt der Grundstruktur des xr_simple Beispiels.

Da wir zwei Hände unterstützen müssen, beginnen wir mit der Erstellung einer Komponente, die die gesamte Logik kapselt, die wir für jede Hand benötigen, um Wiederholungen zu vermeiden:

component Hand : Node {
    id: handComponentRoot
    property color color: "#ddaa88"
    required property int touchId
    property alias hand: handModel.hand

    property vector3d touchPosition: handController.pokePosition
    onTouchPositionChanged: {
        const scenePos = theOrigin.mapPositionToScene(touchPosition)
        const touchOffset = xrView.processTouch(scenePos, handComponentRoot.touchId)
        handModel.position = touchOffset
        buttons.handleTouch(scenePos)
    }

    XrController {
        id: handController
        controller: handComponentRoot.hand
    }
    XrHandModel {
        id: handModel
        materials: PrincipledMaterial {
            baseColor: handComponentRoot.color
            roughness: 0.5
        }
    }
}

Die Komponente enthält einen XrController, der die 3D-Position des Zeigefingers angibt, und einen XrHandModel, der zeigt, wo sich die Hand befindet. Der onTouchPositionChanged Handler ist der Ort, wo die Magie passiert. Wir rufen XrView.processTouch() auf, das die schwere Arbeit übernimmt: Er versucht, die 3D-Berührungsposition auf eine 2D-Position auf XrItem abzubilden und sendet ein Berührungsereignis, wenn er ein Element findet. Anschließend wird der Versatz zwischen der 3D-Position und dem Berührungspunkt auf der 2D-Oberfläche zurückgegeben. Dieser Versatz wird dann verwendet, um die Position der XrHandModel zu verschieben, damit die Illusion entsteht, dass die Hand von der Oberfläche aufgehalten wird.

Hinweis: Dieser Effekt funktioniert nicht auf dem Apple Vision Pro, da das System die echten Hände des Benutzers zeigt und die XrHandModel nicht angezeigt wird.

Schließlich führen wir die 3D-Interaktion durch. Hier ist buttons eine Gruppe von 3D-Schaltflächen, die eine handleTouch Funktion haben. (Die Implementierung ist nicht XR-spezifisch, daher werden die Details hier nicht dokumentiert).

Wir erstellen zwei Instanzen der Handkomponente innerhalb der XrOrigin, eine für jede Hand:

XrOrigin {
    id: theOrigin
    z: 50
    Hand {
        id: rightHandModel
        hand: XrHandModel.RightHand
        touchId: 0
    }
    Hand {
        id: leftHandModel
        hand: XrHandModel.LeftHand
        touchId: 1
    }
}
xrOrigin: theOrigin

Außerdem positionieren wir den Ursprung 50 Zentimeter vom Ursprung der Szene entfernt, was ein angenehmer Berührungsabstand sein sollte.

Der Rest der Szene enthält einige 3D-Modelle und eine XrItem, die auf Berührungsereignisse reagiert.

Beispielprojekt @ code.qt.io

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.