Qt Quick 3D - XR シンプルタッチの例
Qt Quick 3D Xr のハンドトラッキング入力をデモします。
このサンプルでは、Qt Quick 3D Xr のハンドトラッキング API を使用して、シーン内の 2D および 3D オブジェクトを操作する方法を示します。xr_simpleの例の基本的な構造に従っています。
2つの手をサポートする必要があるので、繰り返しを避けるために、それぞれの手に必要なすべてのロジックをカプセル化するコンポーネントを作成することから始めます:
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 } } }
このコンポーネントには、人差し指の3D位置を示すXrController 、手の位置を示すXrHandModel 。onTouchPositionChanged
ハンドラーが、マジックが起こる場所です。XrView.processTouch ()を呼び出します:3Dタッチ位置をXrItem の2D位置にマップしようとし、アイテムが見つかればタッチイベントを送信します。そして、3D位置から2Dサーフェス上のタッチポイントまでのオフセットを返します。そのオフセットを使ってXrHandModel の位置をずらし、手がサーフェスで止まっているように見せます。
注意: Apple Vision Proでは、ユーザーの実際の手が表示され、XrHandModel が表示されないため、この効果は働きません。
最後に、3Dインタラクションを行います。ここで、buttons
は、handleTouch
の機能を持つ3Dボタンのグループです。(この実装はXRに特化したものではないので、詳細はここでは説明しない)。
XrOrigin の中にハンドコンポーネントのインスタンスを2つ作成します:
XrOrigin { id: theOrigin z: 50 Hand { id: rightHandModel hand: XrHandModel.RightHand touchId: 0 } Hand { id: leftHandModel hand: XrHandModel.LeftHand touchId: 1 } } xrOrigin: theOrigin
また、原点はシーンの原点から50センチメートルの位置にあります。
シーンの残りの部分には、いくつかの3Dモデルと、タッチ・イベントに反応するXrItem 。
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。