2017-11-07 16 views
0

私はQt3Dビューを含むソフトウェアを開発中です。 この3Dビューでは要素を視覚化できます。オブジェクトのすべてのレンダリング部分は、カスタムマテリアル/シェーダを使用してQMLで行われます。Qt3D動的テクスチャ

テクスチャのためにテクスチャをシェーダに渡すマテリアルを作成することができました。テクスチャを保持するQMLオブジェクトはTexture2Dです(そのC++の実装はQTexture2Dです)

私の問題は、テクスチャの内容を動的に変更する方法が見つからないことです。 ソフトウェアでは、ユーザーはディスクから任意のイメージを読み込むことができます。私はこのイメージからQImageインスタンスを適切に作成できます。

質問: 私はQ ++のインスタンスをC++に持っていますが、それをQTexture2Dインスタンスに変換してQML側に渡すことができます。

どうすればよいですか?

私はすでにまあ、長い時間の後、ここで私が使用したソリューションであるQAbstractTextureとQAbstractTextureImageクラス(とその子供たち)に見えたが、QImageの

答えて

0

からこれらのいずれかを作成する方法を見つけることができません:

テクスチャへのパスを含むQStringをC++で保存し、QMLですべてのテクスチャオブジェクトを作成します。 QMLは次のようになります。

MyDynamicTextureMaterial { // Custom material passing a Texture2D to the shader 
    id: myMaterial 

    texture: Texture2D { 
     id: myTexture 
     minificationFilter: Texture.Linear 
     magnificationFilter: Texture.Linear 
     wrapMode { 
      x: WrapMode.Repeat 
      y: WrapMode.Repeat 
     } 
     maximumAnisotropy: 16.0 
     TextureImage { 
      id: textureImage 
      layer: 0 
      mipLevel: 0 
      source: cppObjectReference.texturePath ? cppObjectReference.texturePath : "" 
     } 
    } 
} 

cppObjectReferenceは作成したcppオブジェクトへの参照です。このオブジェクトは、読み取り、書き込み、および通知のオプションを持つQString型のプロパティを必要とします。