2017-11-07 7 views
0

Qt3D보기가 포함 된 소프트웨어로 작업하고 있습니다. 이 3D보기를 사용하면 요소를 시각화 할 수 있습니다. 객체의 모든 렌더링 부분은 사용자 정의 재료/쉐이더가있는 QML로 수행됩니다.Qt3D 동적 텍스처

텍스쳐링을 위해 텍스쳐를 셰이더에 전달하는 머티리얼을 생성 할 수 있습니다. 텍스처를 담고있는 QML 객체는 Texture2D입니다 (C++ 구현은 QTexture2D입니다)

제 생각에는 텍스처 내용을 동적으로 변경하는 방법을 찾지 못했습니다. 소프트웨어에서 사용자는 디스크에서 이미지를로드 할 수 있습니다. 이 이미지에서 QImage 인스턴스를 제대로 만들 수 있습니다.

질문 : 저는 C++에서 QImage 인스턴스를 가지고 있으며이를 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 유형의 속성 만 있으면됩니다.

관련 문제