• Vektorová grafika • Vše co potřebujete k pochopení principu vektorové grafiky znát jsou dvě věci: bod o třech souřadnicích a tzv. face složený vždy ze tří bodů. Každý složitější objekt se dá totiž rozložit právě na tyto dvě elementarní složky. Počet plošek (face) je vždy větší nebo roven počtu bodů. Jedna ploška může být připojena na dva body, které vlastní již jiná ploška. Nemusíme proto vytvářet pro každou plošku tři body zvlášť. V praxi si v našem programu deklarujeme dvě pole. Jedno bude obsahovat body o souřadnicích [X,Y,Z] a druhé pole také o třech hodnotách na jednu položku, jež vyjadřují indexy bodů, které dané plošce náleží. Potom je nezbytné si vygenerovat tabulku základních hodnot funkcí sin() a cos() a uložit ji do dalšího pole. Před samotným vykreslením se musí provédst tyto výpočty: • Rotace bodu o souřadnicích [X,Y,Z] • o úhel {a,b,c} pro X:a, Y:b, Z:c Y1 = Y*cos(a) + Z*sin(a) Z1 = -Y*sin(a) + Z*cos(a) X1 = X*cos(b) + Z1*sin(b) --------------------------- nZ = -X*sin(b) + Z1*cos(b) nX = X1*cos(c) + Y1*sin(c) nY = -X1*sin(c) + Y1*cos(c) Výsledný bod má pak souřadnice: [nX,nY,nZ] • Přepočet perspektivy bodu v prostoru • [X,Y,Z] , kde ShiftFactor je míra zkreslení a ZDelta relativní prodloužení na ose z nX = (X SHL ShiftFactor)/(Z+ZDelta) nY = (Y SHL ShiftFactor)/(Z+ZDelta) Výsledný bod má pak souřadnice: [nX,nY,Z] Tento výpočet provedem pro každý bod zvlášť. A na závěr musíme vypočíst prioritu jednotlivých plošek pro kreslení na obrazovku. Do dalšího volného jednorozměrného pole o stejném počtu položek jako pole plošek postupně zapíšeme součty tří hodnot Z souřadnice bodů náležících aktuální plošce a výsledné pole seřadíme podle velikosti jednotlivých součtů. Následuje kreslení plošek: chce to velice rychlou rutinku na vykreslování obecných trojúhelníků 100% v assembleru (pro zájemce tu jednu mám -> trojúhelník ). Nastavíme paletu na kontrastní hodnoty například bílé. Do předem alokované virtuální obrazovky kreslíme trojúhelníky od nejvzdálenějšího k nejbižsímu dle seřazeného pole plošek. Každému z nich přidělíme postupně barvu taktéž podle pole plošek. Výsledek zkopírujeme do videopaměti a počkáme na paprsek. Před každým dalším obrázkem nesmíme zapomenout vyplnit virtuální orazovku barvou pozadí. Pokud budeme měnit jednotlivé úhly a,b,c nebo měnit souřednice těžiště tělěsa X,Y,Z měli bychom vidět rotující a pohybující se objekt. Pokud se vám to podaří naprogramovat, pak mi jistě dáte z pravdu, že monohem těžší než programování, je samotné definování objektů. Ručně je to totálně nemožné, proto je nezbytné využít nějakého programu, který umí definovat objekty user-friendly cestou jako třeba 3D Studio. Jestli takový program nemáte, musíte si ho holt vyrobit sami. Jestliže pochopíte základ, můžete své vektorové engine dále rozvíjet a upravovat např. pro různou barevnost plošek nebo jiný styl stínovaní než je tzv. flat uvedený výše. Ať se vám to daří ! Výsledek stojí oravdu za to ! ReDox výheň