簡體   English   中英

Qt3d qml用戶輸入

[英]Qt3d qml user input

我是Qt3d的新手,我需要處理多個模型的場景用戶輸入。 特別是我需要找到用戶點擊的模型。 我嘗試使用mouseHandler和ObjectPicker,但它似乎不起作用。 有人有例子嗎?

例如,如果我有:

Entity {

 Camera { id: camera ... }

 FirstPersonCameraController {
  camera: camera
 }

 components: [
  RenderSettings{
    activeFrameGraph: ForwardRenderer {
      camera: camera
      clearColor: "transparent"
    },
    InputSettings{}    
  ]

 MouseDevice {
  id: mouse1
  sensitivity: 0.1
 }

 SphereMesh {
  id: sphereMesh
  radius: 3
 }

 PhongMaterial{
  id: material
 }

 Entity {
  id: sphere1
  components: [sphereMesh, material]
  MouseHandler {
   sourceDevice: mouse1
   onClicked: console.log("[sphere 1] clicked"
  }
 }

 Entity {
  id: sphere2
  components: [sphereMesh, material]
  MouseHandler {
    sourceDevice: mouse1
    onClicked: console.log("[sphere 2] clicked"
  }
 }
}

我需要區分用戶是否點擊了sphere1或sphere2,但如果我點擊球體,我看不到任何日志!

  • 您需要創建一個ObjectPicker並將其作為組件附加到每個實體。 你可以刪除MouseHandler的東西。
Entity {
  id: sphere2
  components: [sphereMesh, material, spherePicker]      
}

ObjectPicker{
  id: spherePicker
  onPressed:{
     console.log("Sphere clicked")
  }
}
  • 請注意,默認情況下,這將執行邊界框光線投射,因此您很可能單擊網格附近但不完全在其上,它將注冊單擊。 如果要進行三角形拾取,可以通過更改rootEntity的pickingSettings組件來指定,如果這對您來說是個問題,可以解決這個問題。 我假設這將比邊界框光線投射慢得多,但是對於大的100 mb .stl文件,我沒有注意到任何可見的減速。
 components: [
   RenderSettings{
   activeFrameGraph:ForwardRenderer {
      camera: camera
      clearColor: "transparent"
   },
   InputSettings{}
   pickingSettings.pickMethod: PickingSettings.TrianglePicking
   pickingSettings.faceOrientationPickingMode: PickingSettings.FrontAndBackFace 
   ]
  • 如果你想知道按下對象的世界空間在哪里,大多數ObjectPicker方法都有一個你可以看到的PickEvent。
    ObjectPicker{
       onPressed:{
         console.log("Pressed at: " + pick.worldIntersection)
         //If using triangle picking, you can also see index of the pressed triangle
         console.log("Triangle index: " + pick.triangleIndex)
       }
    }
  • 另外需要注意的是:你會看到對於ObjectPicker,我使用onPressed而不是onClicked。 對於大網格(比如90mb .stl文件),onClicked是不可預測的。 我點擊網格有時它會發射,有時它不會發射。 但是onPressed總會開火。 這是我對Qt 5.8和Qt 5.9的觀察。

相關文檔在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM