📄️ Introduction
It's time.... for the final project!
📄️ AniGraph
OpenGL (and rasterization-based graphics in general) is weird. It's a huge complicated messy system designed to do very specific things incredibly fast. It is not designed to make doing those things easy---that is why engines like Unity and Unreal are incredibly successful: they hide away a lot of that messiness during development. This assignment will be a chance to peek behind that curtain. AniGraph is a framework I created to facilitate that peek in the setting of a large intro course like CS4620. It will make your life easier, but not as easy as a complete game engine. You are still going to have to face plenty of messiness. The hope is that you will come out of that experience with a better understanding of how things work, which also tends to make people better users of high-level tools and engines in the end.
📄️ Starter Code
- The starter code is well-commented, so looking at the actual code is the best way to learn how it works!
📄️ Interaction Modes
Interaction Modes:
📄️ Transparency
As mentioned in class, rasterization is not designed to support transparency---at least, not easily. It is possible to make it work, but it takes a bit of doing. To make matters worse, ThreeJS appears to have a bug when it comes to handling transparent objects, so I felt adding this page of guidance to the assignment docs was appropriate.
📄️ Features
We will approximately measure features on a point system, with the number of points needed for full completion depending on the number of members in your group. Our expectation is that larger groups should do more, but integrating a larger number of features can also be more work. To this end, the number of features we will look for to award full completion credit roughly scales with the number of members in a group, but larger groups may receive credit for integrating more features if this is done well. We are also reasonably open-minded here---implementing one very complex feature super well could be enough for a team of 4 if it is done very well and the work can reasonably be divided among 4 people (e.g., if you implemented a really impressive fluit simulation), but that would be the rare exception, not the rule. We will ask you to report who did what, and if contributions are especially uneven we may assign different grades to different group members.
📄️ Noise
I mentioned simplex noise briefly in a lecture earlier in the year, but it's basically an improved version of perlin noise. AniGraph imports a library that implements simplex noise which you are welcome to use.
📄️ Timed Actions & Tweens in AniGraph
You can add timed actions---meaning actions that occur at every time update for a certain finite duration of time---using AniGraph's AController.addTimedAction function. This makes the most sense to use on your scene controller. Here is a function that, when called from the scene controller, will cause sceneController.model.meshModel to spin according to a spline:
📄️ Loading 3D Models
If you want to load 3D models, first be aware that loading arbitrary formats is tricky, and we make no guarantees that you will be able to load the model of your choice. We do, however, provide some default functionality in the example scenes.
📄️ Shaders
-"Let's throw some shade"
📄️ Multi-Pass Reflections
The Model in the Mirror
📄️ Submission
While the listed deadline is December 10th
📄️ Standout Submissions From Previous Years
Last Year (2023)
📄️ Standout Submissions
Evan Zhang, Ethan Lin, & Justin Tien-Smith