FMX Modeling
Overview
Freestyle motocross or FMX is a variation on the sport of motocross in which motorcycle riders attempt to impress judges with jumps and stunts. The aim of this assignment is to model a rider, a motorbike and a FMX track. In a subsequent assignment, you will render and animate your rider and bike.
Preparation
- The assignment is to be maintained and submitted via Github Classroom.
- Make sure you have a github.com account and have access to it before proceeding.
- Read these instructions about how to get started with assignments on github.
- Click on the assignment invitation link sent on the MS Teams channel for the course to begin.
- There is no given basecode for the assignment. You are free to build on top of any of the tutorials or demo code given in the course, or to start from scratch.
- In your repository, all your source code must be in a folder called src, the report must be in a folder called doc and the executables must be made in a bin folder.
- You can put your include files in a separate include folder or you can put them in the src folder itself.
To Do
Modelling the Rider
The rider is a humanoid model with the structure as shown in the image below. Modeling a human figure is difficult, so we will simplify the human figure. An example model for a human is shown in the image below. You can create variations of this and you body parts do not need to have this exact shape. At a minimum it must have a head, neck, torso, 2 upper arms, 2 lower arms, 2 thighs and 2 legs. Hands, feet, geometry for shoulders, elbow and knees are optional - though they do make your model look more realistic. You can also design your own hierarchical tree but name the parts as per convention shown on the figure.

- Create a hierarchical model of a human as explained above. You can choose the shape of each part to be made up of whatever primitives (e.g., cubes, cylinders, ellipsoids etc.) you want, but you have to model in OpenGL.
- No external tools like 3DS Max, or Maya or Blender are allowed.
- You will be allowed to improve your model later in assignment 3 as you learn more things in the course, but you cannot change its basic hierarchy.
- Organize your model into VBO(s) and a VAO.
- Your human model should at least have the following degrees of freedom (dof) - these are also marked by numbers on the image - a) 1 dof at the knees and elbows, b) 3 dof everywhere else.
- Add more details to the model, like clothes, shoes or a helmet as required.
- Remember that finally you have to animate the model - so model the hierarchy carefully and choose your parameters and structural constraints wisely. You should not change the model hierarchy from this assignment to the next. For this reason, you have to putdown (draw the tree) what is your hierarchy in your report submitted with this assignment.
- In preparation for the animation, assign keys to vary the values of each of your model parameters, for example, you can use the uparrow key to make the model bend backward at the joint between Torso2 and Torso3, and the downarrow key to make the model bend forward. Similarly add keys to change all joint parameters.
- Add keys to allow global rotation of the entire model about its centroid, and global translation of the entire model.
- You must include a detailed description of all these key bindings in the README file of your git repository and your project report.
- The parts of your model can be made of solid colours for now - we will figure out advanced shading and texturing in the next assignment.
- Upon compilation, your code should generate an executable named a2-model-rider. When this is run it should display the rider, and allow the use of the keys as they apply to the rider.
Modelling the Bike
You can model any type of FMX bike. An example is shown below. The motorbike must have two wheels, a body and engine, handle bars. Add spokes to the wheels.

- Create a hierarchical model of the bike. Add this to your report.
- The bike parts can be made of any primitives and can be coloured solid.
- No external tools like 3DS Max, or Maya or Blender are allowed.
- Add keys to allow global rotation of the entire model about its centroid, and global translation of the entire model.
- The wheels have 1 degree of freedom, the handle bar assembly has 1 degree of freedom that also rotates the front wheel about the handle bar axis. - add keys to manipulate these degrees of freedom. Add other keys as per your requirements.
- You must include a detailed description of all these key bindings in the README file of your git repository and your project report.
- Upon compilation, your code should generate an executable named a2-model-bike. When this is run it should display the bike, and allow the use of the keys as they apply to the bike.
Modelling the Track
Create a track. Make sure that the size of the track grid is in proportion to the bike. Examples of tracks can be found by searching for fmx motocross track maps.
- Here are some links to help you design the track: Link 1 Link 2. Make sure you track at least has 4 kinds of obstacles and 5 level track stretches of any length.
- Tesselate (divide into triangles) the track mesh as much as your local machine allows (especially the flat parts).
- Colour the track with solid colours.
- No external tools like 3DS Max, or Maya or Blender are allowed.
- Add keys to allow global rotation of the entire model about its centroid, and global translation of the entire model.
- Place the rider and the bike on the track and render them together, to ensure that you are able to render all three together and that their relative scales are ok.
- Upon compilation, your code should generate an executable named a2-model-track. When this is run it should display the track, with the rider and the bike standing on it. It should allow the use of the global transformation keys to rotate and translate everything in the scene.
You are free to use any OpenGL, GLSL, GLM and GLFW commands you want.
Rendering/Reporting To Do :
- Take a jpg screenshot of the outputs of the three executables created as part of the assignment, one showing only the rider, one showing only the bike and a last showing the bike and rider standing on the track. Name these files as
- -01.jpg, - -02.jpg and - -03.jpg respectively. If you are working alone, use -nil. - Upload these screenshots to *doc folder of your repository.
- Write a pdf report containing all your hierarchical models for the rider and the bike, explaining how you created your models. Name this report file report.pdf. Make sure you include the names of both members of your group in the report. Put the report in the doc folder in the repository tree.
Do NOT do the following:
- Do not write untidy code or unorganized code. This will be penalized.
- Do not submit an untidy repository. Make sure that at submission time your repository contains only source files, screenshots and the report. No temporary files, object files, executables or other files must be present.
- Do not name the submitted screenshots incorrectly.
Marking
- Modelling the rider (colour and geometry): 100 marks
- Adding key controls to modify various the degrees of freedom of the rider: 50 marks
- Adding global transformation key controls to the rider: 30 marks
- Generating the appropriate executable and uploading the correct screenshot for the rider: 20 marks
- Modelling the bike (colour and geometry): 100 marks
- Adding key controls to modify various the degrees of freedom of the bike: 50 marks
- Adding global transformation key controls to the bike: 30 marks
- Generating the appropriate executable and uploading the correct screenshot for the bike: 20 marks
- Modelling the track (colour, geometry of obstacles and level track): 100 marks
- Adding global transformation key controls to the track: 30 marks
- Generating the appropriate executable and uploading the correct screenshot for the track with rider and bike: 50 marks
- PDF report included with submission: 20 marks
- Total: 600 marks
- Deductions: Poorly structured code : 50 marks
- Deductions: Submitting an unclean archive : 20 marks.
Important Note
Please do not put your solution code and report anywhere public. Your assignment repositories are setup so that they are visible only to you and your project partner, and to the course instructor and TAs. It should not be available online.
To Submit
- Regularly check-in the code into your teams' github repository.
- The last checkin before the deadline will be considered for marking.
- Modify the README.md file in the repository root folder stating the names and roll numbers of your partner for the assignment, and a declaration in your own words that the assignment is your own work and that you have not copied it from anywhere.
- Also cite any sources that you may have used to complete it.