Qt3D动态贴图

Qt3D dynamic texture

我正在开发包含 Qt3D 视图的软件。 这种 3D 视图使我们能够可视化元素。对象的所有渲染部分都是在 QML 中使用自定义 materials/shaders.

完成的

我能够创建一种材质,将纹理传递给着色器进行纹理化。保存纹理的 QML 对象是 Texture2D(它的 c++ 实现是 QTexture2D

我的问题是我找不到动态更改纹理内容的方法。 在该软件中,用户可以从光盘加载任何图像。我可以从这个图像正确地创建一个 QImage 实例。

所以问题是: 我在 C++ 中有一个 QImage 实例,我想将它转换为 QTexture2D 实例,以便我可以将它传递给 QML 端。

我该怎么做?

我已经查看了 QAbstractTexture 和 QAbstractTextureImage 类(及其子项),但找不到从 QImage 创建其中任何一个的方法

好吧,好久不见,这是我使用的解决方案:

在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 对象的引用。这个对象只需要一个 属性 类型的 QString,带有读取、写入和通知选项