Как визуализировать Qt4 QPixmap в Ogre 3D Texture или Mesh?пожалуйста, порекомендуйте - PullRequest
0 голосов
/ 21 апреля 2011

Прежде всего, пожалуйста, прости меня, если мой вопрос звучит примитивно и глупо. Я в основном C # .NET и разработчик баз данных, но я новичок в Ogre3D, и мой опыт разработки Qt4 / C ++ также довольно ограничен ...

У меня есть код, который отображает пользовательский виджет Qt4 (подкласс QWidget) на QPixmap, и я должен отобразить его на поверхности Ogre3D.

Я читал последнюю книгу по Ogre3D и искал пример кода QWidget-to-Ogre3D уже несколько дней, но не смог найти, как это сделать.

Я предполагаю, что мне нужно каким-то образом создать текстуру (или, может быть, сетку) вручную из QPixmap (возможно, сохраненную как байтовый массив с опцией "PNG" или "BMP"), но у меня возникли проблемы пытаясь понять, как это сделать.

Может ли кто-нибудь указать мне правильное направление, пожалуйста?

Большое спасибо заранее.


Вот что у меня сейчас есть:

m_currentGraph-> setFixedSize (QSize (WIDTH, HEIGHT));

QPainter Painter (this);

painter.end ();

QPixmap pixmap (WIDTH, HEIGHT);

m_currentGraph-> визуализации (& пиксельная);

QByteArray bytes;

буфер QBuffer (& bytes);

buffer.open (QIODevice :: WriteOnly);

pixmap.save (& buffer, "PNG"); // записывает растровое изображение в байты в формате PNG

// Как сделать это на Ogre3D ???

1 Ответ

0 голосов
/ 21 апреля 2011

Если вам нужен доступ к фактическим данным изображения, вам нужно использовать класс QImage, а не QPixmap. QImage предоставляет вам API для работы с пикселями, а не с изображением в целом. Таким образом, вы можете сделать одно из следующих действий:

1) Преобразуйте ваше растровое изображение в QImage, вызвав QPixmap :: toImage (), что, вероятно, довольно дорогая операция (требует ресурсов)

2) Поскольку QImage является QPaintDevice, как QPixmap, вы можете изменить свой код для отображения виджета в QImage, а не в QPixmap.

Чтобы получить доступ к текущим байтам, вы можете использовать метод QImage :: bits ().

Надеюсь, это поможет.

...