2017-12-06 8 views
1

シーンにいくつかのオブジェクトを描きたくないです。通常のOpenGLでは、メッシュの描画に関連する関数を呼び出さないだけです。Qt3D - メッシュを描画しない方法は?

残念ながら、QMLでこの「機能」が見つかりませんでした。エンティティには「可視性」属性などが含まれていません。もちろん、シェーダにユニフォームを送信し、必要に応じてレンダリングを破棄することができます。動作しますが、この方法はうまく見えません。

これは、QMLを使用することで可能ですか、完全なレンダリング機能をcppファイルで作成する必要がありますか?

答えて

2

はい、可能です。

最も簡単な解決策は、エンティティからマテリアルを削除することです。 あなたはこのようなものだろう:

Entity { 
    property bool visible: true // or ideally, dynamically read from a c++ property or whatever suits you 

    Material { 
     id: myMaterial 
     // stuff 
    } 

    GeometryRenderer { 
     id: myRenderer 
     // stuff 
    } 

    components: visible ? [myMaterial, myRenderer] : [] 
} 

別の解決策は、(多分もう少し難しい)あなたの材料に使うエフェクトでフィルタを使用することですが。 エフェクトコンポーネントには、1つまたは複数のRenderPassがあります。これらのそれぞれは、パスがフィルタキーを持つことができるレンダリング:

RenderPass { 
    id: myPass 

    filterKeys: [ FilterKey { name: "PassType"; value: "customFilterIdString" } ] // <-- This line here 

    renderStates: [ 
     BlendEquationArguments { 
      ... 
     }, 
    ... 
    ] 
} 

それぞれのパスはRenderPassFilterコンポーネントを使用して、あなたのRenderTreeでフィルタリングすることができますレンダリング。これにより、オブジェクト全体のセットをスキップし、パスの実行順序を指定できます。これはもう少し進歩しており、特定のオブジェクトを隠すだけの場合は必要ではないと思っていますが、ドキュメントを読んで、これらのコンポーネントを使って例を探すことを躊躇しないでください

関連する問題