【问题标题】:Qt3D dynamic textureQt3D动态纹理
【发布时间】:2017-12-12 01:27:29
【问题描述】:

我正在开发包含 Qt3D 视图的软件。 这个 3D 视图允许我们可视化元素。对象的所有渲染部分都在 QML 中使用自定义材质/着色器完成。

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

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

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

我该怎么做?

我已经研究了 QAbstractTexture 和 QAbstractTextureImage 类(以及它们的子类),但找不到从 QImage 创建这些类的方法

【问题讨论】:

    标签: c++ qt qml qt3d


    【解决方案1】:

    嗯,过了好久,我用的解决办法是这样的:

    仅在 c++ 中存储包含纹理路径的 QString,并在 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 类型的属性

    【讨论】:

    • cppObjectReference.texturePath的类型是什么?文件的字符串?您是否设法使用 QImage 作为 TextureImage 的来源?
    • 那是一年多以前的事了,但我想一切都在这里:texturePath 是一个包含图像文件路径的 QString。我没有使用 QImage
    猜你喜欢
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多