abrash-black-book/52-01.md
2013-12-30 20:26:41 +11:00

82 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Chapter 52\
Fast 3-D Animation: Meet X-Sharp {#Heading1}
---------------------------------
### The First Iteration of a Generalized 3-D Animation Package {#Heading2}
Across the lake from Vermont, a few miles into upstate New York, the
Ausable River has carved out a fairly impressive gorge known as "Ausable
Chasm." Impressive for the East, anyway; you might think of it as the
poor man's Grand Canyon. Some time back, I did the tour with my wife and
five-year-old, and it was fun, although I confess that I didn't loosen
my grip on my daughter's hand until we were on the bus and headed for
home; that gorge is deep, and the railings tend to be of the single-bar,
rusted-out variety.
New Yorkers can drive straight to this wonder of nature, but Vermonters
must take their cars across on the ferry; the alternative is driving
three hours around the south end of Lake Champlain. No problem; the
ferry ride is an hour well spent on a beautiful lake. Or, rather, no
problem—once you're on the ferry. Getting to New York is easy, but, as
we found out, the line of cars waiting to come back from Ausable Chasm
gets lengthy about mid-afternoon. The ferry can hold only so many cars,
and we wound up spending an unexpected hour exploring the wonders of the
ferry docks. Not a big deal, with a good-natured kid and an entertaining
mom; we got ice cream, explored the beach, looked through binoculars,
and told stories. It was a fun break, actually, and before we knew it,
the ferry was steaming back to pick us up.
A friend of mine, an elementary-school teacher, helped take 65 sixth
graders to Ausable Chasm. Never mind the potential for trouble with 65
kids loose on a ferry. Never mind what it was like trying to herd that
group around a gorge that looks like it was designed to swallow children
and small animals without a trace. The hard part was getting back to the
docks and finding they'd have to wait an hour for the next ferry. As my
friend put it, "Let me tell you, an hour is an eternity with 65 sixth
graders screaming the song You Are My Sunshine.'"
Apart from reminding you how lucky you are to be working in a quiet,
air-conditioned room, in front of a gently humming computer, free to
think deep thoughts and eat Cheetos to your heart's content, this story
provides a useful perspective on the malleable nature of time. An hour
isn't just an hour—it can be forever, or it can be the wink of an eye.
Just think of the last hour you spent working under a deadline; I bet it
went past in a flash. Which is not to say, mind you, that I recommend
working in a bus full of screaming kids in order to make time pass more
slowly; there are quality issues here as well.
In our 3-D animation work so far, we've used floating-point arithmetic.
Floating-point arithmetic—even with a floating-point processor but
especially *without* one—is the microcomputer animation equivalent of
working in a school bus: It takes forever to do anything, and you just
*know* you're never going to accomplish as much as you want to. In this
chapter, we'll address fixed-point arithmetic, which will give us an
instant order-of-magnitude performance boost. We'll also give our 3-D
animation code a much more powerful and extensible framework, making it
easy to add new and different sorts of objects. Taken together, these
alterations will let us start to do some really interesting real-time
animation.
### This Chapter's Demo Program {#Heading3}
Three-dimensional animation is a complicated business, and it takes an
astonishing amount of functionality just to get off the launching pad:
page flipping, polygon filling, clipping, transformations, list
management, and so forth. I've been building toward a critical mass of
animation functionality over the course of this book, and this chapter's
code builds on the code from no fewer than five previous chapters. The
code that's required in order to link this chapter's animation demo
program is the following:
- Listing 50.1 from Chapter 50 (draw clipped line list);
- Listings 47.1 and 47.6 from Chapter 47 (Mode X mode set, rectangle
fill);
- Listing 49.6 from Chapter 49;
- Listing 39.4 from Chapter 39 (polygon edge scan); and
- The **FillConvexPolygon( )** function from Listing 38.1 from Chapter
38. Note that the **struct** keywords in **FillConvexPolygon( )**
must be removed to reflect the switch to typedefs in the animation
header file.
As always, all required files are in this chapter's subdirectory on the
CD-ROM.