# 3DO Animation Basics

This section provides background information about the following topics:

- Animation File Formats
- Tools for Creating 3DO Animations
- Double Buffering

## Animation File Formats

The 3DO system supports two animation file formats:

- ANIM Files. A simple animation (ANIM) is one file consisting of 3DO cels and information about the frame rate.

- SANM Files. A streamed animation (SANM) is an animation which has been prepared for display with the 3DO DataStreamer library.

## Tools for Creating 3DO Animations

A 3DO animation is a linked list of 3DO cels. You can therefore create animations using one of the available graphics tools, or by linking cels directly using one of the following tools:

- 3DO Animator-Create animations from scratch using a variety of features including distortion and a light table. You can also convert a QuickTime movie into an animation. The animation can then be saved in 3DO ANIM format.

- DeBabelizer CCM-Convert a list of files or a QuickTime movie to 3DO ANIM or 3DO SANM format. An SANM is a streamed animation that can be used directly by the 3DO DataStreamer.

- MPW-Use MPW to concatenate a list of cel files.

- StreamMaker-Convert an ANIM file to an SANM file for use with the 3DO DataStreamer.

## Double Buffering

The process of showing a display buffer on the TV screen is not instantaneous; it takes a full 1/30 of a second to move the entire buffer to the screen. The display hardware is completely separate from the cel hardware, so the display-to-TV process happens continuously in the background. Because of this, it is possible to draw cels to a display buffer that is at the same time being shown on the screen. However, when you draw to an active display buffer, cels may tear or not draw completely. To avoid drawing to an active display buffer, you can create two display buffers, switching between them every frame. This technique is known as double buffering, and you'll find it necessary for most 3DO applications.

Double buffering is used for displaying images-as in the slide show example- or for displaying animations, as in all other examples with the exception of jsshowcel. The `CreateBasicDisplay()` function in Lib3DO sets up a `TheScreen` structure, which contains, among other things, an array of screen items. An index counter flips between two screens every frame. At the end of a draw cycle, the code calls `DisplayScreen()` which waits until the next vertical blank and then switches the hardware to display the new buffer.