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,但是如果我单击Sphere,我将看不到任何日志!
- 您需要创建一个对象点并将其作为组件将其附加到每个实体。您可以删除MouseHandler的内容。
Entity {
id: sphere2
components: [sphereMesh, material, spherePicker]
}
ObjectPicker{
id: spherePicker
onPressed:{
console.log("Sphere clicked")
}
}
- 请注意,默认情况下,这将进行边界框射线播放,因此您很有可能单击网格附近的某个地方,但并非完全在其上,并且会单击一次。如果您想进行三角挑选,则可以通过更改根源的选择组件来指定这一点,如果这是您的问题,这将解决此问题。我假设这会比边界盒射线播放要慢得多,但是使用大的100 MB .STL文件,我没有注意到任何可见的放缓。
components: [
RenderSettings{
activeFrameGraph:ForwardRenderer {
camera: camera
clearColor: "transparent"
},
InputSettings{}
pickingSettings.pickMethod: PickingSettings.TrianglePicking
pickingSettings.faceOrientationPickingMode: PickingSettings.FrontAndBackFace
]
- 如果您想知道在世界空间中的位置按下对象,那么大多数对象点方法都有一个可以查看的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)
}
}
- 要注意的另一件事要注意:您会看到,对于对象点击,我正在使用on plasted而不是被关闭。对于大型网格(例如90MB .STL文件),onclicked是无法预测的。我会单击网格,有时会发射,有时不会。但是,态度总是会开火。这是我对QT 5.8和QT 5.9的观察。
相关文档在这里
相关文章:
- C++如何通过用户输入删除列表元素
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 用户定义函数中的指针和输入
- 如何只允许用户输入正整数
- C++如何计算用户输入的数字中的偶数位数
- 通过for循环使用用户输入填充列表
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 在C++中,我如何接受不同于同一行的用户输入
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 当用户键入分隔符时,停止getline()输入
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 显示基于用户输入的整数的字符
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 如果用户没有输入任何内容或输入错误,如何重新输入用户的输入?
- 为什么在代码块中执行时会跳过输入用户输入的行?
- 使用 for 循环在数组中输入用户