Initial conversion to markdown
This commit is contained in:
parent
a96a114403
commit
5e10794a24
362 changed files with 67353 additions and 0 deletions
80
52-07.md
Normal file
80
52-07.md
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
------------------------ --------------------------------- --------------------
|
||||
[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
|
||||
Loading…
Reference in a new issue