带有几个键的 QT3D QML RenderPassFilter 似乎有问题

Posted

技术标签:

【中文标题】带有几个键的 QT3D QML RenderPassFilter 似乎有问题【英文标题】:QT3D QML RenderPassFilter with several key seems bugged 【发布时间】: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: [FilterKeyname: "type"; value: "filter1"] // <-- THIS LINE IS THE FILTER 

      CameraSelector 
        id: selector
        camera: mainCamera
      
    
  

这会正确显示包含FilterKeyname: "type"; value: "filter1" 的所有元素(并且仅显示那些元素)

用另一个过滤器替换它就可以了:

RenderPassFilter 
  matchAny: [FilterKeyname: "type"; value: "filter2"] // <-- THIS LINE IS THE FILTER 

  CameraSelector 
    id: selector
    camera: mainCamera
  

将显示过滤值为filter2而不是filter1的对象集

现在我的问题是 matchAny 字段是一个列表,所以我希望它能够包含多个元素。不幸的是,以下内容根本不显示任何元素

RenderPassFilter 
  matchAny: [FilterKeyname: "type"; value: "filter1", FilterKeyname: "type"; value: "filter2"] // <-- THIS LINE IS THE FILTER 

  CameraSelector 
    id: selector
    camera: mainCamera
  

我希望这会渲染所有具有值filter1 或值filter2 的元素。有什么方法可以做到这一点?

编辑:我刚刚在发布此内容时意识到 matchAny 可能与我的意思相反:元素中的任何过滤器键都必须匹配 matchAny 列表中的内容(但所有列表必须匹配)......如果这是有道理的。无论如何,问题仍然存在:如何使用 RenderPassFilter 来允许包含 filter1filter2 的元素?

【问题讨论】:

【参考方案1】:

好的,经过多次试验,我得到的是:

1) 我在问题的编辑中写的是正确的:使用

RenderPassFilter 
  matchAny: [FilterKeyname: "type"; value: "filter1"]
  // ... stuff

表示如果渲染通道包含至少过滤器FilterKeyname: "type"; value: "filter1"

,则将执行渲染通道

2) 测试 pass 是否为 filter1 filter2 类型的唯一方法是创建两个不同的 renderPassFilters:

RenderPassFilter 
  matchAny: [FilterKeyname: "type"; value: "filter1"]
  // ... stuff

RenderPassFilter 
  matchAny: [FilterKeyname: "type"; value: "filter2"]
  // ... stuff

【讨论】:

以上是关于带有几个键的 QT3D QML RenderPassFilter 似乎有问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用qml qt3d(qt)将对象旋转一个角度?

Qt3d QML:如何将文本作为覆盖添加到标准示例

C ++中的Qt3d输入

如何在 Qt3D 中创建撤消/重做操作? [关闭]

Qt3d用c ++输入

JMenuCheckBox:如何设置只有 1 个键的加速器