gpt4 book ai didi

c++ - Qt3D动态贴图

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:07:38 30 4
gpt4 key购买 nike

我正在开发包含 Qt3D View 的软件。这种 3D View 使我们能够可视化元素。对象的所有渲染部分都在 QML 中使用自定义 Material /着色器完成。

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

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

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

我该怎么做?

我已经查看了 QAbstractTexture 和 QAbstractTextureImage 类(及其子类),但找不到从 QImage 创建这些类的方法

最佳答案

好吧,经过很长时间,这是我使用的解决方案:

仅在 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 类型的属性

关于c++ - Qt3D动态贴图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47161744/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com