prev up next

Scanline Verfahren

Beim Scanline Verfahren werden die Pixel in der Reihenfolge ihres Auftretens in der Scanline betrachtet.
Hierbei werden die Eckpunkte des Dreiecks folgendermaßen interpoliert:
Seien A ,B ,C die angeordneten Punkte des Deiecks. Wenn die Gerade AC nicht horizontal ist, dann ist die Steigung
sAC= 1/(Ay - Cy) sonst sAC=0 .
Die Steigung in x und z Richtung beträgt dann deltaxAC=(Ax - Cx)*sAC, deltazAC=(Az - Cz)*sAC .

Endsprechend erhält man die Steigung
sAB und sBC und deltaxAB, deltaxBC,deltazAB,deltazBC .

Bei der Berechnung einzelner Scanlines wird die Höhe (der y Wert) mit der sogenanten Ceiling Funktion auf Integer Werte umgerechnet.
Mit der Ceiling Funktion verfolgt man den Ansatz der Top-Left Regel (der linke und obere Rand gehört zum Polygon).
Die Ceiling Funktion liefert bei negativen Float Werten den gekasteten Integer Wert( z.B.für -2.6 -2) und bei positiven wird Eins dazu addiert, außer wenn die Werte gleich sind.

Da die x -Werte (Xstart,Xend) am Anfang den Wert Ax haben und der entsprechende y-Wert Ay nicht mehr mit dem neuem y-Wert aus der Ceiling Funktion übereinstimmt, muß man den Xstart und Zstart neu berechnen. Die korrekten x-Werte erhält man dann Xstart = Ax + ystep*deltaxAB, Xend = Ax + ystep*deltaxAC , wobei ystep = ceil(Ay) - Ay .

Die x-Werte für die nächsten Scanlines erhält man dann Xstart = Xstart + deltaxAB, Xend = Xend + deltaxAC .
Endsprechend berechnet man die z und die w-Werte.

Die Interpolationswerte entlang jeder Scanline erhält man dann nach dem gleichen Prinzip:
xstep = ceil(Xstart) - Xstart , Zstart = Zstart + xstep*deltazX, deltazX = (Zstart - Zend)/deltaX, deltaX = 1/(Xstart - Xend)
wobei Xstart != Xend .


Die Pixel werden danach mit dem Z-Buffer Algorithmus gesetzt.

Der Code ist nicht Korrekt , liefert nicht immer die richtigen (u,v) Werte.

../bericht/code/TextureMapper.java













prev up next