Chinese Dragon Ragdoll

By Siqi Yang
🏆 Highlight Submission

The final piece is a single-mode ragdoll simulation of a Chinese dragon:

The design intentionally combines the core ideas of:

All of the additional logic is implemented in main.cpp.


Key Features and Where They Are Implemented

1. Procedural Skeleton From the Mesh (main.cpp)

Goal: Build a clean, straight body chain and symmetric whisker chains directly from dragon.obj, without using a separate JSON rig.

This corrects noisy sample data and ensures neatly aligned bones for the body and two whiskers.


2. Skeleton, Bone Transforms, and Skinning Weights (main.cpp + include/)

Goal: Convert joint positions into a Skeleton compatible with A7, and compute skinning weights procedurally.

The mesh is then deformed every frame using linear_blend_skinning(V, skeleton, T, W, U); with updated bone transforms T.


3. Full Ragdoll Mass-Spring System (main.cpp)

Goal: Simulate all joints (body + whiskers) as a mass-spring network subject to gravity and floor collision.

Body joints are slightly heavier; whisker joints are lighter so that whiskers flutter more when the dragon moves.


4. Interactive “IK-like” Dragging (main.cpp)

Goal: Allow the user to grab the spine and manipulate the dragon, with the rest of the skeleton responding physically.

This gives a natural, intuitive way to “pose” the dragon by physically dragging its body rather than directly editing Euler angles as in A7.


5. Rendering and Visualization (main.cpp)


Acknowledgements

External Model

Only the geometry (OBJ) from this model is used. The original rig and animation data are not used; instead, this project builds a new skeleton and skinning weights on top of the mesh.

Libraries and Starter Code

No additional external C++ libraries beyond those used in the course framework are required.