对的,这是可能的。
最简单的解决方案是从您的实体中移除材料。你会有这样的事情:
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] : []
}
Run Code Online (Sandbox Code Playgroud)
另一种解决方案(可能有点困难)是在您在材质中使用的效果中使用过滤器。Effect 组件将有一个或多个 RenderPass。这些渲染通道中的每一个都可以有过滤器键:
RenderPass {
id: myPass
filterKeys: [ FilterKey { name: "PassType"; value: "customFilterIdString" } ] // <-- This line here
renderStates: [
BlendEquationArguments {
...
},
...
]
}
Run Code Online (Sandbox Code Playgroud)
可以使用 RenderPassFilter 组件在 RenderTree 中过滤每个渲染通道。这允许您跳过整个对象集并按照完成的方式排序。这有点高级,如果您只想隐藏特定对象,我认为您不需要它,但不要犹豫,阅读文档并查找使用这些组件的示例