2017-06-01 41 views
0

我只是用QML創建QT3D場面開始。 我想濾除我的場景元素使用的是RenderPassFilter渲染。 這是我非常簡單的渲染:QT3D QML 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場是一個列表,所以我會excpect它能夠把幾個元素。不幸的是,以下完全不

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允許所有包含filter1filter2元素?

回答

0

好了,多次的試驗後,我什麼,我得到的是:

1)我在問題的編輯寫的是正確的:使用

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

意味着,渲染過程的時候,如果exectued它包含至少濾波器FilterKey{name: "type"; value: "filter1"}

2)中測試的唯一方法是一個通有類型filter1filter2是創建兩個不同的renderPassFilters:

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