QML,将多个网格合并为单个实体

时间:2018-10-08 10:36:15

标签: qt qml mesh qt3d

我正在尝试通过将三个ConeMeshes合并到一个实体中来创建可自定义的Qt3D组件。用户必须能够与自定义实体进行交互,因此我在文件中添加了ObjectPicker。通常,我将使用预定义的缩放的.obj文件,但我的经理希望这些对象由Qt直接绘制。

我要合并的两个网格是在单独的qml文件中定义的,因此可以在Scene3D中调用它。

Entity {
    ObjectPicker {
    id: combinedPicker
    }
    ConeMesh {
    id: conemesh1
    ...
    }
    ConeMesh {
    id: conemesh2
    ...
    }
    Transform {
    id: conetransform1
    }
    Transform {
    id: conetransform2
    }
    Entity {
    components: [conemesh1, conetransform1, conemesh2, conetransform2, combinedPicker]
    }
}

我将网格放在一起的方法是将它们作为组件封装在单独的Entity范围中,如最后一行所示。但是这种方法仅呈现components数组中的最后一个条目。上面是圆锥2。

以前,我尝试创建多个Entity实例,并将每个ID传递给ObjectPicker,

Entity {
components: [conemesh1, conetransform1, combinedPicker]
}
Entity {
components: [conemesh2, conetransform2, combinedPicker]
}

但是根据ObjectPicker的文档,对象选择器不被多个组件共享。

所以我的问题是这样的:在Qml中将多个网格合并到一个网格中时的正确方法是什么?

1 个答案:

答案 0 :(得分:4)

我通过“分解” ObjectPicker元素解决了这个问题,有效地使它成为了网格实体的同级。

Entity {
components: [conePicker]
Entity {
  id: pipeTopEntity
  components: [coneMeshTop, coneTransformTop, floorMaterialTop]
}
Entity {
  id: pipeBodyEntity
  components: [coneMeshBody, coneTransformBody, floorMaterialBody]
}
Entity {
  id: pipeBotEntity
  components: [ coneMeshBot, coneTransformBot,  floorMaterialBot]
}