Here, the BSP Tree routine and Polygon Clipping routine are used in succession to perform hidden line removal. A C++ pseudo-code illustrating the algorithm is given below.
void HiddenLineRemoval ()
{
OFFObject *obj;
Point3d viewpoint;
Poly2d subject,clip;
Poly2d *insidelist,*outsidelist;
Poly2d *subjectlist,*new_subjectlist;
int i,j,k,l;
ReadOFFObject (obj);
Read (viewpioint);
Sort_using_BSP (obj,viewpoint);
Transform2d (obj,viewpoint);
for (i = obj->nf-1; i >= 0; i--)
{
subject = obj->faces[i];
subjectlist[0] = subject;
subjectlist->n = 1;
for (j = i+1; j <= obj->nf; j++)
{
clip = obj->faces[j];
new_subjectlist->n = 0;
for (k = 0; k < subjectlist->n; k++)
{
Clip2polygons(clip,subjectlist[k],insidelist,outsidelist);
new_subjectlist += outsidelist;
new_subjectlist->n += outsidelist->n;
// Append 'outsidelist' to 'new_subjectlist'
}
subjectlist = new_subjectlist;
}
Output (subjectlist);
// Print 'subjectlist' as output
}
}
The input here are the set of convex polygons in 3D space in OFF format and the view point, and the output is a set of non-overlapping polygons in 2D space which when drawn in any order, give the desired hidden line removal effect with respect to the given view point.