Qt Quick 3D - XR 空間アンカーの例
Qt Quick 3D XR における空間アンカーの使用方法を示します。

このサンプルでは、XrSpatialAnchorListModel を使用して、環境内の実際の物理的なオブジェクトを表示し、それらとインタラクションを行う方法を示します。パストルーモードと完全没入型モードの両方をサポートしています。基本的な構造はxr_simpleサンプルに準拠しています。
この例の最も重要な部分は、XrSpatialAnchorListModel 上のRepeater3D です。各アンカーに対して、アンカーの体積を色で塗りつぶすボックスを作成します。色の選択は、アンカーの分類によって異なります。このボックスは、パススルーモードでは表示されません。さらに、小さなボックスを使用してアンカーの位置と向きを可視化しています:
Repeater3D {
id: spatialAnchors
model: XrSpatialAnchorListModel {
}
delegate: Node {
id: anchorNode
required property XrSpatialAnchor anchor
required property int index
position: anchor.position
rotation: anchor.rotation
Model {
pickable: true
z: anchorNode.anchor.has3DBounds ? anchorNode.anchor.offset3D.z / 2 * 100 : 0 // Position is center of 2D surface also for 3D anchors
scale: anchorNode.anchor.has3DBounds ? anchorNode.anchor.extent3D : Qt.vector3d(anchorNode.anchor.extent2D.x, anchorNode.anchor.extent2D.y, 0.01)
materials: PrincipledMaterial {
// Make anchor objects invisible in passthrough mode
baseColor: xrView.passthroughEnabled ? Qt.rgba(0, 0, 0, 0) : anchorColor(anchor)
alphaMode: xrView.passthroughEnabled ? PrincipledMaterial.Blend : PrincipledMaterial.Opaque
roughness: 0.7
}
source: anchorNode.anchor.has3DBounds ? "#Cube" : "#Rectangle"
property string anchorInfo: "anchor #" + anchorNode.index + ", " + anchorNode.anchor.classificationString
}
Model {
// Visualize anchor orientation
materials: PrincipledMaterial {
baseColor: anchorNode.anchor.has3DBounds ? anchorNode.anchor.has2DBounds ? "green" : "red" : "blue"
}
scale: Qt.vector3d(0.05, 0.05, 0.05)
source: "#Cube"
Model {
materials: PrincipledMaterial {
baseColor: "black"
}
scale: Qt.vector3d(0.1, 3, 0.1)
source: "#Cube"
y: 150
}
Model {
materials: PrincipledMaterial {
baseColor: "white"
}
scale: Qt.vector3d(3, 0.1, 0.1)
source: "#Cube"
x: 150
}
}
visible: anchor.has2DBounds || anchor.has3DBounds
}
}アンカーのボックスはピック可能であり、そのanchorInfo という文字列プロパティには、アンカーのclassificationString が格納されています。その後、コントローラーの位置に基づいてピック操作を行います(詳細についてはxr_inputの例を参照してください)。アンカーのボックスのいずれかに触れると、アンカー情報を含むラベルが表示されます:
Node {
id: labelNode
position: rightController.position
rotation: rightController.rotation
property int numAnchors: spatialAnchors.count
property string anchorInfo: "(no anchor)"
Node {
y: 15
x: -15
scale: Qt.vector3d(0.1, 0.1, 0.1)
Rectangle {
width: 300
height: 100
color: Qt.rgba(1,0.9,0.8,0.7)
radius: 10
border.width: 2
border.color: "blue"
Text {
anchors.fill: parent
anchors.margins: 10
textFormat: Text.StyledText
text: "Total anchors: " + labelNode.numAnchors + "<br>" + "Selected: " + labelNode.anchorInfo + "<br>" + "Press A to Capture/Update anchors"
}
}
}
}© 2026 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.