Info Guide #12
31 декабря 2017

Код - 3D скролл на ZX Spectrum (часть 1).

<b>Код</b> - 3D скролл на ZX Spectrum (часть 1).
      3D скролл на ZX
Lord Vader/MAYhEM

               Предисловие

   Эта  статья  была  написана в 2014 году
для  журналаSpectrum Today #2.С тех пор, 
однако, прошло много времени и стало ясно, 
что, по-видимому, никакого Spectrum Today
#2 уже не будет. Посему статья была напра─
влена в электронный журналInfo Guide #12,
который как раз подбирался к релизу. Оста─ 
валось  только  перевести  статью  на рус─ 
ский... 

                 Введение

   Эта  статья - про  полноэкранный 50 FPS
3D скролл, такой, какой  можно  увидеть  в
деме New Wave 48k, зарелизенной наForever
в 2013 году. Ну, или какой можно увидеть в
деме  на  Commodore 64 под названием Trick
and Treat. 
   Я  не  претендую  на лавры изобретателя
этого эффекта. Всё, что я сделал - подсмо─
трел  реализацию в вышеназванной C64-деме,
переосмыслил и закодил на ZX.
   Статья  состоит  из  нескольких частей.
Вначале приведён мини-обзор похожих эффек─
тов. Далее вводится некоторая терминология
для   облегчения  повествования.  Наконец,
описываются  ключевые  идеи  и  приводятся
примеры  кода. Внимание  уделяется и т. н.
precalc'у. В последней части приведены мои
соображения по возможным улучшениям эффек─
та, а  также  (самое  главное!) передаются
спасибки  тем, кто мне помог с реализацией
эффекта и написанием этой статьи.

            Исторический обзор

   Небольшая  подборка  исторических (и не
очень) дем, в которых было/есть что-то по─
хожее на 3D скролл.

 А
 Б
 В
 Г
 Д
 Е

   Satisfaction Megademo (рис.1)
   1994, 3D  скроллер из одиночных отдель─
ных пикселей,и при этом даже не one-frame. 
Малозначим в контексте данной статьи. 



   4K интро под названием 4k intro (рис.2)
   Написана  в 1995 году и увидела свет на
Фантопе. Перспективно-корректный 50 FPS 3D
скролл,вместо сплошных текстурных пикселей 
также бывают узорные. Каждая линия по мере 
скролла  побитово  'сжимается' по границам 
байтов. Кроме того, по мере движения вверх 
некоторые  линии исчезают. Такой подход не 
вполне  точен  и  расходует довольно много 
тактов  Z80, потому-то  эффект  и занимает 
такую небольшую площадь на экране. 



   Adventurer #3 e-zine (рис.3)
   1996, имеет  совершенно фейковый скролл
с неправильной (или отсутствующей) перспе─ 
ктивой, из-за чего кажется,что буквы вытя─ 
гиваются в высоту по мере удаления от зри─ 
теля.Полноэкранный,но 25 FPS. Каждая линия 
побитово сжимается на границах байтов, что 
тоже не вполне корректно. 



   Демо Trick and Treat (рис.4)
   Для C64, 2008, имеет  настоящий (с вер─
ной перспективой) 3D скролл.Именно из этой 
демы  я позаимствовал основную идею такого 
скролла. Звёзды на экране сделаны аппарат─ 
ными  спрайтами C64. Нюансы: все символы в 
шрифте  всегда  имеют  ширину 3 текстурных 
пикселя  и  1  пиксель пустого места между 
ними. Кроме того, в некоторых местах линии 
скролла искажены.Эти недостатки могут быть 
объяснены  недостатком вычислительной мощи 
процессора 6510 и ошибками precalc'а,соот─ 
ветственно. 



   Agony Megademo (рис.5)
   1993. Тут 3D скролл весьма своеобразен:
одна буква занимает всю ширину экрана. Тем 
не  менее, перспектива не испорчена, и всё 
работает в 50 FPS. Код рендеринга не самый 
оптимальный, но  вполне на уровне для 1993 
года. Предположительно, это  первый полно─ 
экранный перспективно-корректный 50 FPS 3D 
скроллер на 8-битной машине. 



   Демо Eldorado для C64 (рис.6)
   1994. Предположительно,это самый ранний
скролл  по типу "Звёздных войн"(кстати, в
кино он  встречался и до "Звёздных войн" -
Buck Rogers  (1939),  Светлый путь (1940),
Flash Gordon (1941) -Ред.).Тем не менее,
это  фейк (см. также 4k intro ): лишь ими─ 
тация  сжатия по вертикали путём выкидыва─ 
ния некоторых линий и сжатие по горизонта─ 
ли по границам байт. Кроме того,это совер─ 
шенно не 50 FPS! 



   RGB C64 демо (рис.7)
   2014. На  момент  написания  статьи это
