GLSL: Clock style bar

Clock (GLSL) Написал GLES шейдер, который имитирует круговое заполнение энергии (прогресса, маны, etc.). Код шейдера и демонстрация работы доступна на сайте ShaderToy.

#define M_PI 3.1415926535897932384626433832795

vec4 col = vec4(0.0, 0.0, 0.0, 0.0);

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    float angle = mod(iGlobalTime, M_PI * 2.0);

    vec2 p = (iResolution.xy - 2.0 * fragCoord.xy) / iResolution.y;

    float q = atan(-p.x, p.y);
    float f = step(0.0, cos((q + angle) * 0.5));

    // mix with texture
    vec2 uv = fragCoord.xy / iResolution.xy;
    vec4 tc = texture2D(iChannel0, uv);
    fragColor = mix(tc, col, f);
}

Захват видео и звука из OpenGL приложений под Linux

Эта заметка появилась взамен моей предыдущей заметки “Захват экрана OpenGL-приложения”, т.к. последняя устарела. Да и пакет media-video/captury бесследно исчез из дерева портежа. Впрочем и само приложение давно перестало обновляться.

Но не все так плохо, есть приложение glc, которое развивается и работает. При этом позволяет так же захватить и звук. К сожалению данного пакета нет в официальном дереве портежа, но есть в оверлее glc. Подключить оверлей можно так:

layman -f -a glc -o 'http://nullkey.ath.cx/glc/overlays.xml'

Установка производится как обычно:

emerge glc

Но предварительно придется размаскировать несколько пакетов:

media-video/glc
dev-libs/packetstream
dev-libs/elfhacks

Захват осуществляется командой

glc-capture -v 5 -f 20 -r 0.5 -i --disable-audio opengl_app

здесь -v 5 означает пятый уровень логирования;
а -f 20 означает с какой частотой будет захватываться видео;
параметр -r 0.5 означает фактор рисайза;
для отображения индикатора захвата используется параметр -i.

Включить / выключить запись можно с помощью комбинации Shift+F8.

Это не единственные параметры, подробнее можно посмотреть выполнив команду:

glc-capture --help

Запись производится в собственный формат, поэтому воспроизвести полученную запись можно командой

glc-play opengl_app-1234.glc

Перекодировать видео можно так:

glc-play opengl_app-1234.glc -a 1 -o opengl_app.wav
glc-play opengl_app-1234.glc -y 1 -o - | mencoder -demuxer y4m - -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=5000 -audiofile opengl_app.wav -oac mp3lame -o opengl_app.avi

Glc прекрасно работает в 64-х битной системе.
Вообще все необходимое написано на сайте glc.

Simple Viewer GL

Simple Viewer GL Небольшой вьювер изображений использующий OpenGL. Пользуюсь этим вьювером в повседневной работе для быстрого просмотра списка изображений, определения параметров области, которую занимает спрайт на текстуре.

Поддерживаемые форматы: PSD (первые 4 цветовых слоя, что делать с остальными я не знаю), PNG (libpng), JPEG (libjpeg), TIFF (tiff, многостраничный), ICO (поддержка фреймов в формате png), DDS, GIF (giflib, без анимации, но с возможностью просмотра каждого фрейма), BMP, TARGA, PPM, XPM, AGE (мой собственный формат, умеет rle-сжатие, zlib-сжатие и power of two), SCR (формат экрана ZX-Spectrum).

Основные возможности:

  • загрузка изображений в отдельном потоке + индикатор процесса загрузки;
  • создание списка файлов и поиск позиции, с которой начался просмотр;
  • поддержка GIF-анимации;
  • использование OpenGL;
  • отображение координаты и цвета пикселя под курсором (ключ командной строки -p или клавиша P);
  • возможность выделения части изображения рамкой (удобно для определения координат и позиции области);
  • разбиение больших изображений по нескольким текстурам;
  • быстрое скролирование изображения с помощью клавиатуры или мышки;
  • произвольное масштабирование изображения с помощью клавиатуры ( / + / 1..0);
  • корректное автоматическое масштабирование изображений, не вмещающихся в окно вьювера;
  • возможность просмотра многостраничных изображений (клавиши PgUp / PgDn)

 
Без минусов не обошлось:

  • нельзя посмотреть EXIF (планирую сделать);
  • нет возможности переназначить “горячие” клавиши (планирую сделать);
  • изображения загруженные с помощью Imlib2 не имеют информации о кол-ве бит на пиксель (постепенно избавляюсь от этой библиотеки в пользу собственной реализации загрузчиков);
  • при повернутом изображении некорректно отображается информация о пикселе под курсором;

 


Загрузка и сборка
В данный момент исходные коды Simple Viewer GL доступны в Git на Bitbucket.org. Забрать последнюю версию исходных кодов можно следующей командой:

$ git clone https://bitbucket.org/andreyu/simple-viewer-gl
$ cd simple-viewer-gl
$ make release
$ ln -s sviewgl /path_to/bin/sviewgl

 


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

 


Предыдущая крайне устаревшая версия Simple Viewer.

md2 – формат хранения 3D моделей

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

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

Захват экрана OpenGL-приложения

Данная заметка устарела, более свежая находится тут – Захват видео и звука из OpenGL приложений под Linux.


В поисках утилиты захвата экрана 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

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

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

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

SDL и OpenGL

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

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