Book Image

Hands-On C++ Game Animation Programming

By : Gabor Szauer
Book Image

Hands-On C++ Game Animation Programming

By: Gabor Szauer

Overview of this book

Animation is one of the most important parts of any game. Modern animation systems work directly with track-driven animation and provide support for advanced techniques such as inverse kinematics (IK), blend trees, and dual quaternion skinning. This book will walk you through everything you need to get an optimized, production-ready animation system up and running, and contains all the code required to build the animation system. You’ll start by learning the basic principles, and then delve into the core topics of animation programming by building a curve-based skinned animation system. You’ll implement different skinning techniques and explore advanced animation topics such as IK, animation blending, dual quaternion skinning, and crowd rendering. The animation system you will build following this book can be easily integrated into your next game development project. The book is intended to be read from start to finish, although each chapter is self-contained and can be read independently as well. By the end of this book, you’ll have implemented a modern animation system and got to grips with optimization concepts and advanced animation techniques.
Table of Contents (17 chapters)

Implementing clips

An animation clip is a collection of animation tracks; each track describes the motion of one joint over time and all of the tracks combined describe the motion of the animated model over time. If you sample an animation clip, you get a pose that describes the configuration of each joint in the animation clip at the specified time.

For a basic clip class, all you need is a vector of transform tracks. Because transform tracks contain the ID of the joint that they affect, you can have a minimal number of tracks per clip. The Clip class should also keep track of metadata, such as the name of the clip, whether the clip is looping, and information about the time or duration of the clip.

Declaring the Clip class

The Clip class needs to maintain a vector of transform tracks. This is the most important data that the clip contains. Other than the tracks, a clip has a name, a start time, and an end time, and the clip should know whether it's looping or not.