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,带有读取、写入和通知选项
我正在开发包含 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,带有读取、写入和通知选项