GAMES 6320 · Course write-ups

Game Engineering II

C++ 引擎课程的每周作业记录。从一个 Direct3D / OpenGL 双平台的教学引擎出发,把硬编码的三角形一步步变成由资产管线构建、从 Maya 导出、经相机渲染的场景。每篇都附可下载的 Release 构建。

Course
GAMES 6320 · Game Engineering II
Term
Fall 2026 · University of Utah EAE
Stack
C++ · Direct3D · OpenGL · HLSL / GLSL · Lua · Maya
Essays
7 published · latest 2026.10.06
Latest Assignment 07 A Maya exporter, depth buffering, vertex colors A Maya mesh exporter plug-in, meshes made in Maya, depth buffering, and vertex colors. Read the write-up

All assignments

  1. 07 A Maya exporter, depth buffering, vertex colors A Maya mesh exporter plug-in, meshes made in Maya, depth buffering, and vertex colors. 8 min read
  2. 06 A human-readable mesh format and a MeshBuilder A human-readable mesh file format, a MeshBuilder tool, and loading meshes from disk. 7 min read
  3. 05 Cameras, game objects, platform-independent shaders Cameras, game objects, and platform-independent shaders. The engine gets an actual world — meshes are authored in local space and placed by a local-to-world transform, a camera supplies world-to-camera and camera-to-projected matrices, and the game tracks game objects with a position and velocity. Shaders are also rewritten so that almost everything in them is written once for both HLSL and GLSL. 9 min read
  4. 04 Reference-counted assets and render submission Assignment 03 introduced cMesh/cEffect abstractions and a platform-independent Graphics.cpp. Assignment 04 turns cMesh and cEffect into reference-counted assets, adds SubmitMeshWithEffect / SubmitClearColor submission interfaces, and moves mesh/effect ownership from the Graphics project to the MyGame project. 9 min read
  5. 03 Removing per-platform Graphics files; index buffers Assignment 02 introduced cMesh and cEffect but still had platform-specific Graphics.d3d.cpp and Graphics.gl.cpp files. Assignment 03 removes those two files completely by moving the remaining platform-specific frame work behind a small sContext abstraction. It also adds uint16_t index buffers to cMesh, makes both cMesh and cEffect initialize from caller-provided data, and renders two objects with two effects. 4 min read
  6. 02 Platform-independent mesh and effect interfaces Assignment 01 hard-coded all of the geometry and shading into the platform-specific Graphics.d3d.cpp and Graphics.gl.cpp files. Assignment 02 is about separating what from how: introduce a platform-independent cMesh (geometry) and cEffect (shading) interface, replace the hard-coded data in both renderers with instances of those abstractions, and add a second triangle so the two triangles together render a filled rectangle. 4 min read
  7. 01 Graphics library, a second game project, the asset build The assignment starts from a provided EAE6320-style engine and asks you to do a handful of things that sound small but expose a lot of how the engine is put together: introduce a new Graphics static library, split platform-specific rendering code correctly, create a second game project (MyGame) alongside the example game, hook up the asset build pipeline, and then make that game do something visible - an animated triangle - with a game-specific shader. 8 min read