Название: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 13:42 Подскажите как передать картинку, нарисованную при помощи OpenGl.Например из приложения в приложение,ну или даже из одного класса в другой.
Название: Re: OpenGL Отправлено: spirit от Апрель 15, 2009, 13:49 из класса в класс: по указателю, по ссылке.
по-подробнее можно? Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 13:52 мня интересует не средства для передачи. меня больше интересует ЧТО передать.
Поподробнее: одник класс генерит изображение второй класс это изображение принимает и иотображает посредством Opengl. Название: Re: OpenGL Отправлено: spirit от Апрель 15, 2009, 13:53 ничего не понял опять. :) QPixmap или QImage передавай.
Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 13:56 я только начинаю изучать, вот и сам не понимаю как сделать.мне необходимо в одной программе генерить какое-либо изображение (ye например просто вращение фигуры), в другой программе это изображение обображать.ЧТобы генерация/отображение были быстрее использовать надо Opengl/
Название: Re: OpenGL Отправлено: spirit от Апрель 15, 2009, 14:01 берешь грабишь виджет где идет отрисовка при помощи QPixmap::grabWindow,
затем сохраняешь полученный результат в QByteArray вот таким образом Код затем шлешь этот байтАррей куда надо. в получающей проге делаешь обратную операцию про помощи QImage::fromData и отображаешь где надо. Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 14:03 а можно ну уж совсем подробно про QPixmap::grabWindow?
Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 14:05 точнее про операцию перехвата ::)
Название: Re: OpenGL Отправлено: spirit от Апрель 15, 2009, 14:14 1.получение картинки
Код см. Screenshot Example в ассистанте 2.сохранение Код 3.отправка ну тут тебе виднее как отправлять, через сокет, сохранение в файл. 4.восстановление изображения Код
Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 14:16 А рисовать я так понял надо в QPixmap?
Название: Re: OpenGL Отправлено: spirit от Апрель 15, 2009, 14:17 где рисовать? grabWidget/grabWindow есть только у QPixmap.
Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 14:18 Генерируемую картинку рисовать при помощи Opengl я должен в QPixmap?
Название: Re: OpenGL Отправлено: spirit от Апрель 15, 2009, 14:20 м...ты ж в QGLWidget работаешь с OpenGL на сколько я понимаю.
вот картинку этого окна тебе сделать и надо. или я опять нихрена не понял? ??? Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 14:21 Ну если в конечном итоге я должен отображить на QGLWdget, то думаю и генерить надо в подобном.
Название: Re: OpenGL Отправлено: spirit от Апрель 15, 2009, 14:26 так давай сначала, что тебе нужно:
-- ты русиешь картинки в QGLWidget, затем эту картинку тебе нужно сохранить и отправить другому приложению и уже там ее отобразить? -- или тебе просто нужно в одном приложении сгенерить картинку и отправить другому? -- ты хочешь использовать QGLWidget для рисование картинки или уже есть рабочая программа, которая при помощи QGLWidget рендерит какую-то инфу, а тебе нужно делать скриншоты того, что она рендерит? сформулируй нормально, что тебе нужно, пожалуйста, а то адекватного ответа будешь ждать долго. :) Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 14:30 Мне необходимо передать из одного приложения в другое именно Картинку.Для получения этой картинки целесообразно использовать QGLWidget.
Прошу прощенье за запутывание касательно отображение на втором приложении в QGLWidget. Название: Re: OpenGL Отправлено: spirit от Апрель 15, 2009, 14:32 ясно. ну значит, как и говорил, сделай скриншот QGLWidget, где рендерится картинка ну и дальше по пунктам как я описывал.
разве, что отображать, если хочешь, можно не в QLabel, а в QGLWidget, хотя в последнем случае не вижу никакого выиграша. :) Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 14:43 еще мне бы желательно, чтобы все это происходило как можно быстрее. и еще несколько вопросов:
1) когда я буду делать pixmap.save(&buffer, "PNG"); получается что я сделаю скрин с моего QGLWidget окна(в котором будет вращаться фигурка), затем передам его в буфер, и буфер сохраню в pixmap в формате png? 2)передавать буду через сокет,как мне именно передать pixmap? Если не влом :) хотелось бы разжованное все ) Итак конечно СПАСИБО ОГРОИНОЕ.НО если еще и это разжевать буду крайне признателен ))) Название: Re: OpenGL Отправлено: spirit от Апрель 15, 2009, 14:47 еще мне бы желательно, чтобы все это происходило как можно быстрее. и еще несколько вопросов: да1) когда я буду делать pixmap.save(&buffer, "PNG"); получается что я сделаю скрин с моего QGLWidget окна(в котором будет вращаться фигурка), затем передам его в буфер, и буфер сохраню в pixmap в формате png? 2)передавать буду через сокет,как мне именно передать pixmap? писать в сокент нужно через QIODevice::write, т.е.Если не влом :) хотелось бы разжованное все ) Итак конечно СПАСИБО ОГРОИНОЕ.НО если еще и это разжевать буду крайне признателен ))) Код
Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 14:52 ОГРОМНОЕ СПАСИБИЩЕ.Сегодня буду пробовать.
Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 15:17 А можно генерить те же самые картинки, но не на окне, с которого берем скрин, а в памяти?
Название: Re: OpenGL Отправлено: spirit от Апрель 15, 2009, 17:53 А можно генерить те же самые картинки, но не на окне, с которого берем скрин, а в памяти? можно.вот таким обрзом Код
Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 17:57 Ну получается что там будет всегда одна и таже картинка.нет?
Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 17:59 И намного ли быстрее будет генерация в памяти чем, предыдущий метод?
Название: Re: OpenGL Отправлено: spirit от Апрель 15, 2009, 18:01 я просто пример ривел. картинку ты можешь пересоздавать, не проблема.
на много-ли быстрее? если ты строишь 3D объекты, то быстрее конечно через OpenGL, а если простенькие картинки, то можно и этим методом воспользоваться. Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 18:34 можно еще вопрос касательно восстановления изображения.что должно быть в функции getScreenShot()?
и правильно ли я посылаю данные? void MyServer::sendToClient(QTcpSocket* pSocket, const QString& str) { QByteArray arrBlock; QDataStream out(&arrBlock, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_4); arrBlock = imageToByteArray(); out<<quint16(arrBlock.size() - sizeof(quint16)); pSocket->write(arrBlock); } Название: Re: OpenGL Отправлено: Alex Custov от Апрель 15, 2009, 18:52 мня интересует не средства для передачи. меня больше интересует ЧТО передать. Поподробнее: одник класс генерит изображение второй класс это изображение принимает и иотображает посредством Opengl. Я что-то не понял, если изображение уже есть, то почему бы его сразу не передать третьим сторонам? Изображение у тебя - это какая сущность? QImage? Массив байт? Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 18:55 QGLWidget
Название: Re: OpenGL Отправлено: Alex Custov от Апрель 15, 2009, 19:53 QGLWidget QGLWidget это OpenGL контекст, в который ты что-то рисуешь. Как ты рисуешь картинку? Через текстуры или по-другому? Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 20:02 Через метод PaintGl графичискими примитивами
Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 20:04 то spirit Спасибо, все заработало. только меня совсем не радует частота обновления :-[ ну очень маленькая ((( ~1 кадра в секунду
Название: Re: OpenGL Отправлено: spirit от Апрель 15, 2009, 20:20 то spirit Спасибо, все заработало. только меня совсем не радует частота обновления :-[ ну очень маленькая ((( ~1 кадра в секунду в смысле? частота обнавления где? на получателе?Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 20:41 да, на приемнике, не сервере все нормально вращается с частотой порядка 60 fps, когда запускаю клиент, посылаю запрос, сервер приостанавливается на полсекунды, потом вращается дальше, на клиенте отображается то что было на сервере. У мена на клиенте стоит таймер, по которому я посылаю запросы, интервал таймера можно ставить в процессе работы.Так вот при таймере 999 оно вроде бы как еще кое как работает, но дальше хуже.
Название: Re: OpenGL Отправлено: spirit от Апрель 15, 2009, 20:47 не понял почему останавливается.
покажи код, что на сервере происходит. Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 20:58 я лучше скину и клиента и сервера: но там много написано ::)
Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 15, 2009, 21:01 вот header'ы если надо.
Название: Re: OpenGL Отправлено: spirit от Апрель 16, 2009, 08:29 кстати, в QGLWidget есть метод grabFrameBuffer лучше через него картинки получать.
а это способ, что сейчас у тебя используется выступает общим случаем. :) Название: Re: OpenGL Отправлено: spirit от Апрель 16, 2009, 08:53 в общем добавь
Код в самый конец MyServer::sendToClient. но лучше работу запись данных в сокет вынести в другой поток. кстати, посмотри, что у тебя с отрисовкой не так, у меня в консоль валит такие мессаги Цитировать QPainter::restore: Unbalanced save/restore QPainter::pen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::save: Painter not active QPainter::translate: Painter not active QPainter::setPen: Painter not active QPainter::setBrush: Painter not active QPainter::restore: Unbalanced save/restore QPainter::begin: Paint device returned engine == 0, type: 1 QPainter::setClipRect: Painter not active QPainter::setPen: Painter not active QPainter::pen: Painter not active QPainter::begin: Paint device returned engine == 0, type: 1 QPainter::pen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::pen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::save: Painter not active QPainter::translate: Painter not active QPainter::setPen: Painter not active QPainter::setBrush: Painter not active QPainter::restore: Unbalanced save/restore QPainter::pen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::setPen: Painter not active QPainter::save: Painter not active QPainter::translate: Painter not active QPainter::setPen: Painter not active QPainter::setBrush: Painter not active QPainter::restore: Unbalanced save/restore QPainter::begin: Paint device returned engine == 0, type: 1 в чем там дело, не разбирался. :) Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 16, 2009, 14:16 Это я так понимаю, будет задержка 5 секунд прежде чем будет считан следующий пакет?
Название: Re: OpenGL Отправлено: spirit от Апрель 16, 2009, 14:18 Это я так понимаю, будет задержка 5 секунд прежде чем будет считан следующий пакет? нет, это максимальный таймаут, записаться может и быстрее.короче, у меня через каждую секунду новая картинка приходила. Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 16, 2009, 14:31 вообще мне надо чтобы не за секунду а за 1/50 секунды.с помощью чего этого добиться можно? и почему так тормозщит все?
Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 17, 2009, 12:59 Я кажетс понял что тормозит, это сама генерация картинки imageToByteArray(); может есть способ как-нибудь генерить картинку другим образом, побыстрее?
Название: Re: OpenGL Отправлено: ¤Se®ega¤ от Апрель 18, 2009, 01:39 а что можете сказать на счет использования renderPixmap(), там ведь и QPiaxmap::fromQImage даже не надо тогда делать???
|