Как я могу загрузить QPaintedTextureImage в QTextureMaterial? - PullRequest
0 голосов
/ 24 мая 2019

Я использую Qt3D для создания панорамы 360 градусов, в которой изображение в равностороннем формате загружается поверх сетки сферы с отрицательным радиусом.Проблема в том, что мне нужно загрузить текстуру из памяти, а не из файла.

Для этого я разработал пользовательский QPaintedTextureImage с paint (), перегруженным для рисования из QImage.Это работает, но только когда подключено к QDiffuseMapMaterial.Поскольку я не хочу никакого светового эффекта (только оригинальный цвет пикселей), кажется, что QTextureMaterial будет правильным выбором, но я не знаю, как это сделать.

Есть идеи?

1 Ответ

0 голосов
/ 24 мая 2019

Понял!

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