Posted: Mon Jan 5

Due: Tuesday 1/20/26 10:00am

For this assignment, you may work in pairs, but both of you must be in the same class.

Final Engine Improvements

For the final project, you are to add any features you’d like to your current graphics engine. Your final project must start as a working MDL compiler. The base code provided implements all the features we have covered in class using MDL except animation. Any new features added must still use the MDL framework.

A good place to start thinking about ideas is to look at the skill grid and your grades on jupiter. If there are any skills that you do not have a 4 on, now is your time to reach that level. There is currently 1 skill that you could not get a 4 on before now:

  • 10 Lighting & shading. A 3 requires using multiple lights. A 4 requires implementation of Gouraud or Phong Shading.

Below are some possible improvements (you may work on other features if you prefer, just talk to me about it first). There is no particular order to these features.

Existing, MDL Commands/Features:

  • light
    • Add a light to the symbol table,
    • When calculating diffuse and specular: loop through all the lights.
    • The provided parser will already add the light to the symbol table. You need to be able to use that data.
  • saveknobs
    • Save current knob values to a list
  • tween
    • Produce an animation by going between two knob lists
  • shading
    • Use different shading techniques / calculating I more or less frequently.
    • This will be discussed in class.
    • Some notes are available from the book here.
    • A hash table structure can be very helpful for dealing with vertex normals. Java and Python have readily available hash tables, if you are woking in c, check out uthash.
  • save_coordinate_system
    • Save a copy of the top of the stack to the symbol table
    • use this coordinate system when drawing shapes (extra argument required)

Additions to MDL that require changes to the language:

  • New primitive shapes
    • This requires adding new tokens and new syntax rules for the shapes. A good idea is to start with an existing shape and modify the code for your shape.
  • Change the behavior of vary
    • add a parameter to change how it calculates the change over time
    • Linear , Exponential, Logarithmic, Arbitrary equation, etc.
  • Anti-aliasing / Super-sampling
    • Reduce pixelated edges by calculating a higher resolution version of the image then reducing it to the intended size
  • Perspective.
  • Texture mapping
  • Using vary to move lights.

Proposal/Documentation

Before starting, you need to document which skills you will be working on in your project. There will be a section in the provided README.md file for you to list the skills you want to be graded. I will only grade the skills you list in this section. Regardless of what skills you already have a 4 in, your project must have at least 4 skills with new additions for me to grade. For each skill, you will need to include what your project will add to demonstrate mastery of that skill.

  • If you want to attempt a feature that doesn’t map to an existing skill (i.e. ray tracing), than list it and it will count as one of the 4 required skills.