如何使用 C++ 或 Python 在 Qt3D 中创建纹理并将其应用于对象?
How to create and apply texture to object in Qt3D with C++ or Python?
我正在努力在 Qt 中创建和应用基本纹理。我正在尝试使用 QDiffuseSpecularMaterial Class
但它的地图是 QVariant
类型的。我想我应该使用 QAbstractTexture Class
加载纹理,然后以某种方式将它们转换为 QVariant
。问题是 QAbstractTexture Class
没有任何加载纹理的方法。有一个 addTextureImage
方法但它的参数是 QAbstractTextureImage Class
仍然没有任何加载方法。即使我可以以某种方式加载纹理,我也不知道如何将它们转换为 QVariant
。有谁知道如何创建任何基本图像并将其应用于任何基本 3D 对象?是否可以使用 QImage
或 QPixmap
并以某种方式将它们转换为纹理或 QVariant
?
你走在正确的轨道上。根据docs.
,QDiffuseSpecularMaterial
的QVariants
要么是素色要么是纹理
现在,如果要提供纹理,则必须使用 QTexture2D
(I assume you want to provide a 2D image) which inherits from QAbstractTexture
. To actually make QTexture2D
use your textures, you have to use addTextureImage
(a function defined in QAbstractTexture
). addTextureImage
accepts QAbstractTextureImages
。 类 QPaintedTextureImage
和 QTextureImage
都继承自 QAbstractTextureImage
- 使用前者,你可以使用 QPainter
手动绘制纹理,使用后者你可以提供URL 添加到您的纹理文件。
这是来自 a project I forked 的示例:
Entity {
id: root
Texture2D{
id: texture
TextureImage {
source: "qrc:/man.png"
}
}
RenderableEntity{
id: chest
source: "qrc:/man.obj"
material: DiffuseMapMaterial {
id: material
diffuse: texture
specular: Qt.rgba( 0.2, 0.2, 0.2, 1.0 )
shininess: 2.0
}
}
}
我正在努力在 Qt 中创建和应用基本纹理。我正在尝试使用 QDiffuseSpecularMaterial Class
但它的地图是 QVariant
类型的。我想我应该使用 QAbstractTexture Class
加载纹理,然后以某种方式将它们转换为 QVariant
。问题是 QAbstractTexture Class
没有任何加载纹理的方法。有一个 addTextureImage
方法但它的参数是 QAbstractTextureImage Class
仍然没有任何加载方法。即使我可以以某种方式加载纹理,我也不知道如何将它们转换为 QVariant
。有谁知道如何创建任何基本图像并将其应用于任何基本 3D 对象?是否可以使用 QImage
或 QPixmap
并以某种方式将它们转换为纹理或 QVariant
?
你走在正确的轨道上。根据docs.
,QDiffuseSpecularMaterial
的QVariants
要么是素色要么是纹理
现在,如果要提供纹理,则必须使用 QTexture2D
(I assume you want to provide a 2D image) which inherits from QAbstractTexture
. To actually make QTexture2D
use your textures, you have to use addTextureImage
(a function defined in QAbstractTexture
). addTextureImage
accepts QAbstractTextureImages
。 类 QPaintedTextureImage
和 QTextureImage
都继承自 QAbstractTextureImage
- 使用前者,你可以使用 QPainter
手动绘制纹理,使用后者你可以提供URL 添加到您的纹理文件。
这是来自 a project I forked 的示例:
Entity {
id: root
Texture2D{
id: texture
TextureImage {
source: "qrc:/man.png"
}
}
RenderableEntity{
id: chest
source: "qrc:/man.obj"
material: DiffuseMapMaterial {
id: material
diffuse: texture
specular: Qt.rgba( 0.2, 0.2, 0.2, 1.0 )
shininess: 2.0
}
}
}