Совсем недавно вышла бета-версия готовящегося к релизу LDC 0.10.0 – компилятора D, использующего LLVM для генерации машинного кода.
Решив проверить LDC на практике, я только что собрал им Atrium. Результат очень обрадовал, при компиляции в релизном режиме и с уровнем оптимизаций -O3, LDC выдал весьма шустрый код: ~100 FPS против ~80 у DMD 2.060! При этом я всего один раз столкнулся с необходимостью поправить исходники – при использовании ассоциативного массива указателей.
Как вывод: LDC вполне созрел для использовании в качестве основного компилятора D под Linux – во всяком случае, для работы с OpenGL и графикой реального времени. К сожалению, я не в курсе, как у него обстоят дела c поддержкой Windows – надеюсь, со временем этот вопрос устаканится.
Вышел 21 номер электронного PDF-журнала “FPS“, посвященного разработке игр, программированию, компьютерной графике и звуку. В этом номере можно отметить следующие материалы:
> Blender: обзор дополнений (выпуск 3) > Tears of Steel: роботы тоже плачут… > Эффект “старинного фото” в GIMP > Журнал GIMP Magazine > Язык D: новости > Семь мифов о D > Сборщик мусора – враг или друг? > Юникод в OpenGL. Раз и навсегда > Почему я выбираю Linux? > Патентные войны
Передискретизация (ресэмплинг) изображения – это всего-навсего изменение его разрешения в пикселях. Такую функцию должна включать любая уважающая себя библиотека обработки изображений, и с сегодняшнего дня dlib – не исключение. В пакете dlib.image.resampling доступны четыре алгоритма ресэмплинга, которые часто встречаются в графических редакторах: линейная интерполяция (Linear или Nearest Neighbor), билинейная (Bilinear), бикубическая (Bicubic) и фильтр Ланцоша (Lanczos). Ниже представлены результаты их работы на примере увеличения разрешения картинки с 64х64 до 256х256.
Оригинал
Linear
Самый простой и, следовательно, самый быстрый способ изменить размеры изображения. Известен также как интерполяция методом ближайшего соседа (Nearest Neighbor). Для промежуточных пикселей выбирается ближайшее известное значение.
Bilinear
Для получения промежуточного значения производится линейная интерполяция между четырьмя ближайшими пикселями. Это позволяет несколько сгладить переходы. Билинейный фильтр – неплохой компромисс между скоростью и качеством результата.
Bicubic
Промежуточные значения вычисляются путем свертки ядра 4×4 специальной бикубической функцией. Достаточно медленный алгоритм, но зато дает наименее пикселизированный результат.
Lanczos
У бикубической интерполяции есть недостаток – изображение получается несколько размытым. Чтобы сохранить четкость, можно воспользоваться фильтром Ланцоша. Он немного увеличивает пикселизацию, но создает контрастные области вдоль контуров для повышения четкости. В моей реализации я использовал ядро 7х7. Очень медленно, зато качественно.
Существуют и другие алгоритмы – постепенно они тоже будут добавлены в библиотеку.
Изменения доступны в dlib ревизии r5 и выше.
В этом блоге я буду публиковать свой прогресс в области разработки 3D-игр на языке программирования D с использованием OpenGL. Хочу предупредить – ничего определенного я не обещаю, геймдев для меня – всего лишь хобби. Я не из тех, кто ставит перед собой заведомо недостижимые цели – мне нравится сам процесс =)