Project subjects and grading rules

Overall rules
  1. Projects should be prepared in two person groups. Solo projects and 3 person groups are also allowed, though 3 person groups will be graded more harshly.
  2. Subjects will be presented during classes. Each group’s representative will divide the subjects amongst all of the people within his group. I expect to receive the list of teams and subjects on 30 april 2020 or earlier.
  3. Two teams from the same group cannot prepare projects with the same subject.
  4. I will announce dates during winter session in which you will be able to have the projects graded. Each project will be graded based on its technical quality and the students ability to answer several questions.
  5. Trying to return completed projects after deadline ends tragically.
  6. Keep in mind that I am not always available during session. I might not be able to grade your project if you do not come at the specified date.
  7. Any plagiarized projects get the worst possible score with no hope of redemption. If a student cannot answer several basic questions about his project, then I assume he did not do it himself and the project is plagiarized.
  8. You can use any programming environment you like, as long as you will not ask me to run in on my own computer.
  9. When using some exotic programming environment you are on your own. If you have any troubles with it… good for you. Its your own fault.
  10. Non-exotic environments are:
    • Linux+gcc in any post stone age version.
    • Visual Studio .NET 2019 or earlier.
    • Codeblocks.
General requirements
  1. Use OpenGL and GLM unless you asked if you could use something else and I agreed.
  2. Virtual world is composed of several (greater than 4 and less than infinity) independent 3d objects. If the projects subject is in conflict with this requirement, ask me what to do about it.
  3. Program should not be static. There should be some animation either interactive or not.
  4. All of the objects should be textured. Use at least two textures.
  5. Use at least two light sources. Lighting of the scene should be visible.
  6. Non trivial 3D models. The scene should not be only composed of simple testing models available in programming libraries.
What is allowed
  1. Use any external library as long as it does not have anything to do with computer graphics.
  2. Use 3D models downloaded from internet.
  3. Create your own 3D models in some external software.
  4. Use any existing external libraries that allow to read 3D models. However, if those libraries have some functionality for drawing of those models, then you cant use this functionality.
What is not allowed
  1. Use any ready drawing procedures. Every line of code that is used for drawing must be your own and you must know it and understand it completely.
  2. Use of pink color.
  3. Plagiarism.
  4. You cant use any of the deprecated functions mentioned below:
    • glBegin, glEnd – use glDrawArrays or glDrawElements instead
    • glVertex, glNormal, glTexCoord – use glDrawArrays or glDrawElements instead
    • glRotate, glTranslate, glScale – use rotate/translate/scale from GLM library instead
    • gluLookAt – use lookAt from GLM library instead
    • glFrustum, gluPerspective, glOrtho – use frustum/perspective/ortho from GLM library instead
    • glCreateList, glDeleteList, glCallList – use glDrawArrays or glDrawElements instead
    • glPushMatrix, glPopMatrix – use any data structure containing mat4 objects (GLM library) instead
    • glVertexPointer, glNormalPointer, glTexCoordPointer, glColorPointer – use glVertexAttribPointer instead
    • glEnableClientState, glDisableClientState – use glEnableVertexAttribArray/glDisableVertexAttribArray instead
General grading rules
  1. Not everything can be anticipated, so every case will be considered independently, but the general rules are as follows. You get 2.0 grade free of charge. It is increased if the following conditions are met:
    • Usage of non-trivial models (retrieved from files): +0.5 to the grade
    • Correct management of 3D objects in the scene (movement according to project requirements and appropriate usage of camera): +0.5 to the grade
    • Correct texturing and lighting of objects as well as correct usage of OpenGL mechanisms for drawing: +1.0 to the grade.
    • Ability to answer questions about the project: +1.0 to the grade. Warning! This does not mean that you can buy the project and get the grade 4.0. If I catch you on not knowing how your own project works, you get 2.0.
  2. Rules for grading projects prepared by 3 person teams are the same, but I will not overlook any flaw in the project.
  3. Special projects are… special. The above rules do not apply to them. The grade is given completely based on a conversation about the project.
