CSCI 441 - Computer Graphics

Fall 2024 - A1 - Valaquenta

This assignment is due by 09/06/2024 11:59pm.

"Right this way, please follow me. We mustn't delay. Ilúvatar wants the park up and running as soon as we can. Time is money as they say. Do watch your step and pardon our dust. You really came just in time, we feared we would not be able to wait much longer. Before all this happened..."

construction You hurry behind the man as he continues speaking, unable to hear what he's currently saying. As you proceed through the park, you realize the majority of the park is under construction. Many attractions are in some state of repair or building. What happened here? You remember coming to Arda Land as a child and everything was working.

After a few more minutes of running through the park, the man stops at an apparent pile of rubble. He continues talking without pausing or missing a breath.

How can he keep going? I didn't think I was that out of shape but I can barely say my name let alone carry on a conversation. I don't think he stopped talking the entire way here.


Part I - Create Your Sign


"This is where you will build your ride."

My what?

"We were able to take the scraps from the other rides for you to use as a starting point. Sorry about the odd sizes, but this 700 rangar by 150 rangar piece was the largest we could find. Use it to place over the entry to your attraction. Ilúvatar is very picky about our park having a consistent look across all the rides. Please follow his instructions and don't risk facing his wrath."

rolled up scroll The man then hands you a rolled up scroll. You take it and unroll it, but it's in a language you have never seen before. Sensing your puzzlement the man says

"You must begin at once. I will translate for you."

For this assignment, create an OpenGL / GLFW program that displays your hero's name and a crest of your choosing to represent your hometown. It is recommended to use a clean version of Lab00B (Lab00BEngine.h & Lab00BEngine.cpp) as a starting point. Rename them to be A1Engine and start creating your new image.

Create a window that matches the size of the materials you have - that is, make the window 700 pixels wide by 150 pixels tall. Do not use any predefined fonts, instead draw each letter using a filled OpenGL polygon. Each letter must be constructed using only OpenGL primitives (GL_TRIANGLES, GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP.) and a set of manually created vertices. The vertices can be hardcoded in the program or read from a file if you are feeling particularly fancy.

Combinatorics: Be sure to try out the different triangle primitives that are available. There are many different types, so do not be afraid to experiment with all of them at once within your banner.

In addition, more than one color must be used when drawing the letters. The letters need to be translated, scaled, and rotated by calling glm::translate(), glm::scale(), & glm::rotate() appropriately and respectively. Make sure at least one letter is used in conjunction with each transformation.

It would be good practice to begin encapsulating data within subroutines and functions (for instance, have a function drawLetterC() that handles drawing the letter C and a separate function drawLetterS() that handles drawing the letter S). While a simple example right now, this will become much more important later on when we discuss model hierarchy and object-oriented program design.

Once your sign is created, your hero will proudly display their sign on their hero page, accessible from the leaderboard.

With very little to go on, you step back and admire your work. Not too bad. Hopefully Ilúvatar, whomever that is, will be pleased. Despite the mystery of what is coming, you are excited to be able to build the ride of your dreams.


Part II - Create Your Website


In addition to making a sign, create a webpage that showcases your work. There is a template available for your website. If you wish to use it, download this .zip file and extract it. It will create a www/ directory with the stylesheet from the course webpage, which you can use if you like. You'll be adding to it for each homework assignment, with a screenshot or screenshots of your work, a short description of the assignment, and the opportunity to talk about any neat implementation details if you so choose. The websites are a way for you to keep track of the projects you've made over the course of the semester, but you should also aim to make the descriptions accessible to people outside the course as a way to share and showcase your coursework. Hopefully you can use this as a portfolio along with your resumé.

Inside the www/ directory, there is an images/ folder. Place any screenshots and other images into this folder.

If you're not familiar with HTML, don't worry; the template shouldn't do anything crazy - a <br> signifies a newline, the <img> tag places an image. There are plenty of tutorials available for HTML if you want to add tables, change font styles, or play with the formatting. There are some comments in the template file to help you out as well.

Whether you choose to use the template or your own template, be sure to name the webpage <HeroName>.html where <HeroName> is the name of your hero without spaces in UpperCamelCase. (For example, my submission would look like ElvishScout.html .) If you have a question about what you should name your file, please ask the instructor and he will confirm how your name should look.


Documentation


With this and all future assignments, you are expected to appropriately document your code. This includes writing comments in your source code - remember that your comments should explain what a piece of code is supposed to do and why; don't just re-write what the code says in plain English. Comments serve the dual purpose of explaining your code to someone unfamiliar with it and assisting in debugging. If you know what a piece of code is supposed to be doing, you can figure out where it's going awry more easily. (Interestingly enough, this code review of Doom 3's source code says the exact opposite - well written code should require no comments. Well, we don't work at id, so we're going to comment.)

Proper documentation also means including a README.txt file with your submission. In your submission folder, always include a file called README.txt that lists:


Grading Rubric


Your submission will be graded according to the following rubric:

Percentage Requirement Description
15% Hero's name and crest are drawn to screen.
5% Window is sized appropriately
20% Hero's name and crest are constructed with solid OpenGL primitives
(e.g. GL_TRIANGLES / _STRIP / _FAN).
10% Hero's name and crest are comprised of more than one color.
15% Letters are translated, scaled, and rotated.
10% Submission includes source code, CMakeLists.txt, and README.txt with proper documentation.
Source code is well documented.
10% Webpage named <HeroName>.html submitted and updated with screenshot from latest assignment.
15% Submission formatted, compiles, and executes properly.


Experience Gained & Available Achievements


Assignment Attribute
Assignments +125 XP
Web Attribute
Web +125 XP
Combinatorics
Combinatorics
???
???


Submission


Please update your compilation such that it produces an executable with the name a1 and contains a class named A1Engine. When you are completed with the assignment, zip together your source code, CMakeLists.txt, and README.txt into a folder named src/ plus include your www/ folder. Name the zip file, HeroName_A1.zip . Upload this file to Canvas under A1. The structure of your submission should look as follows:

This assignment is due by 09/06/2024 11:59pm.