University of California
EECS Dept, CS Division
TA: Laura Downs
TA: Jordan Smith
CS184: Foundations of
Computer Graphics
Prof. Carlo H. Séquin
Spring 1998

CS184: Pseudo-code for a Sample Point Scan Conversion Algorithm

for each polygon {
    for each pair of successive vertices {
        generate an edge pointing from top to bottom;
	if (y_top > y_bottom) {
	    for each edge attribute
	        calculate d_attribute/dy;
	}
	insert edge into edgeList sorted by y_top;
    }

    for scanline := max_y downto min_y {
        /* Add new edges to active edge list */
        for each edge on edgeList {
	    if (edge.y_top > scanline) {
	        for each edge attribute
		    compute attribute at scanline;
		remove edge from edgeList;
		add edge to activeEdgeList;
	    }

	}

        /* Remove defunct edges from active edge list */
	for each edge on activeEdgeList {
	    if (edge.y_bottom > scanline)
	        remove edge from activeEdgeList;
        }		

	sort active edges on current x-value;
	
        /* Calculate pixel values for each span (adjacent pair of edges) */
	for each pair of edges in activeEdgeList {
	    for each span attribute {
	        calculate d_attribute/dx;
	    }
	    
	    for pixel = ceiling(edge_left.current_x) to ceiling(edge_right.current_x) - 1 {
	        set pixel to correspond to attributes;
		for each span attribute
		    span.attribute = span.attribute + d_attribute/dx;
	    }		    
	}      
	
        /* Calculate attribute values for the next scanline */
	for each edge on activeEdgeList {
	    for each edge attribute
	        edge.attribute = edge.attribute - d_attribute/dy;
	    }
	}
    }
}



Last modified: Fri Mar 3 14:25:50 2000