80 lines
4.6 KiB
Markdown
80 lines
4.6 KiB
Markdown
------------------------ --------------------------------- --------------------
|
||
[Previous](52-06.html) [Table of Contents](index.html) [Next](52-08.html)
|
||
------------------------ --------------------------------- --------------------
|
||
|
||
### 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.
|
||
|
||
------------------------ --------------------------------- --------------------
|
||
[Previous](52-06.html) [Table of Contents](index.html) [Next](52-08.html)
|
||
------------------------ --------------------------------- --------------------
|
||
|
||
* * * * *
|
||
|
||
Graphics Programming Black Book © 2001 Michael Abrash
|