Moc pěkné, díky za seriál. Vykreslování čáry se dá ještě výrazně urychlit rozdělením algoritmu na čtyři případy podle směru čáry (čtyři 45deg sektory), potom jedna souřadnice se inkrementuje/dekrementuje stále (pevný add/sub ofset), druhá je pod podmínkou (podmíněný add/sub ofset). Pokud se ještě provede unrolling např. přes 8 pixelů se vstupní jump-table, dá se shora těsně přiblížit k jednomu podmíněnému skoku na pixel. Takhle se to dělalo na starých dobrých 8bitech - kdo např. pamatuje Tomahawk apod. hry, kde se to čarama (a vyplněnými plochami, což je jen o málo těžší, ale časově poněkud náročnější úloha) jen hemžilo.
Zdravim a diky za komentar. Jojo to je pravda, jde to jeste vylepsit a prave podminene skoky muzou rychlost snizovat. Tomahawka si pamatuju, velmi dobre optimalizovan byl i Mercenary (http://www.root.cz/clanky/historie-vyvoje-pocitacovych-her-92-cast-otevrene-svety/#k03)
Jeste jsem videl dalsi moznost zalozenou ne primo na jump table, ale na generovani patternu, tam ovsem ta tabulka docela roste s vetsim rozlisenim (proste muze vzniknout vic kombinaci).
No, jeste zajimavejsi je, pokud si clovek uvedomi, ze treba hra Mercenary byla napsana v assembleru, ale stejne byla portovana skoro na vsechny platformy, takze:
a) prepis ASM z jednoho typu pro procesoru na jiny - 8080, 6502, ...
b) vsechny platformy (ale treba i se stejnym procesorem - 6502 v CBM a Atari, a nebo CBM+4 a CBM64) mely uplne jinou organizaci videoram/sprity/.. - vsechny tyhle graficke rutiny byla treba znovu 'optimalizovat' ..
Treba CBM +4 melo rozlozeni pixelu (ve 4 barevnem rezimu 160x100) nasledovne:
| 0 1 2 3| 4 5 6 7 | 8 9 10 11 |
- - - - - - - - - - - - - - - - - - - - - - - -
0| 0 1 2 3 | 32 33 34 35 | 64 65 66 67 | ...
1| 4 5 6 7 | 36 37 38 39 | 68 69 70 71 | ...
...
7| 28 29 30 31 | 60 61 62 63 | ...
Pricemz kazdy PIXEL byly 2 bity daneho bajtu a barva 1 z 113 (16 barev x 8 intenzit, tedy vlastne 128, ale vsechny intenzity 'cerne' byly cerne, nebot sede byly intenzity bile :-)
00 - barva pozadi, shodna pro cely screen; jeden reigstr v TED
01 - barva 1, nastavitelna individualne per 4x8 pixelu; 40x25 bajtu pameti videoram
10 - barva 2, nastavitelna individualne per 4x8 pixelu; 40x25 bajtu pameti videoram
11 - barva 3, shodna pro cely screen; jeden registr v TED
Samozrejmne barvy 0 a 3 slo, pri pouziti podpry TED a rutiny preruseni menit i po 'mikroradcich': TED v CBM+4 mel moznost do jednoho registru primo zapsat cislo fyzickeho televizniho radku (obcas ale kvuli tomu vznikly dve verze her - PAL a NTSC a bylo nutne mit tu 'spravnou' kvuli hratelnosti) a pri 'retrace' (zpetnem behu paprsku) probehlo automaticky preruseni. V nem se dala zmenit barva 0 a 3 na jinou (registr v TED) a znovu nastavit radek v TED registru, kdy na dalsi probehnout preruseni :-)
Tomahawn byla fajn hra, na to, ze musela valit na osmibitovych procesorech bez jakekoli podpory pro FP nebo snad dokonce goniometricke funkce. Podle me hlavne museli optimalizovat i ty 3D vypocty a mapovani do 2D (perspektiva). Takze predpokladam, ze meli obrovske tabulky se siny, mozna i odmocniny atd.