autorovi dekuji za super clanky.
mohl by mi autor ci nekdo znaly prozradit, jakto ze pomoci bitovych rovin bylo snadne udelat efekt paraelne se pohybujiciho pozadi jako je ve hre Shadow of the beast ?
popsat v jakem modu to bylo nejsnadnejsi ale hlavne jake operace probihaly v palete barev ci na bitovych rovinach ?
Řekneme, že obrazovka začíná v paměti na adrese A, řádek má L bytů, z nichž se jich V zobrazí, a má se zobrazit posunuto o 0 pixelů doleva.
Až dosud klasika.
A teď jste pomocí copperu v rámci zatemnění na řádku 20 řekli, že se má obrázek zobrazit posunutý o 4 pixely.
Opět pomocí copperu jste při zatemnění na řádku 40 řekli, že posun je 0 pixelů, ale změnili jste adresu obrazové paměti o 1 bajt. Čili posun o 8 pixelů.
Atd.
Je to jakobyste obrázek horizontálně rozstříhl na 11 pásků a každým z nich mohl libovolně posouvat. Dokonce ani v paměti nemusí být za sebou.
Tak to máte pozadí a popředí. To pomocí dual playfield a copperu dáte nejprve do pozadí a na určitém řádku naopak do popředí (takže kameny v dáli jsou za hlavním obrazem, plot dole je pak před obrazem).
Hlavní postavu a potvory naanimujete klasicky v druhém playfieldu. Můžete i přihodit nějaké další objekty. Na další efekty se dají použít sprity.
Jinak s pozadím se dají dělat divy, stačí dvoubarevné, dithering a změna barvy pomocí copperu (postupně na řádku změním odstín) udělá zázraky. Pro „hlavní grafiku“ tak zbydou 4 plány a to je 16 barev.
Další populární trik je založen na starém známém „akce se odehrává jen na malém místě, nahoře je nebe, kam žádná střela nedoletí“. Takže si na horní část obrazovky uděláte dual playfield, kde jedno bude ubíhající pozadí (simulace vodorovné plochy, viz výše) a druhé budou nějaké jiné pozadí, například domy (tedy svislé plochy). V jistém místě pak pomocí copperu změníte rozložení playfieldu, necháte si jen jeden typ pozadí (který se hodí více) a v druhém playfieldu budete bojovat, střílet atd. Pak zase na nějakém řádku změníte playfieldy a budete simulovat „popředí“.
Ve zkratce:
1. Můžete měnit odkud se berou grafická data a libovolně je po pixelech posouvat (o to se stará zobrazovací koprocesor, v paměti nic neposouváte)
2. Obrazová data v paměti nemusí vypadat jako na obrazovce – zobrazovací koprocesor ví, kde data začínají, kolik z nich má zobrazit (viditelná část) a o kolik má pak skočit dál dopředu aby se dostal na další řádek. Zjednodušeně řečeno, v paměti můžete mít obrázek mnohem větší, než co pak koprocesor vlastně zobrazí.
3. Máte copper. Tedy můžete všechna nastavení kdokoliv změnit, v závislosti na poloze paprsku. Asi znáte standardní copper efekt, že? Máte dvoubarevný obrázek (dvě barvy v paletě) a pomocí copperu pak na každém řádku měníte obsah barvové palety – takže na obrazovce vidíte duhu. Takto můžete měnit nejen barvy ale i rozložení bit plánů, bitové posuny atd.
oh. tak takhle to je. ja jsem na Amize programoval pouze okeni aplikace. k takovymto hardcore vecem jsem se uz nestihl dopracovat. skoda.
kdyz jsem si precetl, ze copper ma jen tri instrukce tak mi sla brada dolu :-)
par postrehu a doplnujicich otazek.
copper tedy bezel jako (temer) nezavysly obvod. takze programator mu nejprve do pameti pripravil data (grafiku), pak nekam nahral program ktery ovladal copper a spustil ho, zatimco na CPU bezelo napriklad ovladani postavicky ? tento program se spustil vzdy pri zacatku vykresleni obrazovky ?
>takže na obrazovce vidíte duhu
tak me napadlo, da se udelat i duha horizontalni ? neboli v ramci jednoho LoRes radku ktery ma 320 pixelu zmenit barvu vsech pixelu ? stihne to copper ?
dekuju za odpoved, tedka studuju a patram po prikladech na netu a snad se mi podari dohnat tento rest z mladi a naprgam si nejaky graficky efekt.
Víceméně máte pravdu. Copper měl vlastní program, který se restartoval při vertikálním zatemnění. Instrukcí moc nepotřeboval, protože vlastně nic neuměl – jen počkal na nějakou pozici paprsku a pak zapsal data do nějakého řídícího registru.
Hlavní procesor se pak staral o dvě věci – zaprvé si hrál s daty a grafikou a zadruhé přeprogramovával copper.
Co se rychlosti copperu týká, tady v článku se píše že buď 4 nebo 8 pixelů. Tak nějak to bylo. Některá dema to využívala na relativně rychlé vykreslování plnobarevné grafiky. Jeden plán jste si vyhradil na „mřížku“ a pak copperem měnil barvu té mřížky. Mřížka vypadala třeba tak, že jste měl 3 obarvené pixely a pak jeden prázdný. Takhle se to opakovalo na celém řídku. Další řádek byl o pixel posunutý. Tím, že se nejednalo o jednolitou plochu, to zdaleka tolik netrhalo za oči.
Zdůrazňuji, že na to stačil jeden plán. V dalších jste mohl mít 16 barevný obrázek, který „animaci“ na pozadí překrýval.
Další trik pro horizontální změnu barev, který uměl copper „zrychlit“ spočíval v tom, že jste si opět vykreslil mřížku, ale tentokrát hustší (2 pixely barva, 1 pixel prázdno). A vykreslil jste si je ve 32 barvách, tedy první čárka barva 1, druhá čárka barva 2, atd. Pak jste si nastavil barevnou paletu tak, aby prvních 31 segmentů obsahovalo barvy, jaké chcete. Program pro copper pak dělal to, že jakmile se začalo vykreslovat, a tedy se vykreslila první čárka barvou 1, tak změnil barvu 1. Pak hned změnil barvu 2 atd. Barvy se střídaly po 3 pixelech, tedy rychleji, než copper stíhal přepisovat barvy, ale vždyť on měl 30 barev náskok :-) Aby si stihl připravit barvy pro další řádek, obvykle se vkládal jeden prázdný. Pokud se ale nevykresloval obrázek přes celou šířku obrazovky, mohly být pixely i hustší, protože copperu nestačil „ujet“ vlak. Navíc pak bylo při zatmění dost času si nastavit barvy pro další řádek.
A jednou jsem to celé viděl s mřížkou ve „3D“. Nejsem si jistý jak to bylo uděláno, ale předpokládám, že to bylo s použitím Halfbrite, kde místo neobarveného pixelu byl pixel s polovičním jasem.
A když už jsme u toho copperu, na Amize v některých demech byly obrázky v HAM módu, které měly neuvěřitelnou ostrost. Standardní HAM umí volit jednu barvu ze 16 nebo libovolnou změnu jedné barevné složky. Pokud tedy chcete mít vedle sebe zelenou a modrou, pak musíte mít tu modrou v barvové paletě – protože změna přes barvové složky je „zelená na 0, modrá na 15“. Bez použití palety by tam vznikl černý pixel. Pokud ale těch „strmých“ barevných přechodů máte více, dojde vám počet barev v paletě a jste namydlení. A právě zde se dal využít copper, který vám dokázal ve správnou chvíli do barvové palety dohodit tu správnou hodnotu. Akorát si tedy nedokážu představit, jak by někdo dokázal na Amize takový obrázek nakreslit. Předpokládám, že ho kreslil na nějakém jiném počítači, který uměl více barev bez problémů a pak ho „konvertoval“.
Jo, to jsou krásné vzpomínky. Jenže před 16 lety byla jiná doba, Amigu mělo hodně lidí a člověk se mohl pravidelně inspirovat (a předvádět) kupříkladu v Brně na Resetkání. Dneska by to bylo psaní tak leda do šuplíku.
Jo, tomuhle se říká hardcore. Díky moc za podobné příspěvky. Oslovují mě dokonce více než samotný (a vůbec ne špatný!) článek.
Mám pocit, že dneska se jde na všechno hrubou silou, protože tu máme truecolor, gigahertzy a gigabajty. Ale třeba se pletu a ty TOP hry používají opět řadu neskutečných vychytávek, jak ušetřit takt, bajt apod. Ale vzhledem k rozmanitosti architektury PC o tom silně pochybuju.