Qt Quick 3D - ピッキングの例
モデルのピッキングをデモします。
このサンプルは、ピッキングのデモです。ピッキングできる3つの異なるアニメーションモデルがあります。モデルがピッキングされると、アニメーションは停止し、どのモデルがピッキングされたかを明確にするためにモデルの色が変更されます。ピッキング結果の詳細情報は、アプリケーションウィンドウの上部に表示されます。
モデルをピック可能にする
モデルをピック可能にするには、pickable プロパティをtrue
に設定する必要があります。また、ピックしたモデルの名前を表示できるように、objectName
を追加します。
Model { id: cubeModel objectName: "Cube" source: "#Cube" pickable: true property bool isPicked: false
isPicked
プロパティは、アニメーションと色の切り替えに使用するために追加しました。
materials: DefaultMaterial { diffuseColor: cubeModel.isPicked ? "#41cd52" : "#09102b" ... SequentialAnimation on eulerRotation { running: !cubeModel.isPicked
ピック結果の取得
実際のピッキングを行うには、MouseArea を追加して、View3D 全体をカバーする必要があります。
MouseArea { anchors.fill: view
マウスエリアのonClicked
ハンドラでは、pick メソッドを使用して、ピッキングの実際の結果を取得します。
var result = view.pick(mouse.x, mouse.y);
結果にtarget object がある場合は、結果の詳細を調べ、アプリケーション・ビューの上部にあるテキスト・フィールドに表示します。
if (result.objectHit) { var pickedObject = result.objectHit; // Toggle the isPicked property for the model pickedObject.isPicked = !pickedObject.isPicked; // Get picked model name pickName.text = pickedObject.objectName; // Get other pick specifics uvPosition.text = "(" + result.uvPosition.x.toFixed(2) + ", " + result.uvPosition.y.toFixed(2) + ")"; distance.text = result.distance.toFixed(2); scenePosition.text = "(" + result.scenePosition.x.toFixed(2) + ", " + result.scenePosition.y.toFixed(2) + ", " + result.scenePosition.z.toFixed(2) + ")"; localPosition.text = "(" + result.position.x.toFixed(2) + ", " + result.position.y.toFixed(2) + ", " + result.position.z.toFixed(2) + ")"; worldNormal.text = "(" + result.sceneNormal.x.toFixed(2) + ", " + result.sceneNormal.y.toFixed(2) + ", " + result.sceneNormal.z.toFixed(2) + ")"; localNormal.text = "(" + result.normal.x.toFixed(2) + ", " + result.normal.y.toFixed(2) + ", " + result.normal.z.toFixed(2) + ")";
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 ここで提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。