• 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ň