82 lines
4.4 KiB
Markdown
82 lines
4.4 KiB
Markdown
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.
|