Argentine Tango Dance Animation

Zachary Hatton

CSC 471 Winter 2017



The main goal of this project was to simulate Argentine Tango dance. The main components of the project consisted of creating an accurate hierarchical model representing the human body, designing animation tools to assist with creating animations, and to create a series of animations representing Tango moves. Although I started this project with the intent of simulating Tango, I believe my project evolved more into the side of creating a basic animation creation system with Argentine Tango as the case study.



R - Toggles last move to repeat until another move is activated

C - Fixes camera position to move with the couple. (Bug: doesn't work after Calicita)

- Get lead into frame position (Important)

F - Get follow into frame position (Important)



W - Move camera forwards

A - Strafe camera to the left

S - Move camera backwards

D - Strafe camere to the right

Mouse - Use the mouse to look around



0 - Plays Backwards Crossing Steps (Called this, since the follow is moving backwards)

1 - Plays Open step to the right (aka sidestep)

2 - Plays Open step to the left (aka sidestep)

3 - Plays Calicita

4 - Plays Forward Ochos


Movement Mode (press M)

Up - Backwards Crossing Steps

Left - Open step to the left (aka sidestep)

Right - Open step to the right (aka sidestep)

Down - Calicita

Space - Forward Ochos


Body Mode (press B)

Up - Go to next joint directly up

Down - Go to next joint directly down

Left - Go to next joint directly left (your left if body is facing you)

Right - Go to next joint directly right (your right if body is facing you)

Numpad 4/7 - Pitch joint in the +/- direction respectively

Numpad 8/9 - Yaw joint in the +/- direction respectively

Numpad 5/6 - Roll joint in the +/- direction respectively

NOTE: In body mode, the current joint and joint orientation is reported to the print screen. Using this information was my main method of creating the animations.


Hierarchical Model

A hierarchical model was designed with the hips being the base of the model. The model was created out of the same rounded cube model (from an .obj file) rescaled and redrawn at specific locations. The xyz axes of each joint is intially set to all have the same orientation at the start of the program. The y-axis points up from the body, the x-axis points to the body's right, and the z-axis points directly forward from the body. 


The intersection of any two blocks on the model is a joint resulting in a total of 18 joints. Every joint has a respective degree of freedom representative of an actual body. For example, the knee can pitch, but cannot roll or yaw, whereas the head can pitch, roll and yaw about the neck. A structure stores the degree of freedom and the orientation of each joint.


Animation technology


Five moves were chosen with two animations per move, one for the lead and one for the follow, for a total of ten animaitons. Each animation is composed of a series of what I decided to call "timescripts" and sub-animations.

Backward Crossing Steps: 6 timescripts, 70 sub-animations (35 lead, 35 follow)

Open steps to the left: 4 timescripts, 76 sub-animations (38 lead, 38 follow)

Open steps to the right: same as above. The same animation was used but the role was switched


Calicita: 6 timescripts,  56 sub-animations (42 lead, 14 follow)

Forward Ochos: 6 timescripts, 53 sub-animations ( 2 lead, 51 follow)

Total: 5 moves, 10 animations, 22 timescripts, 140 sub-animations



A timescript can be thought of as a duration of the animation wherein certain sub-animations will play until the timescript is over. In the real world, this can be thought of as one "step" in of move.

For example:

Leads Open to step to the left

Step 1: "Shift weight to right leg; left leg is free."

   Timescript 0: Play for 0.4 seconds these associated fourteen sub-animations. 

Step 2: "Extend left leg to the side."

   Timescript 1: Play for 0.5 seconds these associated six sub-animations. 

Step 3: "Step to the left."

   Timescript 2: Play for 0.5 seconds these associated twelve sub-animations.

Step 4: "Collect with weight on the left foot; right foot free."

   Timescript 3: Play for 0.4 seconds these associated six sub-animations.



A sub-animation is basically the rotation of a joint to reach a destination orientation. Each sub-animation consists of its timescript, the joint to rotate, the axis of rotation (pitch, roll, yaw), and the angle it will reach (not the amount it will rotate), 

For example (directly from almost any of my .ts files):

"0 12p 20.0"

   0 : timescript 0

   12: left hip socket joint

   p: pitch axis

   20.0: pitch until 20 degree mark


Storing the animations

The animations are stored in text files ending with the ".ts" ending located in the resource directory. The first section of the file are the timescripts. The timescripts start indexing at 0. A blank line separate the timescripts from the next section, the sub-animations. Each sub-animation is listed, one per line. There is no limit to the number of sub-animations and timescripts.


Translational motion

Each move only animates the body of the hierarchical model, it doesn't actually move the model. Therefore, a function was made to move the model, however only during certain parts of the animation. Specifically, only the "step" part of the animation moves the model. This was done to be as life-like as possible.


Other technology

 - Phong shading was implemented with a directional light set behind the partnerhsip to better view the moves.

- A floor with wood texture was added to get a better sense of space.