我正在开发包含Qt3D视图的软件。 这个3D视图允许我们可视化元素。对象的所有渲染部分都是使用自定义材质/着色器在QML中完成的。
我能够创建一种材质,将纹理传递到着色器以进行纹理处理。保存纹理的QML对象是Texture2D(它的c ++实现是QTexture2D)
我的问题是我找不到动态更改纹理内容的方法。 在软件中,用户可以从光盘加载任何图像。我可以从这张图片中正确创建一个QImage实例。
所以问题是: 我在c ++中有一个QImage实例,我想将它转换为QTexture2D实例,以便我可以将它传递给QML端。
我该怎么做?
我已经查看了QAbstractTexture和QAbstractTextureImage类(以及它们的子类),但找不到从QImage创建任何这些类的方法
答案 0 :(得分:1)
好吧,经过很长一段时间,这是我用过的解决方案:
仅在c ++中存储包含纹理路径的QString,并在QML中创建所有Texture对象。 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对象的引用。该对象只需要一个带有Read,Write和Notify选项的QString类型的属性