如何将QPaintedTextureImage加载到QTextureMaterial中?

时间:2019-05-24 13:06:11

标签: qt qt3d

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

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

有什么主意吗?

1 个答案:

答案 0 :(得分:0)

知道了!

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);