我不想在场景中绘制一些物体。在普通的OpenGL中,我们只是不要调用与绘制网格相关的函数。
不幸的是,我没有在QML中找到这个“功能”。实体不包含“可见性”属性等。当然,我们可以尝试将制服发送到着色器,并在需要时丢弃渲染 - 它会起作用,但这种方法看起来不太好。
可以通过使用QML来实现,还是应该在cpp文件中创建完整的渲染功能?
答案 0 :(得分:3)
是的,这是可能的。
最简单的解决方案是从您的实体中删除材料。 你会有这样的事情:
Entity {
property bool visible: true // or ideally, dynamically read from a c++ property or whatever suits you
Material {
id: myMaterial
// stuff
}
GeometryRenderer {
id: myRenderer
// stuff
}
components: visible ? [myMaterial, myRenderer] : []
}
另一种解决方案(可能有点困难)是在材质中使用的效果中使用滤镜。 Effect组件将具有一个或多个RenderPasses。每个渲染过程都可以有过滤键:
RenderPass {
id: myPass
filterKeys: [ FilterKey { name: "PassType"; value: "customFilterIdString" } ] // <-- This line here
renderStates: [
BlendEquationArguments {
...
},
...
]
}
可以使用RenderPassFilter组件在RenderTree中过滤每个渲染过程。这允许您跳过整个对象集并按顺序完成传递。这有点高级,如果您只想隐藏特定对象,我认为您不需要它,但不要犹豫,阅读文档并使用这些组件查找示例
答案 1 :(得分:1)
最简单的方法是将实体的enabled property设置为false。
对于更精细和更多功能的控制,您可以查看使用QLayer组件。