QT3D-如何不绘制网格

Qt3D - how to not draw the meshes?

本文关键字:网格 绘制 何不 QT3D-      更新时间:2023-10-16

我不想在场景上绘制一些对象。在正常的OpenGL中,我们只需要调用与绘制网格有关的函数。

不幸的是,我在QML中没有发现这种"功能"。该实体不包含"可见性"属性等。当然,我们可以尝试将统一发送到着色器并在需要时丢弃渲染 - 它将起作用,但这种方法看起来不好。

应该在CPP文件中创建QML或完整渲染功能来做到这一点?

是的。

最简单的解决方案是从您的实体中删除材料。您会有这样的东西:

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] : []
}

另一个解决方案(也许更困难)是在材料中使用的效果中使用过滤器。效果组件将具有一个或几个渲染通道。这些渲染通行证中的每一个都可以具有过滤器键:

RenderPass {
    id: myPass
    filterKeys: [ FilterKey { name: "PassType"; value: "customFilterIdString" } ] // <-- This line here
    renderStates: [
        BlendEquationArguments {
            ...
        }, 
     ...
    ]
}

可以使用RenderPassFilter组件在渲染图中过滤每个渲染通行证。这使您可以跳过整个对象并订购通过的方式。这有点更高级,我认为如果您只想隐藏特定的对象,我不需要它,但请不要犹豫阅读DOC并使用这些组件

寻找示例

最简单的方法实际上是将实体的启用属性设置为false。

对于更精细,更通用的控件,您可以使用Qlayer组件。