CS 351: Assignment #4

Polygons

Due 2 March 2017

In this assignment you'll implement both a polygonAPI and the scanline
fill algorithm for polygons. The algorithm is probably going to become
the most used piece of code you'll write this semester and will be
central to your rendering system. As such, take care to comment the
code and understand what is going on.

For this project, your Polygon
structure does not need the color, normal, or zBuffer
fields.

Implement the scanline fill algorithm for polygons. You can
write it from scratch, use the version in one of the textbooks, or
use this scanfill skeleton code as
the basis for your function. Make sure that your algorithm uses the
correct placement of the coordinate grid (lower left corner of the
pixel). The name for this routine should be
polygon_drawFill(). Your algorithm should not create a
border that is a different color than the fill color. Just draw the
filled in polygon as a single color (for now).

If you want to do a gradient fill, texture fill, or pattern fill,
create separate functions for them.

Implement a second polygon fill algorithm,
polygon_drawFillB() that uses barycentric coordinates to
determine which pixels to fill given a polygon with only 3 points.
Scan over the bounding box of the triangle, filling any pixel whose
barycentric coordinates are all in the range [0, 1]. The lecture
notes give the equations.

When calculating which pixels to fill, use the center of each pixel
to make the determination. That means you need to add 0.5 to the x
and y value of the pixel coordinates when calculating the
barycentric coordinates.

Don't worry about handling special cases (boundary going through
the pixel center) for now. Note that test file B shows that drawing
the polygons this way is order dependent.

One required image is the same as the previous assignment, a
picture of a car, train, plane, or spaceship, except that a
majority of the surfaces should be colored/filled in.

Create two images for your portfolio using the techniques you have
developed so far and any extensions you decided to pursue.

If you wish, try running the testbench
program for your fillscan and barycentric polygon functions.
Note that the program makes use of a Color_set function, so you'll
need to add that to your library.

You can also try out the Polygon stress
test file to see how your various polygon memory management
functions are doing. Here is the expected result.
If you really want to test for memory leaks, try out test4c-loop.c
and then use the command line tool top to watch your memory
usage. You'll have to use cntl-c to stop the top program.

Extensions

An animated gif or series of images that demonstrates the
scanline fill algorithm (e.g. a short tutorial).

Allow the use of a fill pattern (e.g. an 8x8 bitmap) in addition
to the fill color.

Allow the user to draw filled graphics primitives with a variety
of overlay options so you can easily simulate transparency and
other effects.

Anti-alias your polygons.

Allow the user to specify a gradient across a polygon, circle,
or ellipse so that they appear shaded.