Как вывести графику сгенерированную Open GL программно - чтобы сохранить в файл, например. Пытался - даже скриншот не снимает.
Этот топик читают: Гость
|
Ответов: 1309
Рейтинг: 49
|
|||
| карма: 3 |
|
|
Ответов: 1304
Рейтинг: 405
|
|||
|
Aziz, снял скрин без проблем на win64, есть и другой способ прочитать попиксельно с помощью GL_ReadPixels, данный способ очень долгий по времени, но с помощью его можно отрисовать из буфера без отрисовки на окне. Попадались в Нете способы и более быстрого рендера в битмап но мне данные манипуляции были не нужны.
code_31961.txt |
|||
| карма: 3 |
| ||
| файлы: 1 | code_31961.txt [4.7KB] [250] | ||
| Голосовали: | Aziz |
|
Ответов: 1309
Рейтинг: 49
|
|||
|
MAV, встречал в нете тоже, вроде как там не попиксельно, а с помощью GL_ReadPixels сразу дамп буфера происходил. Или просто я не разобрался.
Кстати, в вашей схеме у меня работает только ReadPixels, на скриншоте выходит только кнопка на сером фоне.. Но спасибо, хоть будет от чего отплясывать с бубнами..)) ------------ Дoбавленo в 22.22: Вот нашел решение где вроде не попиксельно: http://stackoverflow.com/questions/6006984/save-opengl-scene-to-a-tbitmap-glreadpixels-returning-empty-data Только довести до компонента знаний не хватает. |
|||
| карма: 3 |
|
|
Ответов: 1304
Рейтинг: 405
|
|||
|
Поздно зашёл уже сегодня не успею глянуть
на скриншоте выходит только кнопка на сером фоне а ОСь какая? и видеокарта не интел случайно? |
|||
| карма: 3 |
|
|
Ответов: 1309
Рейтинг: 49
|
|||
|
Ось вин 7, карта Ати радеон - ноут hp probook 4710s
|
|||
| карма: 3 |
|
|
Ответов: 1304
Рейтинг: 405
|
|||
|
Aziz, сделал пробный вариант на IC, скриншотит довольно шустро но в win7_64 имеются проблемки когда стиль окна не bsNone
screenshotogl.sha |
|||
| карма: 3 |
| ||
| файлы: 1 | screenshotogl.sha [4.7KB] [334] | ||
| Голосовали: | Aziz |
|
Ответов: 1309
Рейтинг: 49
|
|||
|
MAV, перезалей схемку плиз, а то форум пишет error.
|
|||
| карма: 3 |
|
|
Ответов: 1304
Рейтинг: 405
|
|||
|
перезалил
|
|||
| карма: 3 |
|
|
Ответов: 1309
Рейтинг: 49
|
|||
|
MAV, круто, спасибо, теперь начнем эксперименты!
|
|||
| карма: 3 |
|
|
Ответов: 1376
Рейтинг: 198
|
|||
|
Aziz, схема screenshotogl.sha работает через Canvas.Pixels, а вот вариант работающий через ScanLine, чуток быстрее, если пригодится...
code_31983.txt |
|||
| карма: 1 |
| ||
| файлы: 1 | code_31983.txt [4.8KB] [250] | ||
| Голосовали: | Aziz, MAV |
|
Ответов: 1309
Рейтинг: 49
|
|||
|
foksov, спасибо, да, гораздо быстрее - у меня первый 280 мс, второй 46.. Скриншоты это все конечно пригодится, но вот как напрямую из буфера мгновенно картинку получать - вот это было бы еще универсальнее. Но не знаю, возможно ли это. Может ли OGL создавать вывод на невидимой канве. Наверное, бред.) Вообще возможен "электроннный" вывод (невизуальный) из OGL?
|
|||
| карма: 3 |
|
|
Ответов: 1376
Рейтинг: 198
|
|||
|
Aziz писал(а): Может ли OGL создавать вывод на невидимой канве. Наверное, бред.) Вообще возможен "электроннный" вывод (невизуальный) из OGL?Вот ещё пример, с выводом в Image, без сохранения code_31984.txt |
|||
| карма: 1 |
| ||
| файлы: 1 | code_31984.txt [4.9KB] [297] | ||
| Голосовали: | MAV, Aziz |
|
Ответов: 1304
Рейтинг: 405
|
|||
|
Aziz писал(а): Вообще возможен "электроннный" вывод (невизуальный) из OGLAziz, да возможен, необходимо произвести рендер в "невидимый" буфер, а с него уже использовать картинку как текстуру. Собственно это возможности использования FBO. Элемент с примером я выкладывал. Хотя если результатом должен быть битмап то мы уже имеем в виде переменной Bmp: PBitmap;. foksov, поправка даёт 5-тикратный прирост скорости. А вот насчёт 32 bit это в данном случае сомнительно, зачем на 25 процентов увеличивать файл добавляя альфа канал заполненный нулями? ps: наверное стоит данную возможность в hiGL_Main, многие 3D движки умеють делать скриншоты без использования системных функций. |
|||
| карма: 3 |
|
|
Ответов: 1376
Рейтинг: 198
|
|||
|
MAV, перед сохранением можно и к 24 битам подогнать (Bmp.PixelFormat:=pf24bit;), типа "упаковать"
на скорости не должно отразиться |
|||
| карма: 1 |
|
|
Ответов: 1304
Рейтинг: 405
|
|||
|
foksov, в последнем примере раскоментируй Bmp.Free;, а отрисовку сцены надо запустить в паралельном потоке с задержкой 10 мс(как и на таймере).
|
|||
| карма: 3 |
|



Поиск
Друзья
Администрация