был  самый свежак с патиX'2014.3D скролл 
тут сделан  тем же человеком, что и в деме 
Trick and Treat, почти  с таким же  кодом. 
Главное  отличие состоит в том, что скролл 
тут заезжает на боковую часть бордюра C64. 
Конечно,  рисование  спрайтов  на  боковом 
бордюре  на коммодоре - это не так просто, 
но к сути эффекта не относится,т.к.пиксели 
спрайтов  изображаются из байтов точно так 
же, как  и  пиксели  основного экрана C64. 
Отличающееся  строение  экрана  и спрайтов 
значения не имеет, так как каждый изменяе─ 
мый экранный (и спрайтовый) байт записыва─ 
ется  командойSTA absс вполне определён─ 
ным адресом в ней.Кроме того,тут уменьшено 
вертикальное разрешение (строки дублируют─ 
ся),что позволяет разменять количество ли─ 
ний, требующих рендера,на двойное сохране─ 
ние каждого видимого экранного байта.Этого 
не  избежать - ведь  поддержание видимости 
спрайтов  на  боковом бордюре C64 - весьма 
затратная (по тактам) операция для 6502! 



Другие статьи номера:

Помощь - об оболочке: произошли некоторые изменения в кнопках.

Предисловие - от авторов: Прошедшие два года были очень насыщенными.

Комьюнити - ZX Spectrum: Как это было в Рязани (1980-е).

Комьюнити - ZX Spectrum: Как это было в Рязани (1991-1993).

Комьюнити - ZX Spectrum: Как это было в Рязани (1993-1995).

Комьюнити - ZX Spectrum: Как это было в Рязани (1995-1997).

Комьюнити - сценеры шутят.

Код - этюды: вызов процедур по списку адресов.

Код - 3D демы на ZX Spectrum: история развития 3д движков.

Код - 3D движок: оптимизация на прообразе 3D Construction Kit.

Код - 3D движок: фрагменты.

Код - Посекторный движок для 3D-шутера от Destr.

Код - 3D скролл на ZX Spectrum (часть 1).

Код - 3D скролл на ZX Spectrum: реализация (часть 2).

Графика - графические редакторы: Старый софт от Alone Coder'а.

Графика - палитра: Палитровые эффекты в играх.

Музыка - биперные движки: Двоичная модуляция (часть 1).

Музыка - биперные движки: Двоичная модуляция (часть 1).

Системки - история операционной системы CP/M для Спектрума (часть 1).

Системки - история операционной системы CP/M для Спектрума: ограничения (часть 2).

Системки - NedoLang: Начало - самый простой процедурный язык (часть 1).

Системки - NedoLang: Путь к самокомпиляции (часть 2).

Системки - NedoLang: Проклятие языка Си (часть 3).

Системки - NedoLang: Памяти под самокомпиляцию не хватало (часть 4).

Системки - NedoLang: ускорение (часть 5).

Системки - NedoLang: Куда плыть дальше (часть 6).

Металлолом - Знакомьтесь, ATM-turbo 3! ATM-turbo 3 (v8.0) - что это такое и с чем его едят.

Металлолом - Из истории Betadisk'а: Дисковый интерфейс от Technology Research был.

Дикий ум - Компрессия: Первые компрессоры графики на Speccy (часть 1).

Дикий ум - Компрессия: Фичи с эвристикой, Потоковая декомпрессия, Сжатие музыки (часть 2).

Игрушки - От редакции: 2017-й год вышел очень богатым на события.

Игрушки - интервью с автором игры Mickey the Basic game (Sergio).

Игрушки - квест "Неожиданное Путешествие" - взгляд изнутри.

Игрушки - Nomad: интервью с автором скролл-шутера Nomad (Hippiman).

Игрушки - Скроллинг в Evo SDK.

Игрушки - Hints & Tips: Mickey, Nomad.

Мыльница - Errata: ошибки в Info Guide #11, ACNews #65.

Письма - отзывы о журнале от: raver, destr, sirx, survivor, Ellvis, Utz и Николая Амосова.

Об авторах - Авторы журнала.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
freenews - free (;
Программирование - курс изучения ассемблера от Wlodek Black, продолжение.
Ассемблер - Процедура сдвига всего экрана на одно знакоместо вверх, загрузчик на вссемблере.
Codez amigoz - небольшая интересная программка на бейсике демонстрирует разные фигуры.
ТR-D0S для тех кто о нем ничего не знает - К0ДЫ 0ШИБ0К ПPИ ВЫЗ0ВE ИЗ ВАSIСа.

В этот день...   21 ноября