如何将QImage从C++发送到QML到Qt3D实体以将其用作纹理?
How to send QImage to Qt3D Entity from C++ to QML for using it as texture?
我需要在 3D 场景中更改平面的纹理。在C++的后端类中,我制作了一个新的 QImage 来设置纹理。我想将其作为信号发送到我的 QML,并将其分配给平面材料属性。
但看起来TextureMaterial等只能使用纹理文件的URL路径。我无法将图像保存到硬盘驱动器以将其用作 URL 路径。太长了。我需要在一秒钟内更改我的纹理 20+ 次,并且该程序应该在同一时间内做其他事情。
有什么办法可以做到这一点吗?
你可以看看我在Qt3D中对背景图像的实现。
我实现您正在寻找的方法是使用类QTextureMaterial
、QTexture2D
和QPaintedTextureImage
。我必须在绘制图像之前翻转图像,这就是我QPaintedTextureImage
子类的原因,但这也可能正是您所需要的。而不是像我那样从磁盘加载纹理,您可以将子类上的QImage
设置为属性。你只需要让C++类可用于QML并将其设置在你的飞机上(也许你甚至可以直接使用PaintedTextureImage
,用他们的JavaScript风格的语言编写图像绘画)。
您可以将QPaintedTextureIage
添加到QTexture2D
,然后将结果设置为QTextureMaterial
上的纹理。不过,我不确定这是否会产生最佳性能。
您也可以尝试遵循这些步骤,但它们似乎涉及更多。这意味着您必须实现自己的QAbstractTextureImage
版本并返回相应的QTextureImageDataGeneratorPtr
。您可以查看来源以更好地了解。
相关文章:
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- SFML纹理像播放器
- OpenGL大的3D纹理(>2GB)非常慢
- 使用指针重新分析实体
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 如何使用tinyxml2从XML加载父实体和子实体
- 着色器纹理值与创建纹理时写入的值不同
- OpenGL将纹理四边形渲染为(0,0)
- 不能将 "void *" 类型的值分配给类型 "TCHAR" 的实体
- 宽度为奇数的16位纹理为片状
- 使用 CUDA 和纹理进行图像减法
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 在不使用统一的情况下将纹理传递给 GLSL 着色器?
- 将使用太多的纹理插值器 - 带旋转的着色器
- dx11 渲染到纹理仅显示透明颜色
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- 如何在 ECS 模型中组织实体?
- 如何使用 DXGI 格式DXGI_FORMAT_R1_UNORM创建 2D 纹理?
- 为什么我们不在下面给出的代码中使用指针来实例化C++的实体对象?
- 如何将QImage从C++发送到QML到Qt3D实体以将其用作纹理?