On teaching 3D graphics programming with OGRE
Other instructors have said to me, “the best teachers are the ones who do not have the strongest intuitive understanding of the material they are teaching.”
At this time, I fully agree with this. The best teachers themselves must have struggled with the same material earlier in their life and thus understand the frustrations of their students.
I taught private college students intro + advanced 3D graphics programming using this book:

which in my opinion is only useful as a reference as it doesn’t progress linearly along with the student’s development when first learning 3D + OGRE.
My first introduction to 3D graphics programming was loosely structured like this (taught in parallel with another class that emphasized input/sound/physics APIs):
Week 1: Intro to graphics programming and OGRE + extra 3D theory
Week 2: SceneManager + spatial data structures + extra STL review
Week 3: Cameras + Lights + Animation + Intro exporters + artist guidelines
Week 4: Materials + Overlays + discuss OGRE frameworks like Musicala
Week 5: Project Week
Week 6: More overlays + Resources + MeshManager + Manual objects + MIDTERM
Week 7: Intro raycasting / collision / BULLET + extra math review (quaternions mostly)
Week 8: Intro + Advanced particle systems (from OGRE’s to writing your own)
Week 9: Render targets + visual effects how to (bloom/blur/etc) + discuss shaders + Compositor scripts
Week 10: Shadows (full theory) + discuss GI + External textures sources + distributing OGRE + Final exam review.
Week 11: Project Week
Week 12: FINAL EXAMS + I mark their group game (they have to make a game every 3 months as a team).
I can say with certainty that 80% of the students understood majority of the material by week 6. Not only were the mid-term marks high, but their games had exported models (from Max using LEXI or OgreMax) + materials + overlays for UIs + animations + moving cameras + etc… OGRE is simple enough that programming students can learn it in a few weeks and produce something visually interesting.
Anybody can learn 3D(not just OGRE),but past week 6 when topics becomes more obscure (few care about particle systems this early) I lose about half of the class. The games the students produce rarely have shadows(even though it’s 3 lines of code to implement in OGRE), full screen effects (again 3 lines of code), shaders, physics. Most have some collision due to gameplay necessity, but I can see the students don’t understand what is going on. Students will not put something into their game unless they somewhat understand it no matter how trivial it is to do - like shadows and motion blur in OGRE.
Regardless, almost all my students are thrust into the advanced class where most crash and burn.
The advanced class is structured like this (taught in parallel with a class that emphasized physics + networking APIs):
Week 1: Metadata/Exporters + advanced animation + constraints + more collision
Week 2: Integrating OGRE with 3rd party APIs
Week 3: Intro vertex/fragment shaders + Shader tools
Week 4: Advanced vertex/fragment shaders + Procedural textures
Week 5: Project Week
Week 6: Image processing theory + MIDTERM
Week 7: Hardware buffers + low level drawing + sprite drawing
Week 8: Graphics optimization + Level of Detail
Week 9: Advanced topics: IK, Cloth, Muscles, Lipsyncing, Deferred shading, MoCap, etc.
Week 10: Instancing + OGRE architecture + Plugins + Final exam review.
Week 11: Project Week
Week 12: FINAL EXAMS + I mark their group game.
I pretty much lost all students after vertex/fragment shaders. My understanding of shaders comes from Cook’s Shade Trees + RenderMan, but the students have no background in that. Shaders make perfect sense to me - they follow an inverted tree/graph. Shaders make no sense to my students. I have no idea how to properly teach shaders to my students. Majority of the final games didn’t have vertex/fragment shaders written by the students. The students merely borrowed OGRE/found shaders and applied them to their game models. Overall, the games look better than the previous term but since collision/physics wasn’t covered properly in their other class their games lack deep gameplay.
If I had to teach 3D graphics programming again, I’d toss out the advanced class and potentially the second half of the intro class. Students need to learn about metadata + collision + physics earlier rather than later because graphics are only 20% of a 3D game. Integrating controls + cameras + sound + physics + collision + AI is what eats most of a student’s first 3D game as there is no pre-packaged (free) AI or physics SDK that is easy to use as OGRE is.
Add comment January 4th, 2008
