带有几个键的 QT3D QML RenderPassFilter 似乎有问题
QT3D QML RenderPassFilter with several key seems bugged
我刚开始使用 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
的意思可能与我想的相反:元素中的任何过滤键都必须与 int 相匹配matchAny 列表(但必须匹配所有列表)...如果有意义的话。无论如何,问题仍然存在:如何使用 RenderPassFilter 允许包含 filter1
或 filter2
的元素?
好的,经过多次尝试,我得到的是:
1) 我在问题的编辑中写的是正确的:使用
RenderPassFilter {
matchAny: [FilterKey{name: "type"; value: "filter1"}]
// ... stuff
}
意味着如果包含 至少 过滤器 FilterKey{name: "type"; value: "filter1"}
,渲染过程将被执行
2) 测试 pass 是否具有类型 filter1
或 filter2
的唯一方法是创建两个不同的 renderPassFilters:
RenderPassFilter {
matchAny: [FilterKey{name: "type"; value: "filter1"}]
// ... stuff
}
RenderPassFilter {
matchAny: [FilterKey{name: "type"; value: "filter2"}]
// ... stuff
}
我刚开始使用 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
的意思可能与我想的相反:元素中的任何过滤键都必须与 int 相匹配matchAny 列表(但必须匹配所有列表)...如果有意义的话。无论如何,问题仍然存在:如何使用 RenderPassFilter 允许包含 filter1
或 filter2
的元素?
好的,经过多次尝试,我得到的是:
1) 我在问题的编辑中写的是正确的:使用
RenderPassFilter {
matchAny: [FilterKey{name: "type"; value: "filter1"}]
// ... stuff
}
意味着如果包含 至少 过滤器 FilterKey{name: "type"; value: "filter1"}
2) 测试 pass 是否具有类型 filter1
或 filter2
的唯一方法是创建两个不同的 renderPassFilters:
RenderPassFilter {
matchAny: [FilterKey{name: "type"; value: "filter1"}]
// ... stuff
}
RenderPassFilter {
matchAny: [FilterKey{name: "type"; value: "filter2"}]
// ... stuff
}