HDR Maze Demo - Lezing's Ophitial Site

Lezing's Ophitial Site»Проекты»HDR Maze Demo

Азъ есмь кодеръ красноглазой
Страница сия — преданье старины глубокой. Судя по всему, порождена в нещадных потугах слабооформленного сознания. Да простят дорогие читатели её унылую натуру.

Scientific content detected!
Понимание данной страницы может быть отягчено отсутствием наличия теоретической подготовки.
Разрешается вооружаться гуглами-педивикиями.

Немного освоив среду Visual C++ и ассемблер, я стал делать разные наработки в плане работы с графикой под общим названием Nipadetski. Одну из них я выкладываю сюда. Что она из себя представляет? Это 3D-лабиринт наподобие игрушек начала 90-х. Правда неиграбельный, он сделан просто для демонстрации возможностей и недостатков HDR-графики, обсчитываемой софтварно. Сам лабиринт был сгенерирован в другой программе и сохранён в BMP-файлик. HDR Maze Demo использует четыре текстуры при отображении кубиков-стен лабиринта. В программе реализован качественный мип-мэппинг этих текстур, а при переводе картинки в 24-битное представление осуществляется наложение имитации камерных шумов, автоэкспозиция, гамма-коррекция и даже физически корректное (вроде бы) виньетирование. В сочетании с яркостным контрастом между по-разному ориентированными стенами выглядит это дело неплохо, правда нехило тормозит. У меня на разрешении по умолчанию 640x480 фреймрейт составляет 30-35 кадров в секунду. И тормоза эти возникают из-за того, что память не справляется с бешеным потоком данных — все-таки 96 бит на пиксел — это в 12 раз больше, чем когда-то повсеместно используемые 8. Вряд ли возможно, не прибегая к аппаратному ускорению графики, обойти эту проблему. Все наиболее критические части кода у меня написаны на ассемблере и, судя по замерам, вычисления составляют где-то 30% от времени выполнения, всё остальное уходит на ожидание поступления данных в кэш. Даже относительно громоздкий алгоритм виньетирования понижает фреймрейт на 5-10%, и то благодаря интегрированию в цикл перевода HDR в LDR. Короче говоря, явный дисбаланс между процессором и ОЗУ. Программа не использует расширения вроде MMX и SSE, и я полагаю, что в данном случае особого толку от них не будет.

Что касается лабиринта, он очень большой (256x256 клеток) и добраться хотя бы до противоположного угла практически нереально — пришлось бы очень долго шляться. Нажав F2 и затем Tab, вы увидите его целиком и белую точечку в верхнем левом углу — ваше текущее местонахождение. Впрочем, лабиринт можно легко поменять на другой, запихав другую картинку в файл tile004.bmp, только нужно следить за форматом — 8-битный 256x256. И текстуры в остальных битмапах тоже меняются. Опять же следует соблюдать размер 256x256 и 24-битную глубину цвета.

Хотя попасть в противоположный угол (да и вообще куда угодно) всё же можно. В программе есть один баг, который я решил оставить; он позволяет с разбегу проникнуть внутрь стены. Найдите небольшой прямой участок и бегите по диагонали на стену, зажав две клавиши. В некоторых случаях удаётся проникнуть сквозь стену и выйти (или не выйти) с обратной стороны. Можно даже выбраться за пределы лабиринта вверх или вниз и попасть в «лабиринт-призрак» со всякими галюнами.

Загрузка


hdrmaze.rar (558 КБ)

Скриншот