Give a highlevel overview of what you implemented in this project. Think about what you've built as a whole. Share your thoughts on what interesting things you've learned from completing the project.
To rasterize a triangle, I iterate over every sample in the bounding box of the triangle, and check if the sample lies within the triangle by comparing the area of the triangle to the area of the triangles created by the new point using a simple shoelace algorithm. This algorithm is no worse than one that checks each sample within the bounding box of the triangle because this algorithm does exactly that.
To implement super sampling, I iterate over each subsample within each pixel. I added a nested forloop on the inside of the nested forloop I used for part 1 to iterate over the subsamples one pixel at a time. This smooths out the jagged edges along the sides of the triangle that are not accurately represented by a single sample.




I simply rotated the arms and legs a bit and flipped the robot upsidedown to put the robot in a handstand position.
Barycentric coordinates are essentially distances from vertices. For example, in the triangle gradients below, any point within the triangle takes on a color value equal to the weighted sum of the color values of the vertices based on the point's distance from each vertex.


Pixel sampling is essntially sampling pixels in screen space and then computing and mapping the pixel coordinates to its corresponding uv coordinates on the desired texture. For nearest neighbor sampling, we simply map the pixel coordinates to its uv coordinates and then sample from the nearest texel in the texture. For bilinear filtering, we interpolate using the nearest 4 texels.
The difference between 1 sample and 16 samples is quite apparent, with the one sample pictures being more pixelated then their 16 sample counterparts. The bilinear filtering also contributes to the quality of the photo, although the relative difference between the 16 sample photos is less than the difference in the 1 sample photos.




Level sampling is used when one screen pixel corresponds to multiple texels, usually due to minification of the image; therefore, we compute the uv coordinates of adjacent pixels in the x and y direction and use these points to determine which texel to sample from the texture.
For the most part, improving the antialiasing power, by using supersampling, pixel sampling, or level sampling, corresponds to poorer perfomance in terms of computation time and hardware workload.








If you are not participating in the optional art competition, don't worry about this section!