ZX Club #08
31 мая 1998 |
|
(C) Saruman / Dementia corp. C2P конвертор Привет, народ! С вами снова я,Saruman. Как мне помнится, в прошлый раз я расска- зывал о методах быстрого вывода графики через стек; а сегодня у нас еще один мощ- ный метод: chunky to planar conversion. Объясню поподробнее, в чем состоит смысл данного алгоритма. Если вы внимательнее приглядитесь к последним демкам, то навер- няка заметите, что во многих эффектах для имитации 16-цветового режима используются текстуры. Т.е., элементарной единицей изображения становится не пиксел, а квад- рат со стороной, например, 4 пиксела. Та- ким образом, в одном знакоместе мы получа- ем 4 элемента, каждый из которых при помо- щи текстур "окрашивается" в один из 16 цветов. При в памяти это, естественно, хранится в виде "байт на элемент"(chunky data), а при выводе на экран необходимо преобразовывать данные в стандартный (planar) вид. Для достижения максимально быстрого вывода и служит данный алгоритм. Замечание: хочу предупредить, что этот метод был разработан не мной. Я сам узнал о нем из файлов Explodera. Каждый байт chunky datы имеет вид: 1000 0101 Здесь младшие 4 бита - это цвет (смеще- ние от начала палитры), а старшие 4 бита - - базовый адрес палитры. Но!!! ведь коман- ды работы со стеком могут читать из памяти сразу по 2 байта!!! Поэтому палитра будет иметь такой вид: #8080 00 01 02 03 04 .. .. 0D 0E 0F #8180 10 11 12 13 14 .. .. 1D 1E 1F . . . . . . . #8F80 F0 F1 F2 F3 F4 .. .. FD FE FF Слева указан адрес, считываемый из chunky datы, т.е. младший байт - цвет пер- вого из выводимых элементов, старший байт- - цвет второго. Справа указаны номера текстур, выводимых при данной комбинации цветов, причем в текстуре, естественно, изображены сразу 2 элемента. Т.е. первый ряд - все текстуры со вторым цветом 0, второй ряд - со вторым цветом 1 и т.д. Итого у нас получается 16*16=256 текстур. Ну а теперь, разобравшись с форматом хранения данных, можно приступать и к на- писанию процедуры вывода. Для работы требуются: SP = адрес chunky datы; DE = адрес на экране, куда выводить; B = старший байт адреса,с которого хра- нятся текстуры. POP HL ;читаем chunky daty LD C,(HL) ;читаем адрес текстуры LD A,(BC) ;выводим LD (DE),A INC B INC D LD A,(BC) ; спрайт LD (DE),A INC B INC D LD A,(BC) ; на LD (DE),A INC B INC D LD A,(BC) ; экран LD (DE),A INC E POP HL ;читаем chunky daty LD C,(HL) ;читаем адрес текстуры LD A,(BC) ;выводим LD (DE),A DEC B DEC D LD A,(BC) ; спрайт LD (DE),A DEC B DEC D LD A,(BC) ; на LD (DE),A DEC B DEC D LD A,(BC) ; экран LD (DE),A INC E Ну вот и все. Разбирайтесь в моей писа- нине и - let`s start da demomakin`! (Раз- врат попрошу не пропагандировать ;-) ред.) А будут какие вопросы, пожелания или предложения - звоните по телефону 54-01-70 в Барнауле, конечно ;-)) и спрашивайте Олега - если он будет дома, то ответит всем! Bye,people! C Ya l8r!!! _______________________________________End
Other articles:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Similar articles:
В этот день... 21 November