Ugolnik's Family blog

Различные заметки обо всем.

Browsing Posts tagged OpenGL

Simple Viewer GL Сегодня ночью взялся за доработку вьювера изображений – Simple Viewer. Давно хотелось отказаться от использования Gfl SDK. Эта библиотека является частью проекта XnView. Библиотека хорошая и удобная, хорошо документированная. Поддерживает более 100 графических форматов. Но она проприетарная.
Перейти от непосредственной работы с Xlib к OpenGL, что повысило бы скорость работы вьювера за счет аппаратного ускорения. Так же добавил возможность скроллинга и изменения масштаба с помощью мышки.
На данный момент использую Imlib2 для загрузки и декодирования изображений. Но т.к. Imlib2 не смог загрузить тестовый jpeg, созданный в GIMP, то мой выбор остановился на libjpeg. Для анимированных gif использую giflib.

Итак, что получилось в итоге, плюсы:

  • создание списка файлов и поиск позиции, с которой начался просмотр;
  • отказ от Gfl SDK в пользу Imlib2, libjpeg, libpng, giflib, libtiff;
  • поддержка JPEG через libjpeg;
  • поддержка PNG через libjpng;
  • поддержка GIF через giflib;
  • поддержка TIFF через libtiff;
  • поддержка PSD (еще не все фичи формата реализовал);
  • поддержка ICO (реализовал так же поддержку фреймов в формате PNG);
  • использование OpenGL;
  • отображение координаты и цвета пикселя под курсором (ключ командной строки -p или клавиша P);
  • разбиение больших изображений по нескольким текстурам;
  • быстрое скролирование изображения с помощью клавиатуры или мышки;
  • произвольное масштабирование изображения с помощью клавиатуры (- / +) или колеса мышки;
  • корректное автоматическое масштабирование изображений, не вмещающихся в окно вьювера;
  • отображение прогресса загрузки больших изображений;
  • возможность просмотра многостраничных изображений (клавиши PgUp / PgDn)

 
К сожалению есть и минусы:

  • анимированные GIF все еще не поддерживаются (но есть возможность просмотра отдельных фреймов);
  • нет поддержки многостраничных изображений сделана поддержка для TIFF, GIF, ICO;
  • нет никакой поддержки PSD; есть, сегодня ночью написал первую реализацию;
  • нельзя посмотреть EXIF (планирую сделать);
  • нет возможности переназначить “горячие” клавиши (планирую сделать);
  • нет информации о количестве бит на канал изображения изображения загруженные с помощью Imlib2 не имеют информации о кол-ве бит на пиксель;
  • нет возможности повернуть изображение (планирую сделать);
  • у меня есть изображение в формате jpeg (созданное для теста в GIMP), которое Imlib2 не может загрузить, хотя libjpeg спокойно его грузил; перешел на libjpeg – теперь проблем с JPEG нет;
  • не реализована загрузка огромных изображений маленькими блоками (это должно позволить быстро грузить огромные изображения и сильно экономить память);

 


В данный момент исходные коды Simple Viewer GL доступны на SourceForge.net в SVN. Забрать последнюю версию исходных кодов можно следующей командой:

svn co https://simpleviewer.svn.sourceforge.net/svnroot/simpleviewer simpleviewer

 


Добрый человек с LOR скрывающийся под ником AnDoR сделал ebuild для вьювера – simpleviewer-gl-9999.ebuild. Большое ему за это спасибо.

 


Предыдущая версия Simple Viewer.

Прикручиваю к 2D-движку возможность загрузки и рендеринга 3D-моделей. Для чего это нужно пояснять не стану, т.к. на мой взгляд это и так очевидно.
На данный момент остановился на формате MD2 – формат хранения моделей, используемый в Quake II. Формат свободный, хорошо документированный и простой.

Статья с описанием формата md2: The Quake II’s MD2 file format.
Еще один туториал по загрузке и выгрузке MD2 с примерами: Saving and Loading 3D Animations.

В поисках утилиты захвата экрана OpenGL-приложения я наткнулся на captury (media-video/captury). Captury не умеет паковать фреймы “налету”, просто пишет их как есть в контейнер своего формата. Но есть утилита, которая умеет работать с этим форматом.

Захват:

$ captury --output-dir=./ -- your_opengl_application

Для старта захвата видео нужно нажать кнопочку F12 (настройки меняются в /etc/captury.conf, спасибо за подсказку ftrvxmtrx).

Воспроизведение:

$ cpsrecode -i capture.cps -o - | mplayer -demuxer y4m -

Кодирование в theora:

$ cpsrecode -i capture.cps -o out.ogg -c theora

или

$ cpsrecode -i capture.cps -o - | ffmpeg2theora -o out.ogg -

На сайте портал для программистов есть рубрика OpenGL.

Вот неполный список статей:

  • Отображение пикселей, битовых карт, шрифтов и изображений
  • Управление состоянием и рисование геометрических объектов
  • Цветовое наложение, сглаживание, туман и смещение полигонов
  • Вычислители и NURBS
  • Трюки и советы

Различные примеры и демонстрации использования OpenGL, GLSL. Все примеры просты до безобразия. Будут полезны новичку в программировании под OpenGL.

Уроки по OpenGL. Во всех уроках используется Cone3D. Среди уроков “Установка SDL и OpenGL библиотек в Linux”, “Загрузка моделей Quake 2 и PCX текстур”, “OCTREES”, “Рендеринг в текстуру”, “Динамические карты освещённости”.
Данные уроки достаточно давно не обновлялись. В “отмазке” написано – “использовать на свой страх и риск” ;)

NeonHelium – 48 уроков по OpenGL. Этот набор уроков гораздо полнее предыдущего.