NeHe Productions OpenGL Article #03


NeHe Productions: OpenGL Article #03

Article 03

Skeletal Animation


By Paul Frazee (The Rainmaker)


Skeletal Animation:

Animation is a very delicate matter, when it comes to a 3d application.
How should I do it? Which way will give me the most power without
sacrificing speed? Which format will take the least amount of space?
Should I use my own format? The list goes on and on! In the early 21st
century, more people are turning to skeletal animation for games than
anything else.

Why is skeletal animation so special? Better yet, what exactly is skeletal
animation? Simply put, it is a form of animation that uses a complex
system of bones and joints (a skeleton) to deform the model information.
Take a look at this illustration.





If you made it past the second grade, you immediately recognized this as a
triangle. A triangle has 3 points, A, B, and C. Let's say we wanted to
make point A go down some, and points B and C, to go out, making it look
like it was squashed. Let's also say that we want the entire triangle to
spin at the same time. How do we do that? Well, we could calculate and
store the coordinates of each point each frame, and then just set our
points to that every frame, but that is slow, static, and clunky. Even
then you are going to have to calculate rotations, and that could be
difficult.

Let's put some anatomy into the equation. If this were an animal, say the
rare Triangularus Sting-rayus, it would probably have 4 joints and 3
bones.





Our Triangular Ray just gained bones B1, B2 and B3, and joints J1, J2, J3
and J4 (a joint is represented as an arrow or circle, and the bones as a
line). Now if you notice, all of the bones B1-B3, and their end joints,
J2-J4, spawn off of J1, or the Base Joint. What this essentially means is
that when J1 moves, all of the children bones and their end joints will
move. So if J1 moves up some, everyone moves up some.

In a similar sense, if a child joint moves, and it has no children, only
it will move. So lets say we move J4 up some, J1-J3 would be unaffected.
Understand? Good! Now, Each bone (usually) has vertices (points) attached
to them, so that when they move, those vertices move too! In this example,
J2 would have B attached to it, J3 would have C attached to it, and J4
would have A attached to it. So if J4 moved up, A would move up equally.
If J2 moved left, B would move left equally. If J1 moved down, A-C and our
joints would all move down equally! The beauty of this system is revealed!






This is all achieved by a complex system of matrices, frames & keyframes,
and animations. Each joint is, in a way, its own little matrix.





Every vertex attached to a joint is transformed by that matrix, and saved
into a temporary, deformed version of the model, and then displayed. Very
effective, very fast, very powerful!

Paul Frazee (The Rainmaker)



Wyszukiwarka

Podobne podstrony:
NeHe Productions OpenGL Article #02
NeHe Productions OpenGL Article #01
NeHe Productions OpenGL Article #04
NeHe Productions OpenGL Article #05
article 03
863 03
Managing Producing Field
ALL L130310?lass101
Mode 03 Chaos Mode
2009 03 Our 100Th Issue
product
jezyk ukrainski lekcja 03

więcej podobnych podstron