QML,将多个网格组合成单个实体

And*_*ers 6 qt mesh qml 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]
    }
}
Run Code Online (Sandbox Code Playgroud)

我将网格放在一起的方法是将它们作为组件包含在单独的实体范围中,如最后一行所示.但是这种方法只渲染组件数组中的最后一个条目.在上面,那将是锥2.

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

Entity {
components: [conemesh1, conetransform1, combinedPicker]
}
Entity {
components: [conemesh2, conetransform2, combinedPicker]
}
Run Code Online (Sandbox Code Playgroud)

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

所以我的问题是:在Qml中将多个网格合并为一个网格时,有什么相关方法?

And*_*ers 5

我通过“分解” 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]
    }
}
Run Code Online (Sandbox Code Playgroud)