如何使用 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 对象?是否可以使用 QImageQPixmap 并以某种方式将它们转换为纹理或 QVariant

你走在正确的轨道上。根据docs.

QDiffuseSpecularMaterialQVariants要么是素色要么是纹理

现在,如果要提供纹理,则必须使用 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。 类 QPaintedTextureImageQTextureImage 都继承自 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
        }
    }
}