next up previous contents
Next: m_utils Up: Modulbeschreibung Previous: colors

scanline

  Die Funktionen des Scanline-Algorithmus sind auf drei Module verteilt:

scanline

Das Modul scanline besteht aus den beiden Funktionen scanline und init_scanline. Die Funktion init_scanline reserviert den notwendigen Speicher und initialisiert die Datenstrukturen. scanline ist die eigenliche Kernfunktion: Sie erstellt aus der Polygon- und Punktstruktur eine Kantenliste, aus dieser eine Spantabelle und daraus wird dann die Bitmap gezeichnet. scanline ruft die Funktionen aus den Modulen lists und scanline_functions auf.

lists

Das Modul lists besteht aus den Funktionen update_eventtable, Add_edge_to_list, Remove_edge_from_list, Pseudo_corners sowie aus der Funktion Search_partner. Diese Funktionen werden von der Funktion scanline aus dem Modul scanline aufgerufen. update_eventtable erstellt die Eventtabelle: alle Punkte der Szene werden in eine vertikale Liste eingetragen, Punkte oberhalb des Bildschirmausschnittes werden auf die obere Bildschirmgrenze projiziert. Add_edge_to_list fügt eine Kante zur aktuellen Kantenliste hinzu. Remove_edge_from_list entfernt eine Kante aus der Liste. Pseudo_corners sucht Schnittpunkte einer Kante mit den aktuell eingetragenen und trägt die gefundenen Schnittpunkte in die Eventtabelle ein. Search_partner sucht für eine gegebene Kante die entsprechende Partnerkante des gleichen Polygons.

scanline_functions

Das Modul scanline_functions besteht aus den Funktionen get_neighbores, Get_x_of_edge, Get_Increment und is_in_front. Diese Funktionen werden aus den Modulen scanline und lists aufgerufen. get_neighbores sucht zu einem Punkt eines gegebenen Polygons seine beiden Nachbarn. Get_x_of_edge berechnet den X-Wert einer Kante an einem gegebenen Y-Wert. Get_Increment berechnet den Increment einer Kante. is_in_front bestimmt, welche Kante an einer gegebenen Bildschirmkoordinate näher am Beobachter ist.  


Martin Frey
Tue Jun 17 13:29:20 MET DST 1997