68 lines
4 KiB
Markdown
68 lines
4 KiB
Markdown
### A New Animation Framework: X-Sharp {#Heading4}
|
|
|
|
Listings 52.1 through 52.10 shown earlier represent not merely faster
|
|
animation in library form, but also a nearly complete, extensible,
|
|
data-driven animation framework. Whereas much of the earlier animation
|
|
code I've presented in this book was hardwired to demonstrate certain
|
|
concepts, this chapter's code is intended to serve as the basis for a
|
|
solid animation package. Objects are stored, in their entirety, in
|
|
customizable structures; new structures can be devised for new sorts of
|
|
objects. Drawing, preparing for drawing, and moving are all vectored
|
|
functions, so that variations such as shading or texturing, or even
|
|
radically different sorts of graphics objects, such as scaled bitmaps,
|
|
could be supported. The cube initialization is entirely data driven;
|
|
more or different cubes, or other sorts of convex polyhedrons, could be
|
|
added by simply changing the initialization data in Listing 52.8.
|
|
|
|
Somewhere along the way in writing the material that became this section
|
|
of the book, I realized that I had a generally useful animation package
|
|
by the tail and gave it a name: X-Sharp. (*X* for Mode X, *sharp*
|
|
because good animation looks sharp, and, well, who would want a flat
|
|
animation package?)
|
|
|
|
Note that the X-Sharp library as presented in this chapter (and, indeed,
|
|
in this book) is not a fully complete 3-D library. Movement is supported
|
|
only along the Z axis in this chapter's version, and then in a
|
|
non-general fashion. More interesting movement isn't supported at this
|
|
point because of one of the two missing features in X-Sharp:
|
|
hidden-surface removal. (The other missing feature is general 3-D
|
|
clipping.) Without hidden surface removal, nothing can safely overlap.
|
|
It would actually be easy enough to perform hidden-surface removal by
|
|
keeping the cubes in different Z bands and drawing them back to front,
|
|
but this gets into sorting and list issues, and is not a complete
|
|
solution—and I've crammed as much as will fit into one chapter's code,
|
|
anyway.
|
|
|
|
I'm working toward a goal in this last section of the book, and there
|
|
are many lessons to be learned and stories to be told along the way. So
|
|
as X-Sharp grows, you'll find its evolving implementations in the
|
|
chapter subdirectories on the listings diskette. This chapter's
|
|
subdirectory, for example, contains the self-extracting archive file
|
|
XSHARP14.EXE, (to extract its contents you simply run it as though it
|
|
were a program) and the code in that archive is the code I'm speaking of
|
|
specifically in this chapter, with all the limitations mentioned above.
|
|
Chapter 53's subdirectory, however, contains the file XSHARP15.EXE,
|
|
which is the next step in the evolution of X-Sharp, and it is the
|
|
version that I'll be specifically talking about in that chapter. Later
|
|
chapters will have their own implementations in their respective chapter
|
|
subdirectories, in files of the form XSHARPxx.EXE, where xx is an
|
|
ascending number indicating the version. The final and most recent
|
|
X-Sharp version will be present in its own subdirectory called XSHARP22.
|
|
If you're intending to use X-Sharp in a real project, use the most
|
|
recent version to be sure that you avail yourself of all new features
|
|
and bug fixes.
|
|
|
|
### Three Keys to Realtime Animation Performance {#Heading5}
|
|
|
|
As of the previous chapter, we were at the point where we could rotate,
|
|
move, and draw a solid cube in real time. Not too shabby...but the code
|
|
I'm presenting in this chapter goes a bit further, rotating 12 solid
|
|
cubes at an update rate of about 15 frames per second (fps) on a 20 MHz
|
|
386 with a slow VGA. That's 12 transformation matrices, 72 polygons, and
|
|
96 vertices being handled in real time; not Star Wars, granted, but a
|
|
giant step beyond a single cube. Run the program if you get a chance;
|
|
you may be surprised at just how effective this level of animation is.
|
|
I'd like to point out, in case anyone missed it, that this is fully
|
|
*general* 3-D. I'm not using any shortcuts or tricks, like prestoring
|
|
coordinates or pregenerating bitmaps; if you were to feed in different
|
|
rotations or vertices, the animation would change accordingly.
|