【发布时间】:2017-06-01 15:16:23
【问题描述】:
我刚开始使用 QML 创建 QT3D 场景。 我想过滤使用 RenderPassFilter 渲染场景的哪些元素。 这是我非常简单的渲染器:
import Qt3D.Core 2.0
import Qt3D.Render 2.0
Viewport {
id: root
property color clearColor: Qt.rgba(0, 0, 0.2, 1)
property Camera mainCamera
RenderSurfaceSelector {
id: surfaceSelector
// Clear Buffer
ClearBuffers {
buffers: ClearBuffers.ColorDepthBuffer
clearColor: root.clearColor
NoDraw {}
}
RenderPassFilter {
matchAny: [FilterKey{name: "type"; value: "filter1"}] // <-- THIS LINE IS THE FILTER
CameraSelector {
id: selector
camera: mainCamera
}
}
}
}
这会正确显示包含FilterKey{name: "type"; value: "filter1"} 的所有元素(并且仅显示那些元素)
用另一个过滤器替换它就可以了:
RenderPassFilter {
matchAny: [FilterKey{name: "type"; value: "filter2"}] // <-- THIS LINE IS THE FILTER
CameraSelector {
id: selector
camera: mainCamera
}
}
将显示过滤值为filter2而不是filter1的对象集
现在我的问题是 matchAny 字段是一个列表,所以我希望它能够包含多个元素。不幸的是,以下内容根本不显示任何元素
RenderPassFilter {
matchAny: [FilterKey{name: "type"; value: "filter1"}, FilterKey{name: "type"; value: "filter2"}] // <-- THIS LINE IS THE FILTER
CameraSelector {
id: selector
camera: mainCamera
}
}
我希望这会渲染所有具有值filter1 或值filter2 的元素。有什么方法可以做到这一点?
编辑:我刚刚在发布此内容时意识到 matchAny 可能与我的意思相反:元素中的任何过滤器键都必须匹配 matchAny 列表中的内容(但所有列表必须匹配)......如果这是有道理的。无论如何,问题仍然存在:如何使用 RenderPassFilter 来允许包含 filter1 或 filter2 的元素?
【问题讨论】: