如何将 QPaintedTextureImage 加载到 QTextureMaterial 中?

How can I load a QPaintedTextureImage into a QTextureMaterial?

我正在使用 Qt3D 创建一个 360 度全景查看器,其中等距柱状格式的图像加载在具有负半径的球体的网格上。问题是我需要从内存而不是文件加载纹理。

为了实现这一点,我开发了一个自定义的 QPaintedTextureImage,其中重载了 paint() 以从 QImage 中绘制。它有效,但仅当插入 QDiffuseMapMaterial 时。因为我不想要任何光效(只是像素的原始颜色),所以 QTextureMaterial 似乎是正确的选择,但我不知道该怎么做。

有什么想法吗?

知道了!

class MyQPaintedTextureImage : public Qt3DRender::QPaintedTextureImage
{
private:
    QImage image;
public:
    void setImage(QImage &i){
        image = i;
        setSize(i.size());
    }
    virtual void paint(QPainter *painter) override{
        painter->drawImage(0, 0, image);
    }
};

然后:

auto *image = new MyQPaintedTextureImage;
image->setImage(i);
auto *planeMaterial = new Qt3DExtras::QTextureMaterial;
planeMaterial->texture()->addTextureImage(image);
m_sphereEntity->addComponent(planeMaterial);