Хонич А.
Как самому создать трехмерную игру
стр. 65

функцию FlipPage, чтобы вернуться к тому значению переменной AdVga, с которого начинали. Четвертая страница используется для служебных целей. Откровенно говоря, использовать три страницы там, где можно использовать две - это излишество, ио разработчики DOOM’a пошли таким путем. Что же .. Эго их право. Для использования двухстраничного режима достаточно лишь проинвертировать 14 бит в переменной AdVga( AdVga А= 0x4000; ) вместо прибавления к иему значения 0x4000 и затем еще проверки условия с целью ограничения.

Безусловно, многостраничный режим имеет свои преимущества, ио у нею есть и недостатки, причем очень существенные. За все приходится платить А цена за многостраничность такая, что многие фирмы отказываются от нее в пользу одной страницы (например, в игре HERETIC). В чем же дело?! А дело в том, что организация экрана в многостраничном режиме нелинейная, как в одиостраничном режиме. Линейный экран - это когда соседняя справа точка на экране представлена соседним байтом в видео-памяти. Другими словами, можно переслать изображение на экран с использованием стандартных функций пересылки (например, прибегнув к описанному выше макросу move) и при этом сразу увидеть изображение. Нелинейный экран может сильно затормозить игру, если не принять специальных мер по быстродействию. И в DOOM’e эти меры были приняты. Но - обо всем по-порядку. Сначала мы расскажем, как устроен многостраничный режим VGA и на небольших примерах покажем, как с ним работать, а затем расскажем, как в DOOM'e решена проблема быстродействия.

Режим, о котором идет речь, практически полностью идентичен четырех плоскостному режиму EGA. В связи с этим мы не будем подробно останавливаться на его принципах. Можно лишь напомнить, что соседняя по горизонтали точка находится в соседней плоскости. Это означает, что фактическая организация одной плоскости представлена разрешением не 320x200, а 80x200. При выводе очередной точки на экран необходимо переключить номер плоскости. Это делается записью в регистр маски (ОхЗс.У 2) при записи в видеопамять и записью в регистр выбора карты чтения (0x3 cf/ 4) при чтении из видеопамяти. Таким образом, при выводе одной строки изображения (а их всего 200) мы должны 320 раз производить запись в порт. Но это очень иеоптимально. Поэтому чаще всего осу ществляется вывод изображения сначала в одну плоскость, затем в другую и т.д., до четырех. В этом случае запись в порт осуществляется всего четыре раза.

Если плоскостей - четыре, то размер одной плоскости составляет 16000 байт (16000 * 4 = 64000 = 320 * 200). Физические адреса страниц для 0,1,2 и 3 страниц соответственно равны 0ха0000,0ха4000,0ха8000 и ОхасООО. А теперь на примере двух функций приведем пример работы сданным режимом: Функция UpdateBox осуществляет вывод на экран из буфера AdrScreens[0| (буфера экрана мы



Новости
Sony PlayStation 5 стала последней игровой консолью в мире
Игровые консоли присутствуют в мире уже более 30 лет, за которые в них успели поиграть целые поколения игроков, то есть отцы, дети и их внуки.
Авторы новой Call of Duty объявили даты проведения бета-теста
Студия Treyarch официально озвучила даты проведения бета-тестов мультиплеерного режима ожидаемого военного шутера Call of Duty: Black Ops 4. Разработчики уже раскрыли немало особенностей соревновательной части игры, но многое остаётся за завесой тайны.