ZZZZZZZZZZZ ZZZ ZZZ ZZZ ZZZ ZZZZZZZZZZZ - Buffering Ten, kdo se někdy pokoušel dělat počítačovou 3D grafiku, jistě narazil na problém jak zajistit, aby se dvě tělesa, která se navzájem prolínají, zobrazila alespoň trochu slušně. Někteří se tento problém snaží řešit čistě matematicky a počítají průnik polygonů, z toho pak udělají polygony nové a ty potom zobrazí klasickými metodami. Tato metoda je sice teoreticky použitelná, je s tím trochu moc práce. Nejjednodušším způsobem, jak dosáhnout korektního zobrazení dvou a více navzájem se prolínajících objektů je Z-BUFFERING. Z-Buffering spočívá v tom, že si v dvojrozměrném poli o rozmerech schodných s rozměry obrazovky souřadnici Z každého zobrazovaného bodu a když zobrazujeme bod [X,Y], tak porovnáme Z zapisovaného bodu s Z zapsanym dříve do Z-Bufferu na souřadnice [X,Y] a když je Z zobrazovaného bodu menší nebo rovno (to znamená, že je blíž než bod zobrazený minule na tyto souřadnice), tak bod vykreslíme a do Z-Bufferu zapíšeme na jeho souřadnice hodnotu Z. Tak to byla teorie a teď trochu praxe. Předpokládejme polygon A[Xa,Ya,Za] B[Xb,Yb,Zb] C[Xc,Yc,Zc] . Když budeme body transformovat z 3D do 2D třeba podle rovnic: X=(X*256)/Z Y=(Y*256)/Z Můžeme odvodit, že se bude hodnota 1/Z měnit s přírůstkem 2D souřadnic lineárně. Z toho plyne, že si stačí na začátku zpočítat 2D souřadnice bodů polygonu, jednu hodnotu 1/Z a krok, kterym se bude měnit tato hodnota s přírůstkem 2D X a Y. Přírůstky spočítáme například podle rovnic: KrokX=(Xb-Xc)/(Zb-Zc) KrokY=(Yc-Ya)/(Zc-Za) Potom stačí jen při vykreslování polygonu spočítat: Zi=(1/Z)+X*KrokX+Y*KrokY (Kde X a Y sou 2D souřadnice při vyplňování polygonu) Toto Zi pak porovnávat a ukládat do Z-Bufferu výše uvedeným postupem. Ještě jedna poznámka na závěr: nezapomeňte před počítáním každého frejmu (pro angličtináře: je to od slova FRAME) naplnit Z=Buffer maximálními hodnotami. A jak to potom vypadá? Hodně úspěchů při psaní Z=Bufferu Vám přeje: Mystik (mystik@bbs.infima.cz) výheň