Standard subjects
This list is not closed. You can propose you own subject, but it must be consulted with me and I must agree on it. The subject must allow to fulfill the grading rules specified above.
  1. Rollercoaster. Rollercoaster simulator. You should be able to put camera either inside a trolley or outside.
  2. A ship. Animated ship sailing over the sea. You may do any of the following ships: galley (animated oars), steam ship (animated smoke from the chimney, rotating wheel), sail ship (animated sails reacting to wind). Water animation.
  3. Interior decorator. Visualization of furnishing of a virtual room. Position of every piece of furniture in the room should be specied in a file. The program should come with a predefined library of furniture.
  4. 3D player of chess gameplay. 3D player of chess gameplay session recorded in PGN file or similar. User should be able to modify camera position. A word of warning: PGN file format is for masochists only or people who like challenge. Using any other file format (even your own) is much easier.
  5. 3D player of GO gameplay. 3D player of GO gameplay session recorded in SGF file or similar. User should be able to modify camera position. As GO game has generally scenes less complicated, with simpler models than chess, more stress should be put on special effects, such as reflections of pawn on the board’s surface, animations etc.
  6. Flight simulator. A plane (or UFO, helicopter) flying over a 3D city. User should be able to start, fly around and land. Collision detection with buildings should be implemented as well.
  7. Car/motorcycle simulator. Predefined racing track. Automated opponents. Collision detection.
  8. 3D Windows Explorer. Graphical file explorer. When creating the application you do not need think about usability. Let your imagination run wild. You can also inspire yourself with sci-fi movies.
  9. Mechanical clock. At least 2 gearwheels, pendulum, 2 hands. Mechanical elements (ex. gearwheels) whould be synchronized.
  10. Cyborg. A controllable, walking human model. At least 10 moving elements (forearm with hand, arm, head, corpse etc.)
  11. Four-stroke engine simulation. Moving pistons, valves and crankshaft.
  12. Animated model of locomotive. Rotating wheels with spokes, steam machine.
  13. Microcosmos. Several bugs walking around in a closed room. 6 moving legs, corpse with details, bugs turn around if they hit walls or meet another bug.
  14. Virtual art museum. 4 rooms connected with corridors. Walls decorated with paintings. User controlled player. Animated models of other museum guests.
  15. 3D version of a game: Tower Defence. Classical tower defence game in any imaginable variant. Enemies and towers should be 3D models. Every fired missile could be a light source. Uneven terrain could give strategical advantages.
  16. Virtual school. User can walk around a virtual school and meet students and teachers.
  17. Virtual alcochol gallery. User should be able to walk around a gallery of alcochols, as well as choose one from several bottles and drink. The more user drinks, the more difficult walking should be. Also, some vision distortions should appear. Fractal rendering is optional ;).
  18. Virtual greek temple. User should be able to walk around a greek temple similar to the one in Acropolis. Collision detection should be implemented. User shuold not “fly around”, but walk as a human would.
  19. Virtual gothic cathedral. User should be able to walk around a gothic cathedral similar to Notre-Dame. Collision detection should be implemented. User shuold not “fly around”, but walk as a human would. Gothic architecture description can be found here.
  20. Virtual castle. User should be able to walk around a medieval castle. Scene could for example contain: moat, drawbridge (controllable), flags on towers (animated to react to wind), barracks with beds for soldiers, main building with medieval devorations, armors, axes hanging on the walls etc. Also additionally hens could run around the place, horses could stand in stables and knights could walk around the castle.
  21. Ball simulation. Ball ralling of some randomly generated heights. Heights can also be pregenerated. You should be able to drop ball anywhere. You should be abe to drop more than one ball. Optinally the balls should be able to collide with themselves. Physics simulation can be provided from an external rigid body simulation library, for example ODE.
  22. Growing tree simulation Randomly growing tree. The growing process should be animated. Optionally the tree could sway to the wind. User should be able to change camera position.
  23. 3D waterfall Thre dimensional, animated model of the waterfall where water really flows. You can use a particle system to animate water. User should be able to watch scene from any point.
  24. Robot. A user controlled walking robot. There should be a possibility to turn on auto-walking mode. The robot shuld look like an AT-AT machine attacking a rebel base at the beginning of the “Empire strikes back” movie – it should walk around on 4 legs.
  25. Aquarium. Animated aquarium, inspired by a well known screen saver with swimming fish and swaying plants. User should be able to watch aquarium from every point.
  26. Danse macabre. Dancing skeleton (model, in Blender file format). Skeleton should dance on a danceflor. Several cone light sources in multiple colors should be used as well to simulate discotheque.
  27. Volcano. Three dimensional exploding volcano emiting smoke, lava and stones. For this purpose you can use particle systems. Each explosion shuold be acoompanied with appropriate lighting effects. User should be able to watch the scene from any angle.
  28. Glider simulator Fly a glider over the heights. The terrain should be generated randomly based on plasma fractal. Other gliders and birds should fly around. Collosion detection with the terain should be implemented.
  29. Catacombs Complicated three dimensional labirynth. User can walk around this labirynth watching it from the first perspective. User shuold be able to move in all 3 dimensions (stairs, bridges, chasms etc.).
  30. Ideal gas simulation. Each particle shuold be textured. Texture could be generated proceduraly and its look shuold depend on physical model parameters (pressure, temperature etc.). For example, for low temperatures cold colors shuold dominate (blue, cyan) for high temperatures warm colors (red, yellow). Aside from colors, the texture can depend on other parameters. For example – fast moving particles can use textures storing zigzag shapes, whereas slow moving particles could use textures with multicolored blobs. The simulation should give the ability to inject new particles with different properties (lower/higher temperature) and show the energy flow between the particles.
  31. Jumping over the roofs Simple game inspired by the movie “Matrix” (“Everybody fall the first time” ;)). Madman running on skyscraper roofs and jumping from one to the other.
  32. Piano A 3D model of piano with working keys (sound is optional). User should be able to look inside and watch how parts of mechanism hit strings. Ability to open and close piano.
  33. Tank simulator. 3D Tank model that can ride around a terrain. The tank should be capable of moving its tower and gun as well as shooting (particle system).
  34. 3D version of the game: “5 balls in a line” In the original version of the game, player uses an NxN square board (where N depends on the game difficulty). In each next step several pawns (balls) appear in random places around the boards. Next, the player can move one of these balls in any place, as long as there exists a way on the boards for the pawn to “walk” there. If 5 of balls form a line, it disappears. The more balls are removed from the game, the greater the score. The game ends, when there are no free places on the board. How to port this game to 3D? Any idea is good.
  35. 3D version of the game: “Jumping Jack”. The game screen contains several platforms positioned one above the other. Each platform contains holes, which move around. Player should go up to the highest platform by jumping through those holes. Player should also avoid falling down by escaping the holes in the platform he is standing on. The player who falls down the hole, looses hitpoints. You can also loose hitpoints if you jump up with no hole above you. Finally, one or more mobs fly around the platforms. Contact with the enemy also causes you to loose hitpoints. An exemplary gameplay can be found under this address: https://www.youtube.com/watch?v=Ai-ocyGR_LQ. How to port this game to 3D? Any idea is good.
  36. 3D version of the game: “Manic Miner”. Typical platform game. We move around the screen, escape from monsters and looking for keys. After keys are found, an exit to the next level opens. Short game description along with a downloadable free version is available under this address: http://www.xmixdrix.com/manicminer. How to port this game to 3D? Any idea is good.
  37. 3D version of the game: “Pipe”. Different pipe parts are placed on a rectangular board. These parts can only be rotated. Player needs to rotate them in such a way, that the water (available from the middle of the board) reaches every part of the board. Short game description along with a flash version is available udner this address: http://home.earthlink.net/~tdglenn/unicorn/pipegame.htm. How to port this game to 3D? Any idea is good.
  38. 3D version of the game: “Pacman”. Everyone knows pacman. Player character moves around in a labyrinth and collects “sweets”. Player must avoid “ghosts” which kill him the moment they get into contact. Flash remake of Pacman is available under this address http://www.thepcmanwebsite.com/media/pacman_flash/. How to port this game to 3D? Any idea is good.
  39. 3D version of the game: “Tetris”. Everyone knows tetrix. In the 3D version of the game, blocks should be more complicated and 3 dimensional. Instead of rows, player should build layers, and look from above not from the side as it was in the original game.
  40. 3D version of the game: “Flipper”. A pinball/flipper game. A board is composed of multiple targets. A ball rolls down the board and can be hit by several arms controled by player. Player has to hit as many target as possible.
  41. First Person Shooter Game. The more complicated labyrinths the better, but the stress should be put primarily on the playing part – implementing enemies moving around and attacking player.
  42. 3D version of the game: “Truck parking”. Player rides a truck over a parking. The truck has one or two trailers. The aim of the game is to navigate this truck around obstacles and part the truck in a designed place. Player should be able to look at the game from any point.
  43. 3D version of the game: “Asteroids”. Asteroids fly all over the screen. Player is given a spaceship which can rotate 360 degrees and fly anywhere it wants. The ship suffers from inertia influence. The ship can shoot at the asteroids. When an asteroid is hit, it is split into multiple smaller asteroids. After two or three divisions, the asteroid parts are small enough to be detroyed. The aim of the game is to destroy every asteroid on the screen. How to port this game to 3D? Any idea is good.
  44. 3D version of the game: “Arkanoid”. Board of the game is composed of:
    • paddle at the screen bottom, which can be moved left and right
    • several small rectangular blocks
    • a ball that bounces of paddle and blocks
    Each blocks can be hit a set number of times before it is destroyed. The aim of the game is to destroy every block. If the ball escapes the screen it is lost. We have a limited amount of balls. Loosing every one of them ends the game. Multiple level can be implemented. Flash version of this game can be found under this adres: http://www.tripletsandus.com/80s/80s_games/arkanoid_s.htm. How to port this game to 3D? Any idea is good.
  45. 3D version of the game: “Alien Invaders”. At the screen bottom there is a player’s ship that can move left or right. Guns of the ship are pointed upwards. From the top of the screen multiple enemies approach the player’s ship. They need to be shot at of course and destroyed (preferably). The aim of the game is to exterminate the alien forces. Exemplary version of this game can be seen under this addres: http://www.pacxon4u.com/space-invaders/. How to port this game to 3D? Any idea is good.
  46. 3D version of the game: “Sokoban”. The game’s board represent a warehouse filled with boxes. Player’s character can only push those boxes. The aim of the game is to move the boxes to appropriate places. Exemplary game implementation is available at this addres: http://www.game-sokoban.com/. How to port this game to 3D? Any idea is good.
  47. 3D version of the game: “Worms”. A 3D scene should be occupied by an uneven terrain. Players can move their characters (worms) around this terrain. Each worm carries a bazooka and can shoot other worms with it. Missiles should be subject to inertia and wind. Shot angle, and shooting force can be set by a player. A worm hit with a missile looses health. After several hits it dies. The aim is to kill other players. Optionally you can implement an AI of other worms and destruction of terrain by the missiles. Each hit should be accompanied by the appropriate lighting effects and explosions. You can replace worms with any other animal if you are afraid of infringing copyrights.
  48. 3D version of the game: “Lost islands”. The board if composed of multiple square platforms forming walkways. There are treasures on some of those platforms. Player can only walk over a platform several times before it breaks. As there is nothing underneath the platforms, the player falls down and dies if he walks over broken platform. How to port this game to 3D? Any idea is good.
  49. 3D version of the game: “Snake”. A snake walks over the board and eats “apples”. After eating an apple, the snake gets longer. Snake cannot stop. It can only move forward and turn. If he hits himself or boards boundaries it dies.
  50. Worm Rider. A game inspired by games/books/movies “Dune”. Players rides over sands on a giant worm. Additionally some enemies try to attack the player. You can either stter your worm to ride over the enemies or shoot them yourself. How does riding on a worm look like? Take a look at this movie from the game: Dune.
Special subjects
Special subjects require spending a lot of additional time on learning topics not covered during classes. The only reward for doing a special subject is a warm and fuzzy feeling. Oh… I will also ignore your every absence if you do this project right. Anyway, the subjects below, are subjects that were written in previous years. Any student who wants to do a special subject must think of something new with a similar difficulty level.
  1. Mesh optimizer (1 person) Read a mesh from some 3D file format. Optimize the model by removing some of its vertices and polygons and possibly replacing them with other ones. Program should visualize the optimization process (if the used algorithm allows for it). In the worst case it should render the mesh before and after optimization.
  2. Triangle strip generation (1 person) 3D models can be drawn faster if their triangles are combined into trangle strips. A triangle strip is a sequence of triangles, where each subsequent triangles has at least one common edge with the previous triangle. Propoze the algorithm to combine triangles from any arbitrary mesh into as little triangle strips as possible.
  3. Impostors technique (2-3 persons)This is an optimization technique which replaces models placed far from camera with rectangles covered with appropriately drawn textures. For big scenes, with a lot of static objects, this improves the rendering time considerably with only slight decrease in image quality. If the camera gets close enough to such impostor, it must be replaced with the original model. There are multiple problem to solve here: when to draw impostor and when to draw the original model. How often, and how to refresh the impostor texture. Your task is to: implement the impostor technique and propose your own measures of scene quality which uses this technique. It is worth to read this article.
  4. Glass gallery (2 persons) Using GLSL you need to create a scene with multiple glass objects. Simulate refraction and reflections + optionally chromatic dispersion.
  5. Simple Raytracing algorithm in a chosen (exotic) platform (2 osoby) In this project choose some exotic execution environment: smartphone, smartwatch, browser etc. and implement a simple raytracer working in that environment. The raytracer should include ambient lighting, diffuse lighting, reflected light lighting and optionally refracted lights. Use only simple shapes (balls/planes etc.), tri-mesh is not required.
  6. Inverse Kinematics (2 persons) Inverse kinematics is a method for determining spatial alignment of hierarchical 2D and 3D models based on some desired properties of that alignment (see: http://en.wikipedia.org/wiki/Inverse_kinematics, http://cg.skeelogy.com/projects-IK.php). As a result of the project I expect a report describing the problem and used algorithm and an application which allows to animate a robots hand (forearm, arm, hand, 5 fingers) by choosing a point in 3D space where the arm must reach.