qml - QT3D QML RenderPassFilter 有几个关键似乎有问题

标签 qml qt3d

我刚刚开始使用 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 列表中的 int 相匹配(但所有列表都必须匹配)...如果这是有道理的。无论如何,问题仍然存在:如何使用 RenderPassFilter 来允许包含 filter1 的元素或filter2

最佳答案

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

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

RenderPassFilter {
  matchAny: [FilterKey{name: "type"; value: "filter1"}]
  // ... stuff
}

表示如果渲染 channel 至少包含过滤器 FilterKey{name: "type";值:“过滤器1”}

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

RenderPassFilter {
  matchAny: [FilterKey{name: "type"; value: "filter1"}]
  // ... stuff
}
RenderPassFilter {
  matchAny: [FilterKey{name: "type"; value: "filter2"}]
  // ... stuff
}

关于qml - QT3D QML RenderPassFilter 有几个关键似乎有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44311397/

相关文章:

qml - 如何在 BlackBerry 10 Cascades 中创建图像按钮?

c++ - Qt 部署的可执行文件打开空白应用程序

c++ - 触发鼠标按下事件但不触发鼠标移动事件

c++ - Qt3d/C++ - 如何使用 frameGraphe 来实现轮廓?

c++ - 用Qt3D画三角形

qt - 如何通过自己读取文件来绘制从 qt3d 中的 .obj(wavefront) 文件加载的网格?

c++ - QML:在 C++ 中更改其模型后,GridView 不会更新

qt - 如何从QML中的GridView或ListView获取实例化的委托(delegate)组件

qt - QML 图像平滑属性不起作用

c++ - Qt3D QtQuick Scene2D 使用 C++