				Forms In Flight II

LIMITED WARRANTY:

	This program and instruction manual are sold "AS IS", without
warranty as to their performance, merchantability, or fitness for any
particular purpose.  The entire risk as to the results and performance of
this program is assumed by you.

COPYRIGHT:

	This program and manual are copyrighted under U.S. and
international copyright laws.  Duplication of either the program or manual
for other than backup purposes is strictly prohibited.

	Illegal copying of software ultimately hurts you, the user, since
software companies which don't make sales also don't provide upgrades, and
also go out of business.

Table of Contents:

			CHAPTER 1:	INTRODUCTION

	Opening Comments	1-5
	The 3D World	        1-6
	Installation	        1-9
	Getting Started	        1-11

CHAPTER 2:     OBJECT TYPES

	Introduction	        2-1
	Your First FSURF	2-3
	Your First QSURF	2-6
	What We've Learned	2-13

CHAPTER 3:	EXAMPLES - 1

	Examples		3-1
	What We've Learned	3-17

CHAPTER 4:	EXAMPLES - 2

	Examples		4-1
	What We've Learned	4-24

CHAPTER 5:	EXAMPLES - 3

	Examples		5-1
	What We've Learned	5-15

CHAPTER 6:	EXAMPLES - 4

	Examples		6-1
	What We've Learned	6-29

The 3D World:

	With this program you can create and modify 3D objects by either
drawing on the screen, or by specifying x, y, z Cartesian Coordinates. 
Since this program uses x, y, z coordinates internally, it makes sense for
you to have some idea how they work.  We'll use an example.

	Let's say that you're an interior decorator and you need to tell
your handyman where to position a light that hangs from the ceiling (Of
course, you're out of town.  Otherwise, it would be easier to just show
him).  The light hangs from the ceiling using a chain.  You might give him
(or her) instructions like:

Starting at the corner near the door, go along the west wall for 6 feet,
then straight out from the wall 4 feet.  Adjust the length of the chain so
that the light is 6 1/2 feet from the floor.

	This description would work have no problem putting the light

                                   1-6

in the correct place.  But, now lets say that you want him to install all
of the lights in a large ballroom.  It might be easier to develop some sort
of shorthand to tell him the positions of the lights.  For instance, the
previous description could be abbreviated as:

6, 4, 6 1/2

	meaning 6 feet along the west wall, four feet out from the wall,
and 6 1/2 feet from the floor.

	So, your shorthand for telling him where to position 4 different
lights could look something like:

6, 4, 6 1/2
25, 4, 6 1/2
6, 25, 6 1/2
25, 25, 6 1/2

	This shorthand is very compact and takes much less space than using
a full paragraph to describe each position.

	Notice that for a single light, our shorthand doesn't save us much
time since we have to

				1-7

first explain how the shorthand works.  But, for many lights, our shorthand
would save us lots of time.

	Our shorthand method is very similar to the coordinate system used
internally in FORMS IN FLIGHT 2.  When you create objects in 3D using the
program, you will often have dozens, possible hundreds or even thousands of
points.  The position of each point is represented using 3 numbers (just
like our shorthand method for the lights).  These 3 numbers are called the
"X", "Y" and "Z" coordinates.

	When you create objects using the program, you can either just draw
on the screen, or you can use x, y, z coordinates to place objects in
precise positions in space.

                              1-8

Installation:

	Installation of this program on your system is easy.  There are 2
different procedures depending on whether or not you have a hard disk.

NO HARD DISK - ONLY FLOPPIES:

	If you don't have a hard disk, then the installation procedure is
to simply make a backup copy of the program disk.

	To do this, follow the instructions in the documentation that came
with your Amiga on how to copy a disk.  Remember to change the name of the
new disk from:

Copy of MMAGIC to:  MMAGIC

HARD DISK OWNERS:

	If you have a hard disk, then there are two parts to the
installation.  The first is to copy some files over to the hard disk.  The
second is to modify your startup sequence.

                              1-9

	1.	There is a batch file on the program disk called
"hdinstall" which will automatically create a directory and some
subdirectories on your hard disk.  The needed files are then automatically
copied over to the hard disk.
	To execute the installation batch file, you need to use the CLI. 
Type in:

>execute mmagic:hdinstall

	2.	The second step in the procedure is to add an ASSIGN
command to the startup sequence on your workbench disk.  The file to be
modified is called:

	Workbench:s/startup-sequence

	Using a text editor, read in this file.  Then, add the following
'assign' command to the startup sequence (not that if 'endcli' appears in
the startup sequence, then this line should come before it):

	assign mmagic: dh0:mmagic

				1-10

Getting Started:

	To start FORMS IN FLIGHT II, first use the installation procedure
described earlier.  Then with the Amiga up and running:

	1.	Insert the program disk into one of the disk drives.

	2.	Double click on the disk icon.  This opens a window.

	3.	Double click on the FIF2 icon to start the program.

Note:
If you want to run this program from the CLI instead of Intuition then be
sure to set the stack before running the program.
			
		>stack 25000
		>mmagic:fif2

	At the top of the screen is a copyright notice.  There is an IFF
image as a background, and there is a 3D object drawn on top.

	4.	Click in the copyright box.

				1-11

	5.	Next, a window opens asking you if its ok to delete the IFF
background image (from the display).  Click on the "OK" box.

	6.	The screen is redrawn with only the 3D object visible.

	Note that the initial iff background image and 3d object can be
changed.  For more details, see the OPEN and IFF BACKGND commands discussed
later.
	Now that the program is up and running, we'll try a couple of
commands.

ROTATE

	You're currently looking at a 3D object.  To move around and look
at the object from a different direction, use the rotate command.  To do
this:

 	1.	Press and release the right menu button to bring up the
menus.
	
	2.	Move the pointer over the text "PERSPECTIVE" in the
furthest left menu box.  Then, move the pointer to the right and move the
"CAMERA" box.  Then, move the pointer to the right 

				1-12

over the "ROTATE" box and click the left mouse button.
	From now on, we'll refer to this type of menu operation with the
following shorthand:

PERSPECTIVE->CAMERA->ROTATE

	3.	Move the pointer over to the right side of the screen and
click the left mouse button.  The 3D object is now drawn as if you're
looking from a slightly different position.  You've effectively moved the
CAMERA position.

	4.	If you hold down the left mouse button, the CAMERA will
continue to rotate around to the right until you release the mouse button.

	5.	To rotate around to the left, move the pointer to the left
side of the screen and click the left button.  Similarly, to rotate up or
down, move the pointer to the top or bottom of

				1-13

the screen and click the left mouse button.  Note that moving the pointer
further away from the center of the screen causes the rotations to go in
larger steps.

	6.	To leave the ROTATE mode, click the right button.

THE MENU

	There are a few things about the menu system that you should know
about.  Click the right button to bring up the menu.  Notice that in the
bottom left hand corner of the menu window is an indication of the amount
of free memory that have left.  The program will tell you when you begin to
run low on free memory.
	Also, notice the REDRAW buttons in the top of the menu window.  If
you want to make multiple menu choices between screen redraws, then click
on the N box next to REDRAW, perform as many menu choices as you like, then
click on the Y to turn REDRAW back on.  Note that you will then probably
want to force a screen redraw, to see the new image, by using the
PREFERENCES->REDRAW command.
	One final point about the

				1-14

menu is that there is an easy way to automatically repeat the last command
chosen.  All you have to do is press the F1 key.

QUIT

	Next, we're going to quit out of the program and play an animation
that's been included with your package.  To QUIT,

PROJECT->QUIT

(Remember, this is the shorthand menu operation described earlier).
	A window will open asking if you really want to quit.  Click the
left button in the "OK" box.
	The program ends.

				1-15

PLAYING AN ANIMATION:

	We'll now play an animation that's already been created with FIF2.

	Place the ACCESSORY disk in one of the disk drives and double click
on it's icon.

	A window opens.  Double click on the FAST_FLIGHT_2 icon.  This runs
the animation player program.  A file requestor opens.

	After a brief period, a list of files appears in the file
requestor.  Click with the left mouse button on the file named ANIM1.

	The animation will start to load.  After a little while, it will
play.  Once it's playing, the animation can be controlled as follows:

F1-F10:	  Sets the maximum play rate at double the function key number. 
That is, F1 is 2 images per second, F2 is 4 images per second, etc.

				1-16

1-10:   These are the keys directly below the function keys.  They set the
play rate at 21 to 30 images per second.

HELP key:	Pressing this key brings up a window which tells you the
                actual play rate.

ESC key:	Aborts the animation.

	Note that the actual play rate that you get may be less than what
you set the maximum play rate to be.  If you set the maximum play rate to
be faster than the system can actually play at, then, the system will play
the animation as fast as it can.
	Some factors affecting how fast the system can play an animation
include the screen resolution, the number of colors, and the area on the
screen that's changing during the animation.  Making any of these
parameters smaller will allow the system to play the animation at a faster
rate.
	After you're finished watching the animation.  Hit the ESC key to
abort the animation.

				1-17

			      CHAPTER 2:

			      OBJECT TYPES

Introduction:

	There are 2 different types of 3D surfaces that FORMS IN FLIGHT 2
uses when creating shapes.  We call these FSURF and QSURF.  The figure
below shows a sample FSURF and QSURF.  The one on the left is a FSURF, the
one on the right is a QSURF.

	FSURF stands for Flat SURFace.  It is made up of curves joined end
to end.  Any number of curves may be used.  An FSURF can be considered to
be like drawing on a sheet of transparent paper.  Even though the drawing
can have curves, it's still considered

				2-1

flat since it's on a flat sheet of paper,  There are 2 types of FSURFs
called OPEN and CLOSED.  In this chapter we'll only use CLOSED FSURFs.
	QSURF is the other type of object.  It stands for Quad SURFace. 
The word quad refers to the number 4.  A QSURF is made up of 4 curves
joined end to end.  It's different from the FSURF in that it has to have 4
curves.  Also, it doesn't have to be flat.  In fact, the whole purpose of
having QSURFs is to make rounded surfaces.  The system makes these rounded
surfaces by inferring what the surface should look like based on the 4
curves.  In computer graphics terminology, the QSURF is something called a
"surface patch".

	Any object that you make with FIF2 will use these two types of
surfaces.  The creation and editing commands make using these types of
surfaces easy and almost transparent.  Though, there are many times when a
good understanding of them will help you in creating fantastic shapes and
forms.
	The first real example will experiment with these surfaces.

				2-2

Your First FSURF:

	First, make sure FIF2 is up and running.  Then, erase the current
3D object using the menu command:

PROJECT->NEW

A window will open asking if you wish to erase all.  Click in the OK box.

	We'll be starting with the FSURF (that's the flat one - like
drawing on a sheet of transparent paper).  It'll be easier to work in 2D,
so execute:

PERSPECTIVE->DIMENSION->2D XY

This gets you into 2D mode looking at the XY plane.  Now, to create a new
FSURF, execute the command:

CREATE->FSURF->CLOSED

A set of cross hairs appears on the screen.  There is also a small window
which displays the coordinates of the crosshairs.  Moving the mouse around
also moves the cross hairs.  Notice that the center of the screen has the
coordinates 0, 0, 0.  As you

				2-3

move to the right, the x coordinate increases, and as you move up the
screen, the y coordinate increases.  The z coordinate remains at 0 since
we're in 2D mode working in the xy plane.
	Move the cross hairs near the center of the screen and click the
left mouse button.  Then move the cross hairs over to the right about 2
inches and click the left mouse button.  Now, move down about 2 inches and
click.  Finally, move the cross hairs about 2 inches to the left (below the
1st point) and click.  To signal the system that you're done with the
object, click the right button.  Then click the right button again to leave
this drawing mode.  Four curves will have been drawn, end to end, with the
endpoints being the spots where you clicked the left button.  These are the
CONTROL POINTS for the curves and they are marked by small squares on the
screen.  The curves are rounded and should look like:

				2-4

	Note that the exact shape of the curves can be changed to make them
more or less curved, or skewed to one side, etc.  This sort of editing will
be covered in the next chapter.  Also not that the curves could have been
made to be straight lines.  This will also be covered later.
	To see what the FSURF looks like in 3D, execute:

PERSPECTIVE->DIMENSION->3D

Then, use the ROTATE command as described in chapter 1 to look at the FSURF
from different directions.  As you can see, the curves are all in a flat
plane, as if drawn on a sheet of transparent paper.
	When you're finished looking at the FSURF from different sides, go
back into 2D by

				2-5

PERSPECTIVE->DIMENSION->2D XY

Your first QSURF:

	We're now going to make a QSURF.  We'll do it by converting the
FSURF into a QSURF.  Remember, a QSURF must have 4 curves while a FSURF may
have any number of curves.  We made the FSURF with 4 curves just to be able
to convert it directly into a QSURF.
	The surface conversion command, like many other editing commands,
works on all surfaces which have been selected.  There will often be times
when you have many objects on the screen at the same time and wish to
change just some of them.  The way you indicate which objects to modify is
by selecting them.  This causes them to be drawn with dotted lines.  There
are several ways of selecting objects.  We'll use the easiest.  Execute:

CREATE->SELECT->ALL

Everything is now selected (and drawn with dotted lines).  Now,

				2-6

to do the conversion:

MODIFY->CONVERT->F => Q

The FSURF is now a QSURF.  Note that if the FSURF wasn't made up of exactly
4 curves, it wouldn't have been converted into a QSURF.
	The QSURF looks similar to the FSURF, except that now there are
grid lines inside the curves.  To be sure that you're seeing a reasonable
number of grid lines, execute:

RENDER-># SIDES

A window will open that looks sort of like a KEYPAD.  Press the '4' key on
the keypad.  Notice that the number '4' appears in the box at the top of
the window.  Press the "ENTER" key to set the number of sides to 4. 
Finally, click on the OK box.  The QSURF will now be shown with a 4 by 4
grid.

	Again, look at the object by first going into 3D.  Then use the
ROTATE command.  You'll notice that the QSURF still appears to be in one
plane, as if drawn on a sheet of transparent paper.

				2-7

	When you're finished go back into the 2D XY mode.

Curving Your QSURF:

	The next thing we'll do is show the power of the QSURF and it's
whole reason for being.  We'll modify the QSURF so that it's a curved
surface in 3D (sort of like bending our imaginary transparent paper that
we've been drawing on).
	We want to change just one of the curves.  Since our editing
commands work on selected objects, we'll want to select just one of the
curves.  So execute:

CREATE->SELECT->NONE

to first un-select everything.  Now, execute:

CREATE->SELECT->BY CURVE

Then, decide which curve you'd like to modify.  Move the pointer over one
of the CONTROL POINTS (marked by a square on the screen) for this curve and
click the left button (if you're not close enough to a CONTROL POINT, the
screen will flash and you'll have to try again).  Then, move the pointer
over the other CONTROL POINT for this curve, and again click the left
button.
	At this time, you could continue selecting pairs of CONTROL POINTS
to select any number of curves.  Since we only want 1 curve selected, we
want to leave this selection mode now.  To do this, click the right mouse
button once.
	Notice that the selected curve is drawn with a dotted line.
	For the next part, we want to be in 3D.  So, execute:

PERSPECTIVE->DIMENSION->3D

	Now, we're ready to change the QSURF by changing the shape

				2-9

of the selected curve.  We'll do this so that it no longer is on the
imaginary sheet of transparent paper, but instead is curved out of the
paper.

Execute the command:

MODIFY->CURVE->BOTH ENDS

This opens a small window.  Click on the DYNAMIC box and then in the square
area below the dynamic box.  Notice that the shape of the curve changes. 
But especially notice that the grid lines inside the QSURF change.  You're
actually making a curved surface in 3D.  Note that if the window is
obscuring your view of the object, it can be moved just like a standard
Amiga window by moving the mouse to the top of the window, holding down the
left

				2-10

mouse button, dragging the mouse to the side, then releasing the left mouse
button.
	Clicking at different positions in the box in the small window
changes the shape of the QSURF.  Click in the middle of the upper right
hand square in the box, then click on OK to close the small window.  Note
that this command will be covered in more detain in the next example.  For
now, we're just trying to understand QSURFs.

	To get a better feel for what the QSURF now looks like, use the
ROTATE command to move the CAMERA and view the QSURF from different
directions.
	As the final part of this example, we'll show that the QSURF is
actually a curved surface.  FIF2 shows the curved

				2-11

surface by laying a grid on it.  This is sort of like representing part of
an airplane wing by laying a fishing net over it.  In our case, the fishing
net has been set to be a 4 by 4 grid.  But, we can change the number of
grid lines at any time.  Execute:

RENDER-># SIDES

Press the '1' key, the '2' key, then the 'ENTER' key on the keypad to set
the number of sides to 12.  Then click on the OK box.  The QSURF has the
same shape that it had before, but it's now represented with a 12 by 12
grid!  You can change the number of grid lines at any time.  Note that
choosing 0 as the number of grid lines causes the system to automatically
pick some appropriate number.

				2-12

WHAT WE'VE LEARNED SO FAR:

	This is perhaps the single most important chapter in the entire
manual.  The concepts of FSURFs and QSURFs are fundamental to almost
everything in the program.  It would be a good idea to go back through this
chapter and play with it a little until you feel comfortable with these 2
surface types.
	Listed below are the main concepts which have been presented so
far.  Included are a few extra details which were left out of the example
for simplicity.

1.  You can switch between 2D and 3D at any time.  Note that when in 2D there
are no perspective effects in the image.

2.  To move the CAMERA around to look at an object from different sides, go
into 3D mode and use the ROTATE command.

3.  There are 2 basic building blocks called FSURFs and QSURFs.  All objects
are made using these surfaces.

				2-13

4.  An FSURF is a flat surface.  There can be any number of curves in the
FSURF.  Each curve has a CONTROL POINT at it's beginning and end which are
marked by small squares.

5.  An FSURF can be thought of as a drawing on a sheet of transparent paper. 
The drawing can be made of curves.  But, the drawing is flat in that it is
all done on a flat sheet of transparent paper.  Note that in our example,
we used the XY plane.  We could have used any plane at any orientation in
3D space.

6.  There are 2 types of FSURFs.  They are called OPEN and CLOSED.  So far,
we have been using the CLOSED FSURF.

7.  A QSURF is a surface that's curved in 3D.  It is made out of 4 curves
(each with a pair of CONTROL POINTS).

8.  The QSURF can be thought of as being on transparent paper like the FSURF,
except that now you can bend the paper so that it's no longer

				2-14

flat.  The object is truly a curved surface in 3D.

9.  The QSURF is actually a smooth surface.  But, in WIRE FRAME mode (the
rendering mode we've been using so far), its represented by grid lines. 
This is sort of like representing a curved surface, (eg. an airplane wing)
by laying a fishing net over it and just drawing the fishing net.

10.  The number of grid lines in a QSURF can be changed at any time.  This is
like changing the number of grids in the fishing net.  The command is #
SIDES.

11.  The curves on the FSURF are made up of a set of straight line segments. 
The number of line segments in each curve can be set with the # SIDES
command.  Note that this wasn't explicitly covered in the example, but it's
similar to the fishing net concept of the QSURF except that here there are
no interior grid lines.

				2-15

12.  To erase all objects from the screen, use the NEW command.

13.  A 4 sided FSURF can be converted into a QSURF with the F => Q command.

14.  Many editing commands work on selected objects.  Selected objects are
drawn with dotted lines.  Note however that if two objects share a curve
and only one of them is selected, then the curve will NOT be drawn with
dotted lines.

15.  Three methods for selecting objects are used.  'ALL' selects all
surfaces.  'NONE' un-selects all surfaces.  And, 'BY CURVE' lets you select
individual curves.

16.  It is possible to change the shape of a curve with the 
MODIFY->CURVE->BOTH ENDS command.   The next chapter will cover these types
of modifications in much more detail.

				2-16

17.  To make a CLOSED FSURF that uses straight lines instead of curves, use
the command CREATE->FSURF->STRAIGHT.

				2-17

			      CHAPTER 3:

			     EXAMPLES - 1

	In this chapter we'll discuss many of the object creation and
editing commands.  In order to simplify things, we'll use the 2D modes. 
After you understand the commands, the extension to 3D is fairly simple.

OPEN FSURF

	You've already seen the command which creates a CLOSED FSURF.  The
next simplest creation command is to make an OPEN FSURF.  The OPEN FSURF is
very similar to the CLOSED FSURF.  The only difference is that with a
CLOSED FSURF the last CONTROL POINT is automatically joined to the first
CONTROL POINT, while an OPEN FSURF is not automatically closed.
	We'll start this example by first erasing everything from the
screen (NEW command), going into 2D ( XY command), then setting the number
of sides to 6 ( # SIDES).  The operation of these

				3-1

commands was covered in the last chapter.  After you've done these 3
commands, execute:

CREATE->FSURF->OPEN

	This command works like the FSURF->CLOSED command in the last
chapter.  Go ahead and move the cross hairs around, clicking the left
button at 3 different positions on the screen.  Then click the right button
twice.

	You'll notice that the FSURF didn't connect the last CONTROL POINT
with the first CONTROL POINT.  This is an OPEN FSURF.

MODIFYING CURVES

	Now let's change the shape of one of the curves.  To do this, we
first need to select the

				3-2

curve.  Use the BY CURVE command discussed in the last chapter.

	Then, after you've done that, execute:

MODIFY->CURVE->BOTH ENDS

A small window will open.  Click in the DYNAMIC box, and then in the square
block under the DYNAMIC box.  Notice that the shape of the selected curve
changes.  Click at different points in the square block under the DYNAMIC
box to see more changes in the curve.
	To understand exactly what's happening, you need to understand how
the curve is actually made.  First of all, the curve has 2 endpoints. 
Next, there is also a DIRECTION in which the curve points at each endpoint.
 And

				3-3

third, there is a factor, which some people call SPEED, which can be
thought of as a size for the curve.
	By clicking in the square block under the DYNAMIC box, you are
actually changing both the DIRECTION and SPEED of the curve at both
endpoints of your selected curve.  If you click in the right side of the
block, the DIRECTION at each end of the curve is set to start off going to
the right.  You get the opposite effect by clicking on the left side of the
block.  Similar effects occur when you click on the top or bottom of the
block.
	Clicking further from the center of the block causes the curve to
get larger.  This is simply changing the SPEED of the curve at both
endpoints.
	Experiment with this command a little.  Then click the OK box.
	Note that when the FSURF was created, the program automatically
chose default values for the SPEED and DIRECTION.

				 3-4

MORE PRECISE CONTROL

	The last command caused the shape of the curve to change at both
CONTROL POINTS.  It's also possible to change the DIRECTION and SPEED of
the curve at just one of the CONTROL POINTS.  To do this, you need to first
select which CONTROL POINT to use.  Execute:

 CREATE->SELECT->NODE

Then move the pointer over one of the CONTROL POINTS of the selected curve
and click the left button.  Then click the right button to leave the node
selection mode.  Notice the CONTROL POINT that you selected is now
highlighted.  Now,

				 3-5

execute:

MODIFY->CURVE->ONE END

Again the small window opens.  click on the DYNAMIC box and again in the
small block under the DYNAMIC box.
	Notice that only one end of the curve changes.  The end that
changes is the one near the highlighted node.  If you had chosen more than
one node, then all selected curves with a highlighted node would have been
modified.
	Experiment a little by clicking in the box until you feel
comfortable with this command.  Then, click in the OK box.

				3-6

ROUNDING

	There is another command which modified the SPEED at both CONTROL
POINTS of every selected curve.  Execute:

 MODIFY->ROUND IT

 A small window opens.  Click in the DYNAMIC box, then in the drag bar near
the middle of the window.  The SPEED of the selected curve changes but the
DIRECTION at each CONTROL POINT stays the same.  Clicking in the left side
of the drag bar makes the curve smaller.  Clicking in the right side makes
it bigger.  If you make the SPEED very large, the curve will appear to have
a loop.  Experiment a little, then set the SPEED so that there are none of
these loops, and click in the OK box.
	Note the ROUND IT can be execute a few times to get rally large or
small rounding factors.

				 3-7
 SPLIT FSURF


	If you want even further control over the FSURF, then another thing
you can do is to split the selected curve into 2 curves.  This could be
done any number of times.  To do this, execute:

 MODIFY->CONVERT->SPLIT FSURF

	The selected curve is now split in 2 with an extra CONTROL POINT. 
If you did it again, it would be split into 4, etc.  Now, the modifications
for ONE END and BOTH ENDS can be done on these new curves.
	Note that splitting an FSURF can cause it's shape to change
slightly.

				 3-8

 CIRCLES:

	We'll now look at a new object creation command.  This command
creates a circle.  First, use the NEW command to erase everything from the
screen.  Also, make sure the system is in 2D.  Then, when that's done,
execute:

 CREATE->FSURF->CIRCLE

 The cross hairs will come up on the screen again.  Before we actually make
the circle, lets digress briefly to talk about input methods.  So far,
whenever we've needed to input a CONTROL POINT, we've used the cross hairs.
 But, there are 2 other methods that we could use.
	Press the ALT key that's to the right side of the space bar

				 3-9

on the keyboard.  This selects an ALTernate input mode.
	A window comes up which should look familiar.  You used this window
earlier to specify the number of grid lines ("fishing net") for the QSURF. 
Now, we'll use this window to input a coordinate for the center of our
circle.  You'll notice that there are 3 coordinates (x, y, and z) with a
number next to each.  To enter a new coordinate, type in a number on the
keypad.  The number appears in the box at the top of the window.  Pressing
eh ENTER key moves the number from the box to the currently highlighted
coordinate.  The next coordinate is then highlighted.  You can switch
between coordinates by simply pressing the ENTER key, or by clicking on the
name of the coordinate with the mouse.  For now, set the x, y, and z values
to be 0.  Then, click on the OK box.
	You've just set the center of the circle to be at the coordinate
0,0, 0.  With the current setup, this is in the center of the screen.
	The KEYPAD window will briefly close, then open again.  The system
is asking you to input

				3-10

another point for the circle.  Altogether, 3 points need to be set to
define our circle.  Press the ALT key twice to get back to the cross hairs
(Note that we've skipped the 3rd input mode.  We'll cover it later).
	Now, move the cross hairs about 2 inches straight down from the
center of the screen and click the left button.  This second point has
marked an edge point on the circle.
	The 3rd point we need to set marks what orientation the circle will
have in 3D space.  Think of the circle as being drawn on a sheet of
transparent paper.  That paper doesn't have to be flat on the xy plane.  It
could be held up and moved around to any angle.  It's this orientation that
the 3rd point is specifying.  Any 3 points which are not in a line would be
enough to define the orientation of our transparent paper.  We've already
put in 2 points.  The 3rd point can then be anywhere in the 2D XY plane. 
So, move the crosshairs anywhere on the screen (except on a line joining
the first 2 points set), and click the left button.
	It will take the system a couple of seconds to make the

				 3-11

circle.  Note that it only takes a long time the first time you draw a
circle.  Any later redraws are done much more quickly.  Also note that the
circle is made of 4 sides.  The circle is actually just a CLOSED FSURF in
which the system automatically chose a SPEED and DIRECTION for each curve
so that the FSURF looks like a circle.

	Now, go into 3D and ROTATE around the circle to see how it looks. 
Like our earlier 2D creations, it looks like it's been drawn on a sheet of
transparent paper which we're just moving around and looking at from
different sides.  Unless you're looking straight down on the circle, it
looks like an oval.

				 3-12

MOVE NODE:

	The next command we'll try is to move one of the nodes on the
circle.  Again, we'll work in 2D to make things easier.  Go into the 2D XY
plane.  Then, execute:

 MODIFY->NODE-> TO POSITION

 Move the pointer over the furthest left CONTROL POINT and click the left
button.  You've just selected which node to move.  Now, you need to specify
where to move the node to.  We'll use a little trick.  Press the ALT key
once to bring up the keypad window.  Now, we could type in a new coordinate
for the CONTROL POINT.  But instead of that, let's say that we want the
point moved to the exact center of the

				 3-13

 circle.  To do this, click on the box labeled CENTER OF ALL.  The system
will then calculate the center of all objects and use that as the new
position for the CONTROL POINT that you selected.
	The object now looks like a weirdly rounded half circle.

MIRROR IMAGES

	Next, we'll make a mirror image of our object.  First, go into 2D
XY mode.  Now, we need to select the object.  Use the SELECT->ALL command. 
Then, execute:

CREATE->COPY->BY MIRROR

The system now prompts you to input 3 points which mark the plane to mirror
around.
	The KEYPAD window appears on 

				3-14

the screen since that's the last input mode we used.  Press the ALT key
twice to bring up the crosshairs.  Then, choose 2 points, one above the
other, and just to the left side of the object.
	For the third point, click the right mouse button once.  This
chooses the 3rd point to be straight out of the screen.  This will make the
mirror image to appear to be around the line joining the first 2 points
that you set.

MOVE SELECTED NODES:

	For the last command in this chapter, we'll move 2 nodes at the
same time.  First, use the SELECT->NODE command to select the node at the
center of each

				3-15

half circle.  Remember, you do this by simply moving the pointer over the
first node, clicking the left button, moving the pointer over the second
node, clicking the left button again, then clicking the right button.  The
2 nodes are then highlighted.

Now, execute:

MODIFY->NODE->SELECTED TO

The system prompts you for the position where you want the selected CONTROL
POINTs moved to.  It's currently using the crosshairs mode.  Press the ALT
key once to bring up the KEYPAD input mode, then click in the box labeled
CENTER OF SEL to use the center of the selected object.

				3-16

WHAT WE'VE LEARNED:

	In the last chapter, you had to learn concepts.  Understanding
FSURFs and QSURFs is very important.  In this chapter, you starting
learning some the creation and editing commands.  All of the objects made
and edited in this chapter were FSURFs.  The important things to remember
from this chapter are:

1.  FSURFs may be either OPEN or CLOSED.  The difference between them is that
CLOSED FSURFs have the last CONTROL POINT automatically connected to the
first CONTROL POINT while OPEN FSURFs don't.

				3-17

2.  FSURFs may be split in 2.  This may be done a few times to split an
FSURF into 4, 8, or more curves.  The FSURS(s) actually split is the one(s)
that's been selected. Note that this is not the same as setting the # of
sides.  Splitting an FSURF introduces new CONTROL POINTS while setting the
# of sides doesn't.

3.  All curves have 1 CONTROL POINT at each end.  Also at each end is a
DIRECTION and SPEED.  Changing the DIRECTION and SPEED changes the shape of
the curve.

4.  To modify the DIRECTION and SPEED at both ends of a selected curve, use
the BOTH ENDS command.  To work on just one end of a curve, use the ONE END
command.

5.  The ROUND IT command affects the SPEED of all selected curves and makes
the curve appear to be larger or smaller.

				3-18

6.  CIRCLEs can be easily made by specifying 3 points.  A center, an edge
point, and a third point which defines the orientation of the circle in
space.

7.  MIRROR images of selected objects can be made very easily.  3 points
need to be input which define the plane of the mirror.

8.  CONTROL POINTS (nodes) can be moved one at a time to any position. 
Also, several of them can be selected and all moved at the same time.

9.  A new input method was introduced.  The last chapter introduced the
cross hairs.  This chapter showed that by hitting the ALT key, a KEYPAD
input mode could be used.

10.  The KEYPAD input mode lets you specify exact x, y, and z values.  It
also lets you specify a position by having the system automatically
calculate either the CENTER OF ALL objects or the CENTER OF SELECTED
objects.

				3-19

11.  A command not specifically covered, CREATE->FSURF->OPEN STRT creates
an FSURF using straight lines instead of curves.

12.  Another command not specifically covered, PROJECT->WORKBENCH brings
the WORKBENCH screen to the front of the display.  Another way to do the
same thing is to simultaneously press the left Amiga key and the N key on
the keyboard.

13.  To push the WORKBENCH screen behind the FIF2 screen, either click on
the WORKBENCH icon for moving the screen to the back, or simultaneously
press the left Amiga key and the M key on the keyboard.

				3-20

			      CHAPTER 4:

			    EXAMPLES - 2

	The last chapter gave you an introduction to the wide variety of
commands possible.  This chapter will continue showing new creation and
editing commands.

OPEN

	Now, we'll read in a version 2 library object that's contained on
the program disk.  Note that version 2 objects are objects that were
created with FORMS IN FLIGHT 2.  There are also version 1 objects which
were created with the original FORMS IN FLIGHT.  Execute:

PROJECT->OPEN->REV 2.X

	The first thing that happens is that the system will ask you if
it's ok to delete all current objects on the screen.  Click in the OK box. 
Note that if you wanted to add the library object to the current objects on
the screen, then you would have used

				4-1

the command CREATE->READ LIB instead of the OPEn command.
	The next thing that happens is that a file requestor window opens
so that you can choose which object you want to read in.  All objects have
a filename ending in .mm2.  There is a long box near the bottom of the file
requestor window, just below the text "Path:".  This lets you specify the
disk or directory to be displayed.  Move the pointer over the text
DEMO1.MM2 and click the left mouse button.
	The DEMO1.MM2 object is now brought in and displayed.  It's the
letter "C".  Note that the system was placed into 2D mode.  Things like
CAMERA position, 2D or 3D mode, etc. were saved as part of the library
object when it was created.

				4-2

	Note that the default object that is brought in when you run FIF2
is called:

MMAGIC:START_OBJ.MM2

If you would like a different object brought in when the program starts,
then simply create the object that you want to use and save it (discussed
later) using the name MMAGIC:START_OBJ.MM2.

SWEEP

	The Sweep command stretches a 2D object into 3D.  We'll use it to
convert the flat 2D "C" into a block in 3D.  But, before starting, set the
number of sides to 2 using the RENDER-># SIDES command. This will speed
things up a little.
	Now, select the "C" with the SELECT->ALL command.  Then, execute:

CREATE->SWEEP->AWAY/TOWARD

	The KEYPAD window opens so that you can specify a distance that the
"C" should be swept.  Enter in a value of 200.  Press the ENTER key, then
click on the OK box.

				4-3

	Next, a window will open asking if duplicate nodes should be
eliminated.  Sweeping an object can cause several nodes to be created at
the same position in space.  This command lets you automatically clean this
up.  Click on the OK box.  Next, the keypad window open asking for a
tolerance.  This tells the system how far apart 2 nodes can be along any
one direction and still be considered to be at the same spot.  Click on the
OK box.  	
	Finally, a window will open asking if duplicate curves should be
eliminated.  Click on the OK box.  The 3D block letter will now be made.
	Go into 3D to see the "C" as a 3D block letter.  Note that the "C"
appears on its's side.  This is because whenever you go into 3D mode, the
system returns the CAMERA to the orientation that it was in the last time
it was in 3D mode.  Which, in this case, makes the "C" appear to be on it's
side.  Use the rotate command to move the "C" to see what it looks like.

				4-4

	Now, let's take a closer look at the "C".  You know that the
original object read in from the library was an FSURF since it had more
than 4 sides.  The block letter that we made contains 2 of these shapes,
one at the front, and one at the back of the block.  We'll call these
ENDCAPS.  On the sides of the block are QSURFs.  You can tell that they're
QSURFs by noticing their internal grid lines.  The ENDCAPS which are FSURFs
don't have internal grid lines.
	This is an important point.  If an object has 4 sides, the easiest
way to tell whether it's a QSURF or an FSURF is to see whether or not it
has internal grid lines (of course, if the # SIDES is set to 1, then
neither of them will have internal grid lines).

				4-5

	If an object has more than 4 sides, then its definitely an FSURF. 
If it has less than 4 sides, then you should look for the telltale internal
grid lines.  Even though a QSURF must have 4 curves, one of the curves may
be very short making the object look like it has 3 sides.

TEXTURE MAPPING:

	Next, we'll try rendering this object using TEXTURE MAPPING.  This
means that an IFF image will be placed on the QSURFs.  There can be up to
15 different IFF images used at the same time (provided, of course, that
you have sufficient RAM).  Also, each IFF image can appear on 1 or more
QSURFs at the same time.
	The way of defining which IFF image goes with which QSURF is easy. 
Groups of QSURFs (and FSURFs) are put together and given a name.  Then, an
IFF image is associated with this name.
	For an actual example, we'll have all the FSURFs and QSURFs in our
object associated with just 1 name.  First, select everything using the
SELECT->ALL command.

				4-6

Then, execute:

ANIMATE->EDIT

Note that the object naming is part of the animation definition.  We won't
actually make an animation now.  We'll Simply give a name to our objects. 
The window that opens may look a little confusing.  Don't worry.  It will
be explained later on.  For now, note that there is just one object, and
it's called "MAIN".  We'll use this name for our "C".  Click on the DEFINE
box.  This associates all selected objects with MAIN.
	The next step is to tell the system which IFF image to use as the
texture map.  Click on the TMAP box.
	A new window opens listing the IFF images which have been read in
(currently none).  There is room on this screen to specify 15 different IFF
images.  For this example, we'll only use one.  At this time, we need to
read in the IFF image to be texture mapped.  Click on the ADD box.  The
file requestor opens.  Click on the DEMO1.IFF file and then on the OK box. 
This loads an IFF image.  After a couple of

				4-7

seconds, the window listing the IFF images will again appear.  Note that
there is now one IFF image that has been read in.  Also note that the
screen resolution and color palette has changed to match the IFF image. 
Note that all texture maps, as well as IFF foregrounds and backgrounds must
be at the same resolution and number of colors !  Now, click on the USE box
to associate our IFF image with the object MAIN.  Then, when the window
with the MAIN box opens, click in the OK box.
	At this time, the IFF image is associated with the same MAIN.  Our
"C" is also associated with the name MAIN.  We're almost ready to render
the image.
	Before the actual rendering, ROTATE the CAMERA around so that you
have a good view of the "C".

				4-8

	Now, use the # SIDES command to set the grids to be 6 by 6 (# sides
= 6).  Then, execute:

RENDER->MODE->SHADED

	The system will take a little while to generate the image.  Note
that the complete IFF image appears on (is mapped onto) every QSURF.  The
visible FSURF ENDCAP is drawn with a solid color.  Note that texture maps
do not appear on FSURFs, only on QSURFs.

	As a little trick, try going into wire frame mode, using the ROUND
IT command to round out the "C", then return to shaded mode.  Remember that
the ROUND IT command changes the SPEED of selected curves.  This applies to
both QSURF and FSURF curves.  If you had unselected the curves, then you'll
need to select them again before using this command will do anything.
	Note that animations can be made which cause the SPEED of curves to
change.  This can be totally automated and makes for a very effective
animation.  This is discussed further in the animation examples later on.

				4-9

CHANGE RESOLUTIONS/# COLORS:

	For the next example, we'll want to work in a different resolution.
 First, erase everything on the screen with the NEW command.  Also, we need
to go back into wire frame mode.  So, Execute:

RENDER->MODE->WIRES

	Now, execute:

PREFERENCE->RESOL/#COL

	This opens a new window.  Click on the box labeled 4 and also on
the box labeled 640x400.  This changes the system resolution to 640 x 400
with 4 colors.  Note that you can use any combination of screen resolutions
and number of colors except for 32 colors with either of 640x200 or
640x400.
	Click on the OK box.

SWEEP ALONG PATH:

	Our next example is to make a simple object, then sweep it along a
path.  First, go into 2D XZ mode.  Set the # SIDES to 1

				4-10

Then, create a CLOSED FSURF which uses 3 CONTROL POINTS.

	Now, go into 2D XY mode.  The CLOSED FSURF you just made now looks
like a straight line.  It's still the same object, it's just that now
you're viewing it from the side.  Now, create another CLOSED FSURF, use 4
CONTROL POINTS for this one.

				4-11

	This second CLOSED FSURF will act as a path for the first CLOSED
FSURF.  But first, this 2nd FSURF must be converted into a path.  In order
to convert it, we need to first select it.  To do this, we'll use a new
selection command.  Execute:

CREATE->SELECT->BOX AROUND

	Move the pointer to the upper right hand side of the screen and
click the left mouse button once.  Move the mouse pointer slowly down and
to the left.  Notice the box that's being drawn.
	In this selection mode, all objects completely inside the box will
be selected.  If an object is only partially in the box, then it won't be
selected.  So, move the pointer until the box completely surrounds the 2nd
CLOSED FSURF you made, but not the 1st CLOSED FSURF.  Then, click the left
button.
	The 2nd FSURF is now selected, and the first isn't.  Now, execute:

MODIFY->CURVE->MAKE PATH

	This converts all selected

				4-12

FSURFs into paths.  Note that the object which was the 2nd FSURF is now a
path.  The CONTROL POINTS look a little different.  They're now labeled.
	Also note that to convert a path back into a FSURF, simply select
the path and repeat the previous command.  It causes selected FSURFs to be
converted into paths, AND selected paths to be converted back into FSURFs.

	Paths have a starting point and a direction.  The starting pint is
labeled "1".  The next CONTROL POINT is labeled "2", the next and all
subsequent CONTROL POINTS are labeled "N".
	Paths are used for both sweeping and animations.
	The next step in sweeping along a path is to select the FSURF which
should be swept.

				4-13

Looking at the screen, you'll notice that what we really want to do is to
swap the selected and non selected objects.  There is a command to do this.
Execute:

CREATE->SELECT->SWAP

	Now that we have an FSURF and a path, we're ready to sweep the
FSURF.  Execute:

CREATE->SWEEP->ALONG PATH

	Then, move the pointer over the CONTROL POINT labeled "1" and click
the left button once.  Then, click the right button.  This will cause the
selected FSURF to be swept along the entire path starting at the "1"
CONTROL POINT.  If you ever want to sweep along just part of the path,
then, instead of clicking the right button, choose a second CONTROL POINT
on the path to mark the end of the sweep.

	We again see a series of messages concerning elimination of
duplicate nodes, tolerance, and elimination of duplicate curves.  Click in
the OK box in each of these windows.  Then, after a few seconds, a 2D view
of

				4-14

the object appears.

	It's possible that if the path is small or the object being swept
is large, that there will be some overlap of the object.  This doesn't
cause any problems other than making the image look strange.  If this
happens, it can be corrected with the SIZE->LOC UNIFORM command discussed
later.

	Now, let's delete the path since it's no longer needed.  Go into 2D
XZ mode and unselect everything.  Then, use the SELECT->BOX AROUND command
to select just the path.  Finally, execute:

MODIFY->DESELECT SEL

	A window opens asking ERASE

				4-15

SELECTED ?  Click in the OK box.  The path is deleted.

	The remaining object may be a little large, and off one side of the
screen, so we'll correct this now.  First, select everything with the
SELECT->ALL command.  Then, execute:

MODIFY->MOVE->FROM/TO

	This will move all the CONTROL POINTS uniformly.  You need to input
2 points.  A FROM point and a TO point.  Press the ALT key until the KEYPAD
input window appears.  Then click in the CENTER OF SEL box.  This is the
FROM point.  Next, set x, y, and z to be 0, then click on the OK box.  This
marks the TO point.  The object should then be centered on the screen.

				4-16

	Now, there are 2 ways to make the object look smaller.  One is to
actually make the object smaller.  The x, y, z coordinates of the CONTROL
POINTS are actually changed.  The other method is to just change the
magnification factor.  The x, y, z coordinates of the CONTROL POINTS don't
change, the object is just drawn a little smaller (or larger) on the
screen.  We'll use the 2nd approach.  Execute:

PERSPECTIVE->MAGNIFY

	A new window opens.  We call this window the SCALING window.  Click
on DYNAMIC, then in the drag bar under the DYNAMIC box.  Clicking in the
left side of this drag bar makes the objects smaller.  Clicking to the
right makes them larger.  Choose a reasonable size, then click in the OK
box.
	Now, go back into 3D and ROTATE around to see how the object really
looks.  You may want to increase the number of sides at this time (though
doing so slows down the rotation speed).  Try setting the number of sides
at 8 (the picture shown uses 4 sides for clarity).

				4-17

	Finally, set the number of sides back down to 1 to speed up the
next few steps.  Then, change the resolution to 320x400 and the number of
colors to 16.

SETTING UP SMOOTH SHADING:

	The technique we use for shading is called PHONG shading.  The
default light source is behind the CAMERA.  To set up for smooth shading,
you need to fix the colors.  So, first SELECT everything.  Then, execute:

MODIFY->COLOR

	This brings up the COLOR requester window.  There are 3 major
settings that have to be made.  The first is to set a range of colors for
the PHONG shading.  We'll use the 2nd row

				4-18

of 8 colors that you see in the top left side of the windows.
	Click on the lower left color box, then set the Red and Green color
drag bars all the way to the left.  Then, set the Blue color drag bar to
the middle of the range.
	Next, click on the lower right color box. Again set the Red and
Green color drag bars all the way to the left.  But this time, set the Blue
color drag bar all the way to the right.
	So, the first color you set was a dark blue.  Now, you need to make
all the colors between them to be varying shades of blue.  To do this,
click on the SPREAD box, then on the lower left hand color box.  The bottom
row of colors is now set to be a nice range of blue.
	The second major setting is to establish a dithering range.  With
dithering you are able to get what appears to be more colors on the screen
than the system supports.  The program does this by alternating light and
dark colors for the pixels.  When you look at the screen, you seem to see a
color half way between the two.  Now, click on

				4-19

the ADD 1 box, the lower left color box, then the lower right color box. 
Finally, click on the DONE AD box.  A line should now appear under the
bottom row of colors.  This chooses the bottom 8 colors to be used for the
dithering range.  This gives the effect of having 70 shades of blue.
	The last major setting is to actually choose which color you wish
to use for the selected object.  Click on any one of the colors in the
bottom row, then click in the OK box.
	The object is now drawn in blue.

	Note that there are FSURF endcaps inside the swept object.  At the
positions where the ENDCAPS touch the outer QSURF sides, both the FSURS
ENCDAP and QSURF side are the same distance from the CAMERA.  Thus, if we
were to try to shade the image now, there may be some unintended effects at
these positions in which the FSURF ENDCSAPs show through the QSURF sides. 
To eliminate this effect, we'll simply not show the ENDCAPS.  So, first
unselect everything with the SELECT->NONE command.

				4-20

Second, select just the QSURFs using the CREATE->MORE SELECT->ALL QSURFS
command.  Then, use the  RENDER->SHOW->SELECTED command to display just the
QSURF sides of the swept object.
	Finally, set the # SIDES back up to 8 and execute:

RENDER->MODE->SHADED

	The last time you used this command, it caused IFF iamges to be
TEXTURE MAPPED onto the QSURFs.  Since no IFF images have been chosen for
this object, it will render the object with smooth shading.  This will take
a little time, but the effect is very nice.

	If you like, at this time you can bring the color requestor back up
with the command:

PREFERENCED->COLOE->SYSTEM

	Now, try adjusting some of the shades of blue and look at your
object.  You may need to move the color requestor window out of the way. 
The color requestor window can be dragged just like any normal Amiga

				4-21

window.

SAVE->AS IFF

	It's possible to save the current image as an IFF image.  To do
this, execute:

PROJECT->SAVE->AS IFF

	The file requestor window will open.  click in the box under the
text PATH, type in a name (like MYIFF), press the RETURN key, and click on
the OK box.  The image is then saved as an IFF image.
	This image could then be brought into a paint program, used as an
IFF foreground or background, or used as a texture map.

	Note that up to now, everything that was brought in with the OPEN
command, or saved with the SAVE command, all used the MMAGIC disk.  This is
the default location for files.  If you would like to save to, or read from
a different disk or subdirectory, then you need to set the file PATH.  To
do this, when the file requestor comes up, you need to type the file path
in 

				4-22

front of the file name in the PATH box.  For example, if you typed in
DF1:MYIFF instead of MYIFF in the last example, then the image would have
been saved to whatever disk was in drive DF1:.

SAVE->AS OBJECT

	The object can only be saved as a library object.  Doing this would
allow you to read it in later using the OPEN command discussed at the
beginning of this chapter.  To save the object, execute:

PROJECT->SAVE->AS OBJECT

	A window will open which allows you to choose binary or ascii
format for your library object.  Choose binary by clicking on the OK box.
	Then, the file requestor window opens.  Click in the box under the
text PATH, and type in a name (like MYOBJ - note that .MM2 will
automatically be added to the file name), press the RETURN key, and click
on the OK box.  The object is saved.

				4-23

WHAT WE'VE LEARNED:

	This chapter introduced some new creation commands as well as new
perspective and rendering commands.  The things you should have learned in
this chapter are:

1.  The OPEN command can be used to read library objects from disk.  Before
reading in any object, the OPEN command first erases everything from the
screen.  Note that in order to read in objects created with previous
versions of FIF, use the command PROJECT->OPEN->REV 1.X

2.  If you would like to read in an object fromdisk without first erasing
everyting, then use  CREATE->READ LIB instead of the OPEN command.

3.  2D objects can be swept into 3D, either straight back, or along a path.
There is also a 3rd method which will be discussed later.

				4-24

4.  To sweep along a path, you need a path.  To convert an FSURF into a
path, and vice versa, use the MODIFY->CURVE->MAKE PATH command.

5.  It's possibe to place an IFF image onto a QSURF (called TEXTURE
MAPPING).  The QSURFs must be grouped together as objects, then the IFF
image must be associated withone of these objects.

6.  For smooth shading, 3 things must be done.  The RGB values of a range
of color registers must be set to run from dark to light.  Then, the color
registers must be specified as a range.  And finally, the object must be
made to be any one of the colors in the range.

7.  After setting up for TEXTURE MAPPING and/or smooth (PHONG) shading, you
need to set the display mode to be RENDER->MODE->SHADED.

				4-25

8.  To return to system to wire frame mode, use the command
RENDER->MODE->WIRES.

9.  The screen resolution and number of colors in the color palette may be
changed at any time.  Note that any changes will clear any texture mapping
or IFF foregrounds or backgrounds that you may have set up.

10.  Two new ways of selecting objects were introduced.  One was to draw a
box on the screen.  Any objects entirely within the box would be selected. 
Note that any objects outside of the box which were already selected would
remain selected.

11.  The second new selection method swaps any objects which were selected
with any objects which weren't selected.

12.  It's possible to move selected objects around by using the 
MOVE->FROM/TO command.

				4-26

13.  Selected objects may be deleted with the MODIFY->DELETE SEL command.

14.  The image on the screen can be reduced or enlarged with the MAGNIFY
command.

				4-27

			      CHAPTER 5

			     EXAMPLES - 3

	This chapter will explain more of the rendering and perspective
commands.
	The perspective commands are primarily concerned with the CAMERA
and it's position and orientation.  Some of these commands, like ROTATE,
MAGNIFY, and the various 2D/3D modes have already been discussed.
	The rendering commands deal with how the image is drawn on the
screen.  Rendering commands which you've seen so far include setting the
number of sides, as well as the wire frame and shaded modes.

PERSPECTIVE COMMANDS:

	Use the NEW command to erase everything from the screen.  Also, if
the system isn't in high resolution, then set the resolution to 640x400 and
the number of colors to 4.  Then go into the 2D XY plane and draw a small
CLOSED FSURF with 5 or 6 CONTROL POINTS.

				5-1

	Now, execute:

PERSPECTIVE->PAN->DYNAMIC

	The PANNING window opens.  Click on the DYNAMIC box then in the
square area below the dynamic box.  Notice that the image on the screen
moves.  Clicking on the right side of the box moves the image to the right.
 Clicking on the left side moves it to the left, etc.
	What's actually happening is that the CAMERA itself is moving.  The
x, y, z coordinates of the FSURF are not changing.  After experimenting by
clicking at several places in the box, click on the OK box.
	So far when talking about the CAMERA we've only talked about it's
position.  But there are 2 other settings for the CAMERA which we've sort
of left on autopilot.  The first is the direction in which the CAMERA is
pointing, and the second is the CAMERA's orientation.  That is, is it being
held on its side, or even upside down?
	The direction the CAMERA points is set by something called a LOOK
POINT.  No matter where the CAMERA is moved to, it always

				5-2

points towards this LOOK POINT.  So far the LOOK POINT has been at the x,
y, z coordinates of 0, 0, 0.  Previously when you ROTATEd the CAMERA, it
moved around but always pointed at this position 0, 0, 0.  If you want, you
can move this LOOK POINT.  In fact, that's what happened with the PAN
command that we just used.  Both the CAMERA and the LOOK POINT shifted
left/right and UP/DOWN.  Now, go back into 3D.  The LOOK POINT and the
CAMERA are returned to the position that they were at the last time you
were in 3D mode.  Try using the PAN->DYNAMIC command in 3D.

PAN - NEW CENTER

	There is one other way to pan.  Execute:

PERSPECTIVE->PAN->NEW CENTER

Then, press the ALT key a few times to cycle through the various input
modes.  One of the modes is the KEYPAD.  Another is a 3D version of the 2D
cross hairs.  And the 3rd input mode seems to leave you with a blank
screen.  This 3rd input mode lets you choose a position by clicking

				5-3

on an existing CONTROL POINT.
	Since our pan command is waiting for a position, use the ALT key to
bring up the 3rd input mode, then click on one of the CONTROL POINTS. 
Notice that the image shifts so that this CONTROL POINT is now centered on
the screen.  Use the ROTATE command to move the CAMERA around the object
and notice that the CONTROL POINT always stays centered on the screen.  The
LOOK POINT has been moved to be the same position as this CONTROL POINT.

MOVE LOOK POINT:

	The panning commands we've used so far have moved both the CAMERA
and the LOOK POINT.  But, its possible to move just the LOOK POINT.  We'll
do this now.  First, make sure you're still in 3D mode and rotate the
CAMERA around so that you're looking at the FSURF at an angle.  That is,
not straight on or edge on, but somewhere in between.  Then, execute:

PERSPECTIVE->LOOK POINT->TO POSITION

				5-4

	Then, press the ALT key until you have the 3D version of the cross
hairs on the screen.  Notice that moving the pinter around the screen
changes the x and y coordinates, but not the z coordinate.  In this input
mode, one of the coordinates stays fixed.  Press the space bar once and
again move the pointer around.  A different coordinate is fixed.  Pressing
the space bar when using the 3D crossharis changes which coordinate is
fixed.  You could use these 3D crossharis to select a new position for the
LOOK POINT.  This usually takes some practice since it's difficult to
visualize where the 3D crosshairs actually are.  Press the ALT key to bring
up the KEYPAD window and click in the CENTER OF ALL box.  We've now moved
the LOOK POINT to the center of the FSURF.

MOVE CAMERA

	In the same way that we moved the LOOK POINT, we can also move the
CAMERA to a specific coordinate.  Execute:

PERSPECTIVE->CAMERA->TO POSITION

				5-5

Then, bring up the KEYPAD window and enter the coordinate 0, 0, 500 and
click on the OK box.
	The image now looks similar to the way that it did originally in
2D, except that now the image may appear to be rotated around the center of
the screen.  The CAMERA has been moved to be directly above the FSURF.  The
LOOK POINT hasn't moved and is still at the center of the object.

ROTATE LOOK POINT

	One of the very first commands you learned was to ROTATE the CAMERA
around in 3D.  It's also possible to rotate the LOOK POINT around.  The
effect of this is to keep the CAMERA in one place while turning it and
pointing it in different directions.  To do this, execute:

PERSPECTIVE->LOOK POINT->ROTATE

Then, click anywhere on the screen, just like you did with the ROTATE
command.  You can even rotate the LOOK POINT so that your CLOSEF FSURF
moves right off the side of the screen.  Try doing this and notice how easy
it

				5-6

is to get lost.  There is an easy way to right things once the LOOK POINT
has been rotated so that all of the objects are off the side of the screen.
 First, click the right button to leave the ROTATE LOOK POINT mode.  Then
use the LOOK POINT->TO POSITION command discussed earlier.  Use the ALT key
to bring up the KEYPAD window, then click on the CENTER OF ALL box.  The
LOOK POINT is returned to the center of the FSURF.

ROLL THE CAMERA

	Another type of CAMERA motion which was briefly mentioned earlier
is to ROLL the CAMERA.  This effectively tilts the CAMERA so that it's on
its side, or even upside down.  To do this, execute:

PERSPECTIVE->CAMERA->ROLL

Then, click on the right side of the screen.  This rolls the CAMERA to the
right (the image on the screen appears to rotate around the center of the
screen, to the left).  Clicking on the left side of the screen rolls the
CAMERA to the left.  To leave

				5-7

this mode, click the right button.

HEAD'S UP

	With the last command, you turned the CAMERA over on it's side. 
This next command will turn the CAMERA back upright.  Upright is defined
asthe z axis pointing up on the screen. To do this, execute:

PERSPECTIVE->HEAD'S UP

	After doing this, the CAMERA always stays upright (Z axis
vertical).  Now try the CAMERA->ROTATE command discussed previously. 
Notice that while before it was possible to tilt the CAMERA over on its
side during the rotation, now the CAMERA remains upright while it rotates.
	To turn off the HEAD'S UP mode, just execute the command again and
it turns off.

MOVE CAMERA - IN/OUT

	There is one more way to move the CAMERA (other than animations,
which are covered later).  This command moves the

				5-8

CAMERA directly towards, or away from, the LOOK POINT.  But, before doing
this, we'll read in a library object which will better show the effects of
moving the CAMERA.  Use the OPEN command to read in the file called
DEMO2.MM2.
	Then, go into 3D and ROTATE the CAMERA to a good position for
viewing the object.  Then, execute:

PERSPECTIVE->CAMERA->IN/OUT

The SCALING window opens.  Click on the DYNAMIC obx, then in the drag bar
beneath the DYNAMIC box.  Clicking in the right side of the drag bar moves
the CAMERA away from the LOOK POINT.  Clicking in the left side moves it
towards the LOOK POINT.
	Notice that in addition to the object appearing to change size,
there is also a change in perspective.  That is, the size of parts of the
object near the CAMERA appear to change in size more rapidly than those
parts that are further away.
	Experiment a little, then click on the OK box.

				5-9

	The last perspective type of command we'll discuss is a special 2D
mode.  So far, you've been able to work in 3D or any of the 2D planes.  It
is also possible to define your own 2D planes to work in.
	Let's say that you wanted to draw an FSURF in the plane of one of
the 4 sides of the box.  Execute:

PERSPECTIVE->DIMENSION->2D UDEF

The system will then wait for you to input 3 points which define the new 2D
plane that you want to work in.
	Press the ALT key until the input mode has been switched to use an
existing node.  Then, click on 3 CONTROL POINTS on one of the 4 sides.
	The image is redrawn in this new 2D mode.  Now, create a simple
CLOSED FSURF using 3 or 4 CONTROL POINTS.  Finally, go back into 3D and use
the ROTATE command to view the new object.  Notice that the CLOSED FSURF
that you drew is in the plane of one of the 4 sides of the box.
	Note that the 3 CONTROL

				5-10

POINTS could have been chosen so as to define a plane at any orientation. 
For example, a diagonal of the box could have been used.

RENDERING

	We'll now switch from discussing perspective commands to discussing
rendering commands.  The rendering commands define how the image on the
screen should be drawn.  The smooth PHONG shading and texture mapping seen
earlier were types of rendering commands.

SHOW NODES

	One very simple rendering command defines how CONTROL POINTS should
be marked.  Up to now, a small colored box was automatically placed at each
CONTROL POINT.  It is possible to eliminate these colored boxes from the
display.  Execute:

RENDER->SHOW NODES

The nodes disappear.  Execute it again and they re-appear.

				5-11

SHOW SELECTED

	So far all of the objects we've been dealing with have been fairly
simple.  But if you were to start constructing complex objects with tens or
hundreds of QSURFs, then you would start to have a couple of problems. 
First of all, the screen redraw time would slow down making it very
frustrating to quickly edit your objects.  Secondly, the screen would
become cluttered with so many objects that it would be difficult to focus
on the section that you were trying to edit.
	There are 2 solutions to the first problem.  One is to turn the
REDRAW off, execute several commands, then turn the REDRAW back on. 
Turning the REDRAW off and on is done by simply clicking on the Y or N box
next to REDRAW in the menu.
	The other solution is to render just part of your objects.  It you
render just part of your objects, then redraws are done more quickly, and
the screen becomes less cluttered.  So, select part of the cube using the
SELECT->BOX AROUND command, then,

				5-12

execute:

RENDER->SHOW->SELECTED

Only the selected surfaces are now visible.  The surfaces that weren't
selected are hidden from view, though they're still ther and can be brought
back easily.  Execute:

RENDER->SHOW->ALL

to make all surfaces visible again.

IFF BACKGROUNDS and FOREGROUNDS

	Another type of rendering command deals with IFF images.  You've
already seen these IFF images as TEXTURE MAPS.  At that time, the IFF
images were mapped directly onto QSURFs.  Another way of using IFF images
is as a BACKGROUND or FOREGROUND.  Execute:

RENDER->IFF BACKGND

The file requestor window opens.  Click on the file named DEMO1.IFF.  After
a few seconds, the IFF image is brought in, then the box is drawn on top of
it.

				5-13

	Note that when FIF2 starts, it reads in an IFF image named
MMAGIC:START_IFF.  If you would like to customize this, simply rename a new
IFF image to be MMAGIC:START_IFF.

	To add an IFF FOREGROUND on top of the screen, execute:

RENDER->IFF FOREGND

This time, choose the file named DEMO2.OFF from the file requestor window
and click the OK box.
	There is now an IFF background, and IFF foreground, and the box
between them.
	To get rid of the background or foreground, just execute the
command IFF BACKGROUND and IFF FOREGROUND again.
	Note that if you're making an animation, it makes sense to wait
until the very end before bringing in these IFF images.  That way you won't
have to wait during the extra screen redraw time while you're editing your
objects.
	Also note that all IFF images (foreground, background, and texture
maps) must be of the same resolution.  Whenever youread in an IFF image, or
library

				5-14

object, the system changes resolution and number of colors to match the new
image/object.  If you already had IFF images in the system as
FOR/BACK-GROUNDS or TEXTURE MAPS, and they were at a different resolution
or number of colors, then they would be lost.

WHAT WE'VE LEARNED

	This chapter focused on the remaining PERSPECTIVE and RENDERING
commands.  The perspective commands describe the CAMERA position and
orientation.  The rendering commands tell the program how to draw the
images on the screen.  The main points were:

1.  There is a position in space called the LOOK POINT.  The CAMERA is
always pointed towards this LOOK POINT.

2.  The LOOK POINT can be moved to a position, it can be rotated around, or
it can be moved by PANNING.

3.  PANNING causes both the CAMERA and LOOK POINT to move.  There are two
ways to

				5-15	

PAN: dynamically, and to a NEW CENTER.

4.  Other ways to move the CAMERA include moving it to a new position,
moving it towards or away from the LOOK POINT, or rolling it.

5.  The HEAD'S UP command can be used to keep the CAMERA upright when it
moves.

6.  When working with very complex objects, the SHOW SELECTED command can
be used to show just some of the objects.  This speeds up screen redraws
and gets rid of clutter fom the screen.

7.  The small colored squares marking CONTROL POINTS can be hidden with the
SHOW NODES command.

8.  IFF images can be brought in as foregrounds and backgrounds.

9.  All IFF images (foregrounds, backgrounds, and texture maps) must be of
the same resolution and # of colors.

				5-16

			     CHAPTER 6

			    EXAMPLES - 4

	This chapter will complete the introduction of new creation and
editing commands.

COPY DYNAMIC

	This command allows you copy a selected object.  You've already
experimented with one type of copy command, the MIRROR command discussed
earlier.
	Use the OPEN command to read in the file named DEMO2.MM2.  The
object is a box.

Now, SELECT->ALL and execute:

CREATE->COPY->DYNAMIC

				6-1

The PANNING window opens.  Click on DYNAMIC, then in the square area below
the DYNAMIC box.  Notice that a copy of the original object has been
created.  This copy can be moved around by just clicking in the box below
the DYNAMIC.  When the copy is in a good position, click on OK.

	Go into 3D and use the ROTATE command to look at the objects from
different sides.

				6-2

UNDO

	The Undo command puts the system back to how it was before the last
editing or creation command was performed.  Execute:

PREFERENCES->UNDO

A window will open asking if you really want to undo.  Click in the OK box.
 Notice that the copy of the box is eliminated.

COPY - FROM/TO

	This next command also copies selected objects.  First, select
everything and go into 2D XY mode.  Then, execute:

CREATE->COPY->FROM/TO

The system will wait for you to input 2 positions.  Use the ALT key to
bring up the crosshairs.  Then, move the pointer to the center of the
selected object and click the left button.  Next, move the pointer over to
the side a little and again click the left button.  A copy of the selected
object is made.
	Go into 3D and use the ROTATE command to look at the 

				6-3

objects from different points of view.

MOVE -> DYNAMIC

	There is now 1 copy plus the original object.  Go into 2D XY mode. 
Then, to move the selected object, execute:

MODIFY->MOVE->DYNAMIC

The PANNING window opens.  Click in the DYNAMIC box and in the square under
the DYNAMIC box.  Notice that the selected object moves.  When you're
finished moving the selected object, click in the OK box.

MOVE -> FROM/TO

	This command also moves the selected object.  Execute:

MODIFY->MOVE->FROM/TO

Then, use the ALT key to bring up the crosshairs input mode.  Move the
pointer to the center of the selected object and click the left button. 
Then, move the pointer over to the side a little ways and again click the
left button.  The selected object

				6-4

moves.
	One important use of this command is to move two parts close
together.

For example:

let's say that you're creating an airplane.  In order to make the job
easier, you've broken it into sections.  You've separately made a wing and
the fuselage.  Now, you want to bring them together.  You would use the
READ LIB command to bring both objects onto the screen at the same time. 
Then, you would select the wing and use the  MOVE->FROM/TO commmand.   You
would use the ALT key to change the input mode to use an existing node,
then you would click on a CONTROL POINT on the wing, and finally on a
CONTROL POINT on the fuselage where you wanted the wing attached.

ROTATE - NUMERICALLY

	There are two other ways to move objects, and they both involve
rotating the object.  The first is to rotate the object by some angle which
you specify.
	Use the OPEN command to read in the DEMO2.MM2 object.

				6-5

Select the object, then execute:

MODIFY->MOVE->ROTATE-NUM

The KEYPAD window opens asking how many degrees to rotate.  Enter the
number 45.
	The next thing the system needs is 2 positions which define the
axis around which the selected object will be rotated.  Move the crosshairs
to the center of the selected object and click the left button.  The second
point that we want to use is a point straight out of the screen.  Click the
right button to do this.  The object is then rotated and redrawn.

				6-6

ROTATE - GRAHPHICALLY

	Use the OPEN command to again read in the DEMO2.MM2 object, then
select it.
	Even though the previous command gives you very accurate control
over rotations, it is often difficult to figure out what number to use as
an angle.  In those cases, you'd like to be able to just point at the
screen and say "rotate it like this".  A nonverbal way to do this is:

MODIFY->MOVE->ROTATE-GR.

The crosshairs appear on the screen.  Move them to the center of the
selected object and click the left button.  Next, move them over to the
side and again click the left button.  Finally move the crosshairs up a
little.

				6-7

	Notice the rubber band lines that have been drawn.  They show where
the object will be rotated to.  Click the left button.

	Experiment with this command until you get the hang of it.  It's
actually very easy to use once you understand it.

CURVE - MAKE CIRCLE

	Use the NEW command to erase everything.  Make sure you're in 2D XY
mode, and set the number of sides to 12.  Then, make a CLOSED FSURF using 6
CONTROL POINTS.
	We're going to convert this CLOSED FSURF into a circle.

				6-8

	Select the FSURF using the SELECT->ALL command.  Then, execute:

MODIFY->CURVE->MAKE CIRCLE

A message will come up telling you that you may need to split the curves to
make a good circle.  Click anywhere on the message.
	After a few secons, the object is converted into a circle.  Note
that it's still a CLOSED FSURF.  It's just that now the position of the
CONTROL POINTS as well as the SPEED and DIRECTION of each curve have been
modified so the the FSURF now looks like a circle.

				6-9

SWEEP - FROM/TO

	Next, we're going to sweep this object into a 3D block.  You've
already seen 2 sweep commands, SWEEP->AWAY/TOWARD and  SWEEP->ALONG PATH. 
This next command is the 3rd sweep command.  First of all, set the number
of sides down to 2 to speed things up.  Then, go into the 2D XZ mode so
that you're looking at the circle edge on, and it looks like a line.  Then,
execute:

CREATE->SWEEP->FROM/TO

Using the crosshairs input mode, choose the SWEEP FROM position to be
anywhere along the line (edge) of the circle.  For the 2nd point, move the
crosshairs up about 2 inches and again click the left button.
	Next, 3 windows open in succession asking you if you'd like to
eliminate duplicat nodes, etc.  These are the same questions that the
previous SWEEP commands asked.  Click on the OK box in each of these 3
windows.
	After a little while, a new shape will be drawn.  Now, go into 3D
and move the LOOK POINT so that it's at the CENTER OF

				6-10

ALL.  Then, use the ROTATE command to view the new shape.  Finally, set the
number of sides to 6.

SIZE - UNIFORM

	The next thing we'll do is size uniformly.  This command allows you
to change the size of selected objects.  Select everything.  Then, execute:

MODIFY->SIZE->UNIFORM

	The SCALING window then opens.  Click on the DYNAMIC box and in the
drag bar below the DYNAMIC box.  The object will appear to change size.
	After changing the size of the object, click in the OK box.

				6-11

SIZE - BY DIREC

	Now, we'll do a size by direction.  Previously, you used the 
SIZE->UNIFORM command to size the object.  Now, we'll just size along one
direction.
	Select everything.  Then, execute:

MODIFY->SIZE->BY DIREC.

The KEYPAD window opens allowing you to choose along which directions to
size.  Any value other than zero means to size along that direction.  Set
x, y, z to be 0, 0, 1 and click on the OK box.  This means that the size
will only be along the z direction.
	The SCALING window then opens.  Click on the DYNAMIC box and in the
drag bar below the DYNAMIC box.  The object will appear to stretch along
the z direction.  Click in the OK box.
	Finally, set the number of sides to 8 to view the shape in more
detail.

LATHE

	Next, we'll use the LATHE command.  This sweeps an object

				6-12

along a circular path.  For users of previous versions of FORMS IN FLIGHT,
this operation was called a SURFACE OF REVOLUTION.
	First, erase everything with the NEW command.  Then, go into 2D XY,
set the number of sides to 1, and draw a CLOSED FSURF with 4 or 5 CONTROL
POINTS that are all over on the left side of the screen.

	Then, select the FSURF.  Now, execute:

CREATE->SWEEP->LATHE

The system will wait for 2 positions to be input.  These 2 points define
the axis around which the FSURF will be swept.  Move the crosshairs to the
center of the screen (to the right of the FSURF) and click the left

				6-13

button.  Then, move the crosshairs straight down about 2 inches and again
click the left button.
	Click on the OK box of the next three windows that open.  The new
object is then drawn.  Now, go into 3D and center the object on the screen
by moving the LOOK POINT to the CENTER OF ALL.  You may also want to sue
the MAGNIFY command if the object overlaps the edges of the screen.  Use
the ROTATE command to bring the object into a good viewing position.

	Then, set the number of sides to 12 and view the object.

				6-14

SIZE - LOCAL, UNIFORM

	Next, set the number of sides back down to 1.  Select everything
and execute:

MODIFY->SIZE->LOC UNIFORM

	The SCALING requestor opens.  Click on the DYNAMIC box, then in the
drag bar below the DYNAMIC box.  Notice how the object changes size.  This
is different from a standard SIZE - UNIFORM.  With this SIZE we can make
the hole of the donut bigger while the walls of the donut get smaller!
	To understand why this is happening, you need to know something
about the object.  When you use the SWEEP command, the sides of the new
object are made of QSURFs.  But between each segment, there is an FSURF. 
This is like the endcaps on the "C" object created a few chapters back
which had only one segment.  The lathe object we just mad has 4 segments,
and hence 4 FSURFs.  Now, the SIZE->LOC UNIFORM command sizes all selected
FSURFs.  But each FSURF is sized locally, that is, as if it were the only
FSURF selected.

				6-15

	Click on the OK box of the SCALING window when you're done.

SIZE - LOCAL, BY DIREC

	This command combines local sizing with sizing by direction.

Execute:

MODIFY->SIZE->LOC BY DIR.

The KEYPAD window opens.  Set x, y, z to be 0, 1, 0 so that local sizing is
only along the y direction.  Click on the OK box.
	The SCALING window opens.  Click in the DYNAMIC box, then in the
drag bar below the DYNAMIC box.  Notice the effect on the object.

				6-16

Click on the OK box when done.

CONVERT Q => F

	One of the very first commands you learned was converting an FSURF
into a QSURF.  A very interesting effect can be had by going the other way
and converting a QSURF into an FSURF.  Use the OPEN command to read in the
DEMO3.MM2 object.  Select everything, then set the number of sides to 6. 
Notice that the object appears to be composed mostly of QSURF grid lines. 
Now, execute:

MODIFY->CONVERT->Q => F

	This gives an interesting representation of the object.  Try
setting the # SIDES up to some big number like 12.

				6-17

	Note that if you used the shaded mode on this object, it would no
longer look correct.  There are now FSURFs which are not in a flat plane
but are curved out like the QSURFs were.
	Note that the originalobject could be restored by first selecting
everything, and then converting FSURFs into QSURFs.  If the segment endcaps
had 4 CONTROL POINTS, then in addition to the sides of the donut becoming
QSURFs, the segment ENDCAPS would also become QSURFs.

SPLIT Q

	The next command splits a QSURF into 4 QSURFs.  This is very useful
for changing the shape of a surface.  Erase everything on the screen by
using the NEW command.  Then, go into

				6-18

2D XY, and set the number of sides to 5.  Then, make a CLOSED FSURF with 4
CONTROL POINTS.  Next, select and convert the FSURF into a QSURF.
	Now, select the QSURF, then execute:

MODIFY->CONVERT->SPLIT QSURF

The QSURF is now split into 4 QSURFs.  Each of these 4 QSURFs can then be
modified.  This is a great way to modify the shape of an object in a small
area.  Note that the QSURFs could be split again, etc.

MATCH QSURF

	Sometimes you may want to join together 2 QSURFs which have
DIRECTIONS which don't match cleanly.  This command will make

				6-19

them match.
	Unselect everything, then use the SELECT->BY CURVE command to
select just one of the inside curves in the QSURFs that were just created. 
Then, use the CRUVE->BOTH ENDS to change the shape of the curve.

	Notice that the QSURFs no longer join with each other smoothly.
	Select everything, then execute:

MODIFY->CURVE->MATCH QSURF

Three consecutive windows open.  Click the OK box in each.  Then, notice
that the QSURFs now join cleanly.

				6-20

A really good example of a use for this command is to consider making an
object that looks like a persons face (called a mask).  You could start off
with one QSURF.  This QSURF could then be split a few times.  Individual
CONTROL POINTS could be moved to make the nose, chin, etc.  Then, MATCH
QSURF could be used to join everything together smoothly.  If you actually
try doing this, I suggest you make just one side of the mask.  Then when
its done, the other side can be easily made with the COPY->BY MIRROR
commsand.

MATCH FSURF

	This command is similar to the MATCH QSURF command, but it matches
FSURFs.  Use the NEW command to erase everything.  Then, go into 2D mode
looking at

				6-21

the XY plane.  Create a CLOSED FSURF using 4 or 5 CONTROL POINTS.  Then,
select one curve and use the MODIFY->BOTH ENDS command to change the shape
of that curve.  Then, select everything.  Finally, execute:

MODIFY->CURVE->MATCH FSURF

3 consecutive windows will open.  Click in the OK box in each of them.  The
FSURF is then redrawn so that all the curves join smoothly with each other.

NODE - FROM/TO

	Next, go into 2D XZ and SELECT ALL.  Use the MOVE->FROM/TO command
to move the FSURF up about 2 inches on the screen.  This changes the z
coordinate of all the CONTROL POINTS.  Now, go back into 2D XY.
	Let's say you now wanted to move one of the nodes in the FSURF.  If
you used the NODE->TO POSITION command you'd have a problem.  The
crosshairs are giving coordinates with a z value of zero.  But, the FSURF
has been moved up so that it's CONTROL POINTS have a z value which is
different than zero.

				6-22

There are two ways we could get around this problem.  One would be to go
into a user defined 2D mode using 3 points on the FSURF.  The other way
would be to use the NODE->FROM/TO command.  Execute:

MODIFY->NODE->FROM/TO

Then, click on one of the nodes to select it as the one to be moved.  Then,
press the ALT key until you get the crosshairs.  Now, move the crosshairs
over the node you selected and click the left button.  Then, move the
pointer to the midddle of the FSURF and again click the left button.  The
FSURF changes shape, but the z value of the CONTROL POINT hasn't changed. 
The program looks at the difference in position between the FROM and TO
points, then moves the selected CONTROL POINT by the difference.
	Since the FROM and TO points had the same z value (0), there was no
change made in the z value of the CONTROL POINT.
	If this seems confusing, try looking at the object in 3D.  Notice
that the FSURF is still flat.  Then, go back into 2D XY and use the
NODE->TO POSITION

				6-23

command to move a different CONTROL POINT.  Again, go back into 3D and see
that the FSURF is no longer flat.

NODE->SEL FROM/TO

	This command moves all selected nodes using the FROM/TO method of
the last command.  Erase everything with the NEW command.  Go into 2D XY
and dran an FSURF with 7 CONTROL POINTS.  Now, select some of the CONTROL
POINTS with the SELECT->NODE command.  Finally, execute:

MODIFY->NODE->SEL FROM/TO

Move the crosshairs to the middle of the FSURF and click the left button. 
Then, move the pointer over to the right about 2 inches and again click the
left button.  Notice that all of the selected nodes have been shifted about
2 inches to the right.

CONVERT->OPEN FSURF

	This command converts any selected CLOSED FSURFs into OPEN FSURFs. 
To use it, execute:

MODIFY->CONVERT->OPEN FSURF

				6-24

The object looks the same.  But, now if it were shaded, only the outline of
the OPEN FSURF would be drawn.

CONVERT->CLOSE FSURF

	This command converts any selected CLOSED FSURFs into OPEN FSURFs. 
To use it, execute:

MODIFY->CONVERT->CLOSE FSURF

Again, the object looks the same.  But, now if it were shaded, the CLOSED
FSURF would be shaded as a solid.

ROUND OUT

	This command modifies the SPEED and DIRECTION of the curves on
selected objects.  It allows you to convert straight FSURFs and QSURFs into
rounded objects.  To do this, simply select the object, and execute:

MODIFY->CURVE->ROUND OUT

The system will prompt you to input a point.  Selected curves will then be
rounded away from this point.  You will usually want to use the CENTER OF
SEL

				6-25

mode to choose this point.

STRAIGHTEN

	This command is the opposite of the one above.  It causes the
curves of selected objects to become straight lines.  To do this, simply
select the object and execute:

MODIFY->CURVE->STRAIGHTEN

SELECT->BY COLOR

	This command lets you select all objects which are a certain color.
 The color requestor window opens.  Click on one of the colors, then the OK
box.  Any object which is that color becomes selected.  To use it, execute:

CREATE->SELECT->BY COLOR

SELECT->UNSEL NODE

	This command allows you to un-select individual CONTROL POINTS.  It
works in the same way as SELECT->NODE but it unselects nodes rather than
selecting them.

				6-26

To use it, execute:

CREATE->SELECT->UNSEL NODE

SELECT->NO NODES

This command unselects all CONTROL POINTS.  To use it, execute:

CREATE->SELECT->NO NODES

MORE SELECT->ALL FSURFS

This command selects all FSURFs.  To use it, execute:

CREATE->MORE SELECT->ALL FSURFS

MORE SELECT->ALL QSURFS

This command selects all QSURFs.  To use it, execute:

CREATE->MORE SELECT->ALL QSURFS

CLEAN->CURVES

	There may be times when 2 different curves share the same CONTROL
POINTS.  If you would like the curves to be the same (to make two objects
join

				6-27

smoothly), then execute:

MODIFY->CLEAN->CURVES

The system asks if you would like to eliminate duplicate curves.  Click on
the OK box.
	Note that the 2 objects need to be selected for this command to
work.  Also note that it can be performed on many objects at the same time
by simply having all of them selected.

CLEAN->NODES

	It's also possible that you may have a few CONTROL POINTS very
close together.  If you would like to clean this up so that there is only
one CONTROL POINT, then execute:

MODIFY->CLEAN->NODES

A window opens asking if you would like to eliminat duplicate nodes.  Click
in the OK box.
	Then, the keypad window will open asking you to input a tolerance. 
This tolerance is the maximum distance in x, y, and z that 2 points can be
and still be considered to be at the same location.

				6-28

	If necessary, change the tolerance, then click on the OK box.

WHAT WE'VE LEARNED

	This chapter completed the introduction of creation and editing
commands.  The main points were:

1.  In addition to SWEEP AWAY/TOWARD and ALONG PATH, there are 2 other ways
to sweep.  One is FROM/TO and the other is LATHE.

2.  2 new ways to COPY objects were introduced. COPY->DYNAMIC and
COPY->FROM/TO

3.  A few new ways to select objects were introduced,
	SELECT->BY COLOR
	SELECT->UNSEL NODE
	SELECT->NO NODES
	MORE SELECT->ALL FSURFS
	MORE SELECT->ALL QSURFS

				6-29

4.  4 ways to move selected objects were discussed.  MOVE->DYNAMIC,
FROM/TO, ROTATE-GR., and ROTATE-NUM.

5.  Uniform SIZE, Local SIZE and SIZE by direction were discussed.

6.  Both FSURFs and QSURFs can be made to match so that adjacent
curves/surfaces join cleanly.

7.  Any CLOSED FSURF can be converted into a circle.  Though in some cases,
the FSURF may need to be split to get a good circle.

8.  Two new ways of moving NODES were introduced, NODE->FROM/TO and
NODE->SEL FROM/TO.

9.  QSURFs can be split into 4 to allow extra surface detail to be added.

10. QSURFs can be converted into FSURFs.  The resulting wire frame images
may be preferred in some cases to using grid lines on the QSURFs.

				6-30

11. An OPEN FSURF can be converted into a CLOSED FSURF and vice versa.

12. Duplicate CONTROL POINTS can be eliminated using: MODIFY->CLEAN->NODES

13. Different curves which use the same CONTROL POINTs can be unified into
one curve using: MODIFY->CLEAN->CURVES Note that you'll usually want to use
the CLEAN->NODES first to ensure that the CONTROL POINTS are the same for
the 2 curves.

				6-31				

 			     CHAPTER 7

			    PREFERENCES

	This chapter will discuss commands in the PREFERENCES section ofthe
menu.

RESOLUTION and # OF COLORS

	It's possible to change the screen resolution and number of system
colors available.  To do this, execute:

PREFERENCES->RESOL/#COL

A small window will open.  At the top of the window are a set of boxes
which indicate the screen resolution.  Below these boxes are another set of
boxes which indicate the number of colors which may be displayed at the
same time on the screen.  The only combinations of screen resolution and
number of colors which aren't allowed are the high resolutions (interlaced
or non-interlaced) with 32 colors.  Any other combination is possible.
	Also in the small window is a box labeled CUSTOm.  By clicking on
this box, you can set

				7-1

your own custom overscan resolution.
	Click on the 320x400, then the 32 box.  This puts the system in lo
resolution interlace mode with 32 colors.
	Now, click on the OK box.  If you had chosen a CUSTOM screen
resolution, then the system would ask you for screen offsets.  You could
either choose your own or use the default values.

SYSTEM COLORS

	After the last command, it's now possible to display 32 different
colors at the same time on the screen.  Execute:

PREFERENCED->COLOR->SYSTEM

The color requestor window will open.  This window was discussed earlier
when we set up the colors for smooth shading.  There are 3 different types
of controls in this window.
	The first is to set the Red, Green, and Blue value for single color
registers.  To do this, just click on one of the color boxes, then move the
R, G, and B drag bars until you get a color that you like.  Note that

				7-2

changing the 4 colors in the top left changes the colors of the screen
background and the color requestor box itself - DO THIS VERY CAREFULLY OR
YOU MAY NOT BE ABLE TO SEE THE MENUS ANY MORE.
	The second is to use the SPREAD command.  This is used to set the
RGB values of a whole range of color registers (very useful for setting a
dithering range).  For example, set one of the color registers away to be
bright red.  Then, with the bright red color selected, click on the SPREAD
box.  Finally, click on the dark red box.  All of the colors between the
dark and bright red will then automatically be set to be varying shades of
red.
	The third type of control is to set one or more color ranges.  This
color range needs to be set when doing smooth shading.  To sset a range,
click on the ADD 1 box.  Then click on which colors you want in the range
(note that you don't need to hit each one, but rather can simply specify
and min and max color), and finally, click again on the ADD 1 box (now
labeled DONE AD).  A line is

				7-3

drawn under the colors in the range.  To clear a single range that was
previously set, click on the CLR 1 box, then on one of the colors in the
range.  To clear all ranges that have previously been set, just click on
the CLR ALL box.
	Click on the OK box.

DEFAULT COLOR

	Newly created objects are usually drawn using the default color. 
This default color can be set to be any of the colors in the palette.  Note
that some types of object creation commands, like COPY, don't use the
default color.  These commands make the new object to be the same color as
the old object.
	Execute:

PREFERENCES->COLOR->DEFAULT

The color requestor again opens.  Click on one of the colors, then on the
OK box.  The default color has now been changed to this color and any new
objects created will be made using this color.
	Go into 2D XY and create an FSURF with 5 sides.  Notice that

				7-4

the FSURF is drawn using the new default color.
	Note that the color of any object can be changed at any time using
the MODIFY->COLOR command discussed earlier.

CLIPPING

	Another type of preferences command is to set clipping on or off. 
Clipping refers to how the system deals with objects which overlap the
edges of the screen.
	If clipping is on, then objects overlapping the edge of the screen
are drawn accurately.
	If clipping is off, then objects overlapping the screen edge may be
drawn incorrectly (no damage is done), but they will be drawn faster than
if clipping is on.
	So, if your objects don't overlap the edge of the screen, you can
turn clipping off to speed things up a little.  Otherwise, leave it on.  To
turn clipping off, execute:

PREFERENCES->CLIPPING->OFF

and, to turn it back on, execute:

PREFERENCES->CLIPPING->ON

				7-5

SNAP

	You may have noticed earlier that, when making new objects like
CLOSED FSURFs, the CONTROL POINTS could be at almost any coordinate.  There
are frequently times when you don't want this to happen.  For example, if
you're using FIF2 as an architectural program, you may want CONTROL POINTS
at only whole numbers (4.0 would be ok, 4.1 would not).
	Execute:

PREFERENCES->SNAP->ON

This turns on SNAP mode.  The KEYPAD window opens.  Set x, y, z to be 1,
20, 0.  This makes it so that x coordinates have to be whole numbers.  Y
coordinates have to be in multiples of 20.  And z coordinates can be
anything.  Try going into 2D XY and creating a CLOSED FSURF using the
crosshairs.  Notice that only certain coordinates are not allowed for the
CONTROL POINTS.
	Finally, turn SNAP off by executing:

PREFERENCES->SNAP->OFF

				7-6

UNDO

	Frequently when making or editing objects, you'll make a mistake
and wish you could take back what you just did.  The UNDO command handles
this function.
	Go into 2D XY and create a CLOSED FSURF with 4 or 5 sides.  Then,
select the FSURF and use the ROUND IT command to round out all the curves.
	Then, execute:

PREFERENCES->UNDO

A window opens asking if you really want to UNDO.  Click on the OK box. 
Notice that the object is returned to how it was before you used ROUND IT. 
UNDO doesn't work with every command, but it usually eliminates the last
change or addition made.

VIEW AXES

	Up until now there has always been a small box in the upper left
hand side of the screen showing you the orientation ofthe x, y, z axes.  As
the CAMERA moved with the ROTATE or other CAMERA motion commands, these
axes would change

				7-7

to show you the new orientation.  This box can be elimintaed from the
display.  To do this, execute:

PREFERENCES->VIEW AXES

	To bring the axes back, execute the command again.

ADD A VIEW

	Up until now, there's only been one view of the objects on the
screen at any one time.  This was done to simplify the learning of the
commands.  But, its possible to have up to 4 windows open on the screen at
the same time.  Each window can be in either 2D or 3D.  Each window can
have it's own CAMERA and LOOK POINT position.  Also, all creation and
editing commands can be done in any of the windows.
	There's an advantage and a disadvantage to using multiple views. 
The advantage is that you don't have to keep switching between the 2D and
3D modes.  Both modes can be present on the screen (in different windows)
at the same time.  The disadvantage is that screen redraws take longer.

				7-8

	Whether you use one or more windows is really a matter of personal
preference.  Our preference is to work primarily with 1 window.  But to
occasionally have a 2nd open during some of the creation and editing
commands.  Execute:

PREFERENCES->ADD A VIEW

This opens a new window.  It can be repeated until there are a total of 4
views present on the screen.  They default into 2D mode.  To close a
window, click in the window close gadget in the upper left hand corner of
the window.
	Whenever there are multiple views, one of them is the currently
ACTIVE view.  Any creation or editing commands are done in that view.  To
change the active view, click in one of the other windows.  Note that this
cannot be done from within a command.  That is, for example, a CLOSED FSURF
couldn't be created by the input of 1 CONTROL POINT in one window and
another CONTROL POINT in a different window.  All input from the current
command must be in the ACTIVE window.
	Try experimenting with some

				7-9

of the creation and editing commands with multiple windows.
	Note that you may have memory limitations when using high
resolution with multiple windows and 16 colors.  Try to stay away from this
combination.
	Whether you use 1 or more windows for your future creations depends
entirely on which method you prefer.

REDRAW

	There is a command which causes the system to perform a redraw of
the screen.  The main use of this command is to cause the screen to update
after the REDRAW button at the top of the menu window is turned from N (no)
to Y (yes).  To perform a redraw, execute:

PREFERENCES->REDRAW

Note that if the REDRAW button at the top of the menu window is on N, then
the redraw is not performed.

INFO

	The info command tells you how many FSURF and QSURF objects

				7-10

there currently are.  It opens the KEYPAD window to display this
information.  Execute:

PREFERENCES->INFO

After reading the numbers, click on either the OK or the CANCEL box in the
KEYPAD window.

WHAT YOU'VE LEARNED

	This chapter nearly completes the discussion of new commands.  The
only remaining topic is creating animations.  The key points in this
chapter were:

1.  Mistakes made during the creation or editing of objects can often be
fixed by using the UNDO command.

2.  The screen resolution and number of colors possible on the screen at
the same time can be set.  Overscan can also be used if desired.

3.  The colors used on the screen can be modified by adjusting their Red,
Green, and Blue components.

				7-11

4.  There is a default drawing color for new objects which can be changed
at any time.

5.  The x, y, z coordinate axes in the top left hand corner of the screen
can be hidden.

6.  Clipping can be disabled to speed up screen redraws at the cost of
accuracy for any objects which overlap the edge of the screen.

7.  There is a SNAP mode which lets you set allowable coordinates when you
input new points.

8.  The number of views can be increased to 2, 3, or 4.  There is a
tradeoff between screen redraw speeds and the number of views used.  You
will need to experiment with this to see how many views you want to use. 
The number of views used is purely a matter of personal preference.

				7-12

			      CHAPTER 8

			     ANIMATIONS

	This chapter describes how to define and generate an animation. 
Animations can be simple to create, or they can be more difficult.  It
depends entirely on how complex and tricky you want the animation to be.
	There are several simple examples in this chapter.  Each one has
you define and generate an animation.  To further assist you, a copy of
each object and animation in this chapter has been saved on the PROGRAM
disk in the directory MMAGIC:CH8EXAMPLES.  If you have any trouble with any
of these examples, you can refer to these already made objects and
animations to see what they're supposed to look like.

EXAMPLE 1

	Go into 640x400 mode with 4 colors.  Then, go into 2D XY mode and
create a small CLOSED FSURF with 3 or 4 CONTROL POINTS.  Then, make a
larger CLOSED FSURF with the first CONTROL POINT

				8-1

being in the center of the 1st FSURF.  The first FSURF will be our object,
and the second FSURF will be a path that the first FSURF follows.
	Select the second FSURF and convert it into a path.  Then, swap
selected so that the first FSURF is selected and the second (now a path) is
not selected.  Now, execute:

ANIMATE->EDIT

A new window opens.  This window displays the objects and the hierarchy (to
be discussed shortly).  There is currently just one object in the window,
and it's name is MAIN.  Click on the DEFINE box.  This makes all selected
objects (the first FSURF) be part of the object

				8-2

named MAIN.  Note that until defined in this way, FSURFs and QSURFs are not
part of any object.  In fact, the path we made (the 2nd FSURF) is not (and
will not) be part of any object in the hierarchy.
	Now, click on the MOTION box.  This will let us specify the path
that the 1st FSURF will follow.
	A new window opens.  At the top are start and stop frame numbers. 
The animation will start at frame 1 and end at frame 10.  Underneath the
frame numbers is the acceleration.  It currently set to zero, meaning no
acceleration.
	Below the acceleration you'll see a set of 5 values.  The first 3
are for rotations which we won't use now.  The 4th and 5th are the word NO
indicating that a path has not yet been set for the MAIN object (our 1st
FSURF).
	Click on the first NO, this causes the message 'Select path start'
to appear.  Move the pointer over the 1st CONTROL POINT in the path labeled
'1' and click the left button.  This sets the animation to start at this
point.  Note that the animation

				8-3

window may be moved if it is covering the path.  Simply move the pointer to
the top of the window, press and hold the left button, and drag the window
to the side.
	Where the PATH STRT used to say NO, it should now say YES.  If we
leave the PATH END blank, the animation will automatically run tothe end of
the path.
	We'll leave the 3 bottom settings in the window unchanged for now. 
Click in the OK box.
	The window with the object MAIN opens again.  Click on the OK box.
	We're now ready to make our animation.  Make sure that you have a
disk on which to store this animation.  If necessary, bring the WORKBENCH
screen to the front and initialize a new disk.  Then, execute:

ANIMATE->START

The KEYPAD window will open asking for the stop frame number for the
animation (the start frame number is always 1).  Enter an end frame number
of 10, then click on the OK box.  Note that animations must always have an
even number of frames.

				8-4

	Next, the file requestor window will open.  Enter a name under
which you want this animation saved (use MYANIM1), then click on the OK
box.
	The system will now take a little while to generate each of the
frames in the animation (note that after generating the last frame, it will
re-generate the first two).
	After the animation is complete, use the SAVE command to save the
object to the library (use the name MYANIM1.MM2).

	Now, we're ready to play the animation.  Animations cannot be
played from within FIF2.  To play an animation, you need to run FAST FLIGHT
2.  If your system has less than 2MB RAM, then you need to QUIT FIF2 before
playing the animation.  If you have more than 2MB RAM, then you can try
running FAST FLIGHT 2 while FIF2 is still running.  Just push the FIF2
screen to the back (use the WORKBENCH command) and run FAST FLIGHT 2.  For
the rest of the examples in this chapter, we'll assume that you have less
than 2MB RAM.  If you have more than 2MB RAM, then you won't need to keep
quitting FIF2.

				8-5

	To refresh your memory on how to run FAST FLIGHT 2, first double
click on the FAST_FLIGHT_2 icon.  Then, click on the file name of the
animation that you wish to play.
	The animation will start to load and after a few seconds, it'll
play.
	Watching the animation, there are 2 things that you should notice. 
The first is that the MAIN object is moving really fast.  Press the F4 key,
then click the left button to slow the play speed down to 8 images per
second.
	The next thing to notice is that the motion appears jerky.  The
reason for this is that we're only using 10 frames for the entire path.

EXAMPLE 2

	The next thing we'll do is to make the animation using more frames.
 Press the ESC key to abort the first animation, then run FIF2 again (if
you had to QUIT out of it in the last example), and use the OPEN command to
read in the object MYANIM1.MM2 you saved.  Now,

				8-6

execute:

ANIMATE->EDIT

and click on the MOTION box.  Then, click over the number 10 indicating the
STOP frame number.  The KEYPAD window opens.  Leave the START frame number
at 1 but change the STOP frame number to 30.
	Then, click on the OK box to bring up the MAIN window.  Again,
click on the OK box.  Execute:

ANIMATE->START

Set the animation to end at frame 30.  Then, when the file requestor comes
up, enter a new file name (MYANIM2) and click in the OK box.
	The animation will take a little longer to generate this time since
it needs to generate more images.
	When it's finished, use the same procedure you used in the last
example to play the animation (quitting FIF2 if necessary).
	Again, you may wish to slow down the animation a little using the
function keys.
	Notice that now the

				8-7

animation looks fairly smooth.  The more frames you use, the smoother the
motion looks.  If this animation still looks jerky to you, try using even
more frames.

EXAMPLE 3

	One thing you should have noticed about the animation was that the
MAIN object simply moved around the path.  Think of the MAIN object as a
very simple kind of airplane.  If it were a real airplane, you'd want it to
always point forwards while it goes around the path since not many planes
can move sideways.
	There is an easy way to define an animation such that the objects
always stay oriented along the path.
	ESCape out of the animation and run FIF2 again (unless its already
running).  Read in MYANIM2.MM2 with the OPEN command and use  ANIMATE->EDIT
to bring up the animation editing window.  From there, click on MOTION to
bring up the motion editing window for the MAIN object.  Set the stop frame
number to be 20.  Then, click on the APPEND box.  A second column of motion

				8-8

definition settings (called a FRAME BLOCK) appears to the right of the
original settings.  This lets you define additional motions for your
object.  Note that there could be many of these FRAME BLOCKS for each
object in the hierarchy.
	Click on the start or stop frame numbers of the new FRAME BLOCK and
set it to start at frame 21 and end at frame 40.  Click on the NO in the
PATH STRT setting for the 2nd FRAME BLOCK and again choose the first point
(labeled '1') on the path.
	The animation has now been set to go around the path twice.  We'll
make it so that the second time around, the MAIN object stays oriented with
the path.
	Click on the ORIENT setting for the second FRAME BLOCK.  The KEYPAD
window opens.  Set ORIENT to 1, then click on the OK box.  Note that any
value other than zero will cause the object to remain oriented with it's
path.
	Now, click on the OK box in the motion definition window, then in
the OK box in the MAIN window.
	Again, generate the animation using the ANIMATE->START command, but
this

				8-9

time have the animation end at frame 40.  Save the animation using the name
MYANIM3.
	After the animation has been generated, save the object to the
library (as MYANIM3.MM2).  Then, if necessary, QUIT FIF2.
	Play the new animation and notice that every 2nd time the object
goes around the path, it keeps its orientation with the path.  That is,
every 2nd time around the path, our imaginary "airplane" turns so that it's
always going forward.

EXAMPLE 3

	The next thing that we're going to do is to make our "airplane"
roll while it goes around the path.  ESC out of the animation.  Then, run
FIF2 and read in the MYANIM3.MM2 library object.
	Bring up the motion editing window and click on the DELETE box,
then on the 2nd FRAME BLO"CK.  There is now only one FRAME BLOCK.  Leave
the ending frame number at 20.  Click on the 0 next to ORIENT. to bring up
the KEYPAD window.  Set ORIENT to be 1 so that the "airplane" will remain
oriented while it travels

				8-10

around the path.  Then, click on the number next to the ROT. ROLL.  Enter a
value of 180 for ROT ROLL.  This will cause the "airplane" to do a 180
degree roll during the animation (360 degrees would be a full roll).
	Save the object to the library using the name MYANIM4.MM2.  Then,
generate the animation saving it under the name MYANIM4.  When it's
finished, QUIT out of FIF2 and play back the animation.
	The "airplane" does a half roll while staying oriented along the
path.

EXAMPLE 5

	In addition to the ROTATE ROLL, objects can also be made to ROTATE
LEFT and ROTATE UP.  Note that to rotate right or down, you just use
negative numbers.
	Try out these commands with the animation that we've been using so
far.  But keep in mind that if you use two or more of these rotations at
the same time, the motion will be difficult to understand.
	Also not that the ORIENT command that we've been using is

				8-11

really a form of ROTATE LEFT.  If you choose to use ROTATE LEFT and ORIENT
at the same time, then the angles will be added together.

EXAMPLE 6

	There are other settings in the motion control window which we have
not yet used.  ESCape out of the animation and run FIF2 again.  Read in the
MYANIM4.MM2 object.  Set the animation to start at frame 1 and end at frame
20.  Set the ORIENT to 1 and all 3 rotations to 0.
	Then, try setting the SIZE setting to 3.
	Next, add another FRAME BLOCK which runs from frame 21 to frame 40.
 Set ORIENT to 1 and leave all 3 rotations at zero.  Make sure the path is
set to start at the CONTROL POINT marked '1'.  Finally, set SIZE to 0.33.
	The "airplane" should now go around the path twice.  The first time
around it should get 3 times bigger, and the second time it should get
smaller until it returns to its original size.
	Try generating and playing back this animation.
	Note that the PATH STRT does not need to be set for the SIZE

				8-12

function to work.  If the PATH is not set, then the object won't move,
it'll simply change size according to how SIZE is set.

EXAMPLE 7

	Another setting you can control for animations is to set the RND
FACT (Rounding Factor).  Try repeating the last example, but this time
instead of setting the SIZE factor, set the RND FACT to 3 and 0.33. 
Instead of the size of the MAIN object changing, the SPEED of each of the
curves in MAIN will change.
	Generate and play this animation.
	Note that the PATH STRT does not need to be set for the RND FACT
function to work.  If the PATH is not set, then the object won't move, it's
curves will simply change SPEED according to how RND FACT is set.

EXAMPLE 8

	Another type of control you have when generating an animation is to
set NO MOVE to a value other than zero.  When you do this, the object will
not move along the path.  The purpose of

				8-13

this is to allow you to rotate the object without moving it.  The PATH
still needs to be set so that the forward direction is defined.  Then,
setting a rotate roll, rotate left, or rotate up will cuase the object to
rotate.  Try experimenting with this by repeating the last example.  But,
this time, set RND FACT to 0, set NO MOVE to 1, and set ROT ROLL to 180. 
Generate and play back the animation to see it work.

EXAMPLE 9

	Another animation special effect is to make an object disappear
during part of the animation.
	ESCape out of the animtion and run FIF2.  Read in the object
MYANIM3.MM2.  This was the object created earlier.
	Bring up the motion window and set DIASPPEAR for the first frame
block to be -1 and the 2nd frame block to be +1.  A negative number causes
it to disappear, a positive number makes it appear, and 0 would leave it as
it is.
	The "airplane" should disappear for the entire first pass of the
animation.
	Try generating and playing

				8-14

back this animation.

EXAMPLE 10

	The last motion setting for us to cover is acceleration.  In all of
the animations we've made so far, the "airplane" has gone at a constant
speed around the path.  But, it's possible to make the "airplane" speed up
and slow down wile it goes around the path.
	Let's say you have a path with 4 CONTROL POINTS and you make an
animation that takes 40 frames to go around the PATH.  If acceleration is
on, then the object will take 10 frames to go from each CONTROL POINT to
the next.  It doesn't matter how far apart the CONTROL POINTS are close
together, the object will start off moving slowly.
	Try making an animation that does this.  You can use the
descriptions from any of the previous animation examples, or you can make a
new one.  Just remember to vary the spacing of the CONTROL POINTS in the
PATH, and also remember to set the ACCEL setting to any number other than
zero so that it

				8-15

accelerates.

EXAMPLE 11

	The final topic to cover in animations is the concept of object
hierarchy.  We'll explain the concept with a simple example.  Let's say yu
wanted to make an animation where you had the earth going around the sun,
and the moon going around the earth.  From the point of view of the sun,
the moon is following a very strange motion.  But, from the point of view
of the earth, the motion of the moon is simple.
	To define our animation, we'd like to be able to have the earth
follow a path around the sun.  Then, we'd like the moon to follow a path
around the earth.  If the earth moves (around the sun), we'd like the moon
to just move with the earth automatically.
	Using object hierarchies makes this easy.  We just define the moon
as being part of the earth in the object hierarchy.  Then, if the earth
moves, the moon goes with it.
	The terminology we use for the hierarchical objects is FATHER, SON,
and BROTHER.  A SON

				8-16

(not Sun) is considered part of the FATHER.  If the FATHER moves, the SON
moves with him.  In our earth/moon/sun example, the earth would be the
FATHER, and the moon would be the SON of the FATHER.  Since the sun doesn't
move, it's not even part of the hierarchy.
	What would happen if the earth had 2 moons?  Then, the second moon
would also be a SON of the earth (which would make it a brother to the
first moon).
	OK then, what would happen if the moon had it's own moon (call it
moon2)?  Simple.  Moon2 would be a SON of the moon and a grandson of the
earth.  As the earth moved it would carry the moon (and also Moon2).  Then,
as the moon moved around the earth, it would carry it's moon (moon2) which
would then simply go in a path around the moon.

	Let's try just a simple sun/earth/moon animation.  ESCape out of
the last animation.  Run FIF2 and go into 2D XY.  Make a CLOSED FSURF in
the middle of the screen (see the diagram on the next page).  This will be
our sun.  Then, make a path around the sun for the earth to follow.  Then,
make a CLOSED FSURF on the

				8-17

path.  That's the sun, the earth, and the earth's path done.
	Now, make a path around the earth for the moon.  Then, make a moon
on the path.  There should now be 3 objects (sun, earth, moon) and 2 paths.
 Execute:

ANIMATE->EDIT

Notice that MAIN is highlighted.  Click on the NAME box and type in EARTH,
then press the ENTER key.  MAIN has been renamed as EARTH.  Now, we need to
add the moon as a son of earth.  Click on ADD SON.
	An object to the right and below EARTH appears and is named NEW 1. 
Click on NEW 1.  Then click on NAME and type in MOON.  Press the ENTER key.
 There are now 2 objects in the hierarchy.

				8-18

The EARTH, and it's son, the MOON.
	Now, click on the OK box.  Then, select the earth, and the moon's
path.  The sun, the moon, and the earth's path should not be selected. 
Then, execute ANIMATE->EDIT.  Click on EARTH then on the DEFINE box.
	The earth, and path of the moon are now part of the earth object. 
So, any motion of the EARTH in the hierarchy will cause the earth FSURF and
the moon path to move.  Click on the OK box.
	Then, select just the moon with all other objects not selected. 
Execute ANIMATE->EDIT.  Click on the MOON then on the DEFINE box.  The moon
FSURF is defined as being the MOON in the hierarchy.
	So, at this time, the earth FSURF and moon's PATH have been defined
as the EARTH in the hierarchy.  And, the sun FSURF and earth PATH have not
been defined in the hierarchy (they don't move in this example).
	That's it for the hierarchy.  Now all we need to do is set the
motions.  Click on the EARTH, then on the MOTION box.

				8-19

	Set the earth to start at frame 1 and end at frame 30.  Set the
path to be the path made earlier for the earth.  Leave all the other
settings for now.  Click on the OK box.
	
	Then, click on the MOON and on the MOTION box.  Also set it to run
from frame 1 to frame 30.  Set it's path to be the path made earlier for
the moon.  Click on the OK box.
	Click on the OK box in the object hierarchy window.  Now, select
the sun, earth, and moon with none of the PATHS selected.  Then use SHOW
SELECTED to hide the paths.  Finally use ANIMATE->START to generate the
animation.
	When it's finished, QUIT FIF2 and try playing the animation. 
Notice that the moon moves around the earth wile the earth moves around the
sun.
	If you had any trouble with this animation, remember that the
object and animation are stored on the PROGRAM disk in the directory
CH8EXAMOLES and under the name MYANIM11 and MYANIM11.MM2.  You can play
that animation, then read in the object to see what it's supposed

				8-20

to look like.

	Next, quit the animation and run FIF2 again.  Bring up the object
hierarchy window.  You'll notice that there are other commands for
modifying the hierarchy.  A brother can be added, and an object can be
deleted.
	Selected FSURFs and QSURFs can be DEFINED to be objects in the
hierarchy window.  Clicking on the SHOW command will cause only those
FSURFs and QSURFs which are part of the current default object to become
highlighted.  This is a good way to check that the DEFINE command worked
the way you expected.
	The TMAP command was discussed earlier.  It allows texture maps to
be placed on QSURFs.
	The CAMERA and LOOK POINT can also be made to move.  To do this,
simply name an object in the hierarchy CAMERA or LOOK PT.  Remember to be
sure to make these objects as brothers of the top object in the hierarchy
otherwise the motions may look very strange!

				8-21

WHAT WE'VE LEARNED

	There are 3 main parts to defining an animation.  Motions must be
set, FSURFs and QSURFs must be DEFINED as being parts of objects in the
hierarchy, and a hierarchy itself may need to be defined.

1.  Motions are defined using things called FRAME BLOCKs.  There may be
many FRAME BLOCKs associated with each object.

2.  Each FRAME block has a starting and ending frame number.  It may have
accelerations, rotations, or other special effects.

3.  The path for a FRAME BLOCK should be set if the object is to move.

4.  An object can be forced to be kept ORIENTED along the path.

5.  The size and rounding factor of an object may be modified during an
animation.

				8-22

6.  Objects are placed in a hierarchy using the terms FATHER, SON, and
BROTHER.

7.  If the FATHER moves, all his descendants (his SONs and their SONs, etc)
also move.

8.  If a SON moves, all of his descendants move.  If the SON has a BROTHER,
the BROTHER does NOT move with the SON.

9.  FSURFs and QSURFs must be DEFINED as being an object in the hierarchy
if you want them to move.

10.  Objects may be given TEXTURE MAPS.  This was covered in an earlier
chapter.

11.  The CAMERA and LOOK POINT can be made to move by naming objects in the
hierarchy as CAMERA and LOOK PT.

				8-23

			     CHAPTER 9

		THE MAKING OF THE DEMO ANIMATION

	The demo animation that comes with FIF2 consists of several things.

	- IFF Foreground and Background images.

	- Phong shading of 2 dolphins and an insect.

	- Texture mapping onto an 8 sided object (we'll call it the 'open
	box').

	- The dolphins move through the inside of the open box, and around
	it's outside.

	- The insect moves in a circle around the outside of the open box.

	- The open box itself is rotating.

				9-1

	- While the open box rotates, the SPEED of its curves change (with
	the RND FACT animation command).

	To create this animation, there were basically 5 things that needed
to be done.

1.  Creation of a dolphin.

2.  Creation of an insect.

3.  Creation of the open box object.

4.  Bringing in all the objects together, making an extra copy of the
dolphin, and defining the animation.

5.  Setting up the IFF foreground, background, and texture maps.  Then
generating the animation.


1.  Creation of the dolphin

	We'll just briefly describe how the dolphin was created.  A copy of
the dolphin object is located on the MMAGIC disk in the OBJECTS directory. 
We'll read in 

				9-2	

the dolphin and study it in detail.
	Run FIF2 and use the OPEn comand to read in the object named:
MMAGIC:OBJECTS/DOLPHIN.MM2

	If you look closely at the dolphin, you'll see the following main
parts.

a.	Main body
b.	Tail
c.	Mouth
d.	Dorsal Fin and flippers


a. 	Main body

	The main body was created by making a rough cross section (4 sided
FSURF), then sweeping it along a curved path.  Then, individual ENDCAPS
within the swept object (ie the FSURFs at CONTROl POINTS of the sweep path)
were selected and sized.  Sections near the tail were made the smallest,
those near the Dorsal fin were kept large, and those near the "Face" were
also made small.


b.	Tail

	The tail was made at the

				9-3

last section of the main body.  The last ENDCAP was SIZED to make it very
small.  Then, a triangle shaped FSURFs was created for one side of the tail
and swept a small distance to give the tail some thickness.  The COPY->BY
MIRROR command was then used to make the other side of the tail.

c. 	Mouth

	The mouth of the dolphin consists of two 4 sided FSURFs that were
swept.  This created an uppen and lower section for the dolphin's 'nose'. 
Note that this is sufficient detail since this part of the object will
remain small on the screen.


d.	Dorsal Fin and flippers

	The dorsal fin and flippers were also created by making a simple
FSURF and sweeping it.  Then, the ENDCAPS were sized appropriately.
	For the flippers, only one side was made this way.  The other side
was made by making a mirror copy of the first side.
	In order to join the fin and flippers cleanly to the body of

				9-4

the dolphin, they were made to intersect slightly with the body.

	Note that there were a lot of fine touches made to the dolphin by
modifying individual curves.


2.	Creation of the insect

	We'll also briefly describe how the insect was created.  A copy of
the insect object is located on the MMAGIC disk in the OBJECTS directory. 
We'll read in the insect and study it a little.
	Run FIF2 and use the OPEN command to read in the object named:
MMAGIC:OBJECTS/INSECT.MM2.

	There are basically 3 parts to the insect.  The main body, the
legs, and the antennae.

	The main body of the insect was made in a very similar way to the
way that the body of the dolphin was made.  An FSURF was created, then
swept along a path.  Then, individual ENDCAPS in the swept object were
sized to make the body look real.
	The antennae and legs were

				9-5

made by first constructing FSURFs, and then converting the FSURFs into
QSURFs.  Note that individual curves were modified to add detail.

3.	Creation of the open box

	A copy of the open box object is located on the MMAGIC disk in the
OBJECTS directory.
	Run FIF2 and use the OPEn command to read in the object named:
MMAGIC:OBJECTS/OPENBOX.MM2.

	There were two parts to the creation of this object.  First, the
object itself was made.  Then, the object was modified for the animation.

	Creation of the object itself was very easy.  A 2 sided OPEN FSURF
was created, then LATHED.
	The modification of the object for the animation was a little more
tricky.  In the animation, the curves on the open box are rounded out, then
rounded back in.  The curves between adjacent sides of the open box are
shared.  If both sides round 

				9-6

out during the animation, then the shared curve would be rounded first by
one object, then again by the other object.  This would result in twice as
much rounding as we want.  So, to get around this, we modified the object
sothat the curve between adjacent sides is not shared.  That is, each side
has its own curve, without sharing the curves of any other side.  So, there
are 2 curves between adjacent sides.  They just happen to be in exactly the
same position.
	To do all of this, each surface of the open box was copied
separately over to the side.  Then, the original open box was deleted and
the copies of each side were brought back together to form a new open box. 
Doing it this way ensures that no curves are shared.

4.	Bringing it all together

	After each of the individual parts were created, they were all
brought in together using the READ LIB command.  A copy of the final object
file is contained on the MMAGIC disk.  Run FIF2, then use the OPEN command
to read in

				9-7

file named: MMAGIC:OBJETS/BOXANIM.MM2.

	If you look at this object, you'll see the open box, the insect,
and two dolphins.  The second dolphin was created by simply selecting the
first dolphin and making a mirror image of it with the COPY->BY MIRROR
command.
	Also, after each individual object had been read in, they had to be
moved and sized to get them into final form.
	Finally, after all the objects were in, the animation had to be
defined.  Animation parths were made for each object by making FSURFs and
then converting them into paths.
	Then, the motions were assigned for each object.  Execute 
ANIMATE->EDIT to see what the final hierarchy and motion definitions look
like.
	One interesting little trick we used in this animation was for
having the rounding factor for the box change by a negative number!  This
caused the open box to change from being rounded in to being rounded out. 
Then it was done again to round it back in.  This idea of using a

				9-8

negative number for the rounding factor could also be used for the size of
the object.  This would make the object appear to turn inside out.
	Another special effect we used was to have the NO MOVE turned ON
for the box.  This caused it to roll around the path without actually
moving along the path.

5.	Adding IFF images

	As a final step before the animation could be generated, the IFF
images had to be set.  IFF images were made using a paint program.  Texture
maps were assigned for each of the 8 sides of the open box using the IFF
images.  Then, IFF foreground and background images were brought in.
	Finally, the animation was generated using the ANIMATE->START
command.

FURTHER SUGGESTIONS

	After you study the animation definition a little, you might want
to try to make

				9-9

some variations to it.  But please note that the combination of 10 IFF
images along with all of the objects requires a system with at least 2.5 MB
RAM.  If your system does not have this much, then you won't be albe to
read in all of the IFF images.  If this is the case, then you might try
PHONG shading the open box to save some memory.  Also, the IFF foreground
and background images need not be present.  And if you're really low on
RAM, you can do without one (or both) of the dolphins, or the bug.
	Some suggestions for animations are:

1.  Try using different IFF images for the texture maps or
foregrounds/background.

2.  Texture map the dolphin instead of PHONG shading it.

3.  PHONG shade the open box instead of texture mapping it.

4.  Try turning off the rotate roll.  Or, try adding another rotation (like
rotate up, in addition to the rotate roll).

				9-10

5.  Instead of the rounding factor changing for the open box, try an
animation in which the size of the open box changes.  Have it start small,
become 3 times as large, then become 0.33 times as large again (to get it
back to its original size).

6.  Try having the rounding factor change by a negative number so that the
object turns inside out!

7.  Change the path of the open box so that the box moves along the path in
addition to its other motions.  The box could be made to appear to bounce
off the background stripes by just having the box bob up and down.

8.  etc. etc. etc.

				9-11

				INDEX

# Sides : see sides, number of
2D
	User defined		5.10
	XY			2.3
3D				1.6, 2.5
Add a view			7.8
Animation
	Defining		8.all
	Playback		1.16
Camera
	In/out			5.9
	Roll			5.7
	Rotate			1.12
	To position		5.5
	see Head's up
Circle: See Fsurf
Clean: see Curve, Node
Clipping			7.5
Closed FSURF			2.3
Colors
	# of			4.10, 7.1
	Default			7.4
	Setting			4.18, 7.2
Control point: see Node
Convert
	Closed Fsurf		6.25
	F => Q			2.7
	Open Fsurf		6.24
	Q => F			6.17
Copy
	By mirror		3.14
	Dynamic			6.1
	From/to			6.3
Curve
	Clean			6.27
	Modify			1.20, 3.3, 3.6
	Round it		3.7
	Round out		6.25
	Straight		2.17
	Straighten		6.26
Default
	Iff background		5.14
	Object			4.3
Delete				4.15
	See New
Dimension: see 2D, 3D
Dithering: see Colors - setting
Endcaps				4.5
F => Q: see Convert
Fsurf	
	Circle			3.9, 6.8
	Closed			2.1, 2.3
	Match			6.21
	Open			3.2
	Open Strt		3.20
	Split			3.8
	see info
Hard disk			1.9
Head's up			5.8
IFF
	Background		5.13
	Foreground		5.14
	Save as			4.22
	see Texture mapping
Info				7.10
Installation			1.9
Lathe: see Sweep
Library: see Open, Read lib
Look Point	
	Rotate			5.6
	To position		5.4
Magnify				4.17
Memory				1.14
Menu				1.14
Mirror: see Copy
Move
	Dynamic			6.4
	From/to			4.16, 6.4
	Rotate - gr		6.7
	Rotate - num.		6.6
New				2.3
Node
	Clean			6.28
	From/to			6.22
	Sel from/to		6.24
	Selected to		3.16
	Show nodes		5.11
	To position		3.13
Object types: see Fsurf, Qsurf
Open				4.1
Pan				5.2, 5.3
Path				4.12
Phong shading: see Shading
Q => F : see Convert
Qsurf				2.1, 2.6
Qsurf
	Match			6.19
	Split			6.18
	see info
Quit				1.15
Read lib			4.2
Redraw				1.14, 7.10
Resolution			4.10, 7.1
Rotate: see Camera, Move
Round it			3.7
Save
	To library		4.23
	IFF: see IFF
Select	
	All			2.6
	All Fsurfs		6.27
	All Qsurfs		6.27
	Box around		4.12
	By color		6.26
	By curve		2.9
	No nodes		6.27
	Node			3.5
	None			2.8
	Swap			4.14
	Unselected node		6.26
	see Show
Shading				4.18
	see Wires
Show
	All			5.13
	Selected		5.13
Sides, number of		2.7
Size
	By direction		6.12
	Local, by direc		6.16
	Local, uniform		6.15
	Uniform			6.11
Snap				7.6
Spline: see Curve
Split: see Fsurf, Qsurf
Sweep
	Along path		4.14
	Away/toward		4.3
	From/to			6.10
	Lathe			6.12
Texture mapping			4.6
Undo				6.3, 7.7
View axes			7.7
Windows: see Add a view
Wires				4.10
Workbench			3.20

        FIF2 - COMMANDS      (Pressing F1 repeats the last command)

PROJECT
.New
.Open
..Rev 2.X
..Rev 1.X
.Save
..As Object
..As IFF
.Workbench
.Quit

PERSPECTIVE
.Pan
..New Center
..Dynamic
.Camera
..Rotate
..To Position
..In/Out
..Roll
.Look Point
..Rotate
..To Position
.Magnify
..Dimension
..3D
..2D XY
..2D XZ
..2D YZ
..2D UDEF
.Head's Up

RENDER
.Mode
..Wires
..Shaded
.Show
..All
..Selected
.Show Nodes
.IFF Backgnd
.IFF Foregnd
.# Sides

CREATE
.Read Lib
.Fsurf
..Circle
..Closed
..Open
..Straight
..Open Strt
.Select
..All
..None
..Box Around
..Swap
..By Color
..Node
..Unsel Node
..No Nodes
.More Select
..All Fsurfs
..All Qsurfs
.Sweep
..Away/Toward
..From/To
..Along Path
..Lathe
.Copy
..Dynamic
..From/To
..By Mirror

MODIFY
.Delete Sel
.Move
..Dynamic
..From/To
..Rotate-Num.
..Rotate-GR.
.Size
..Uniform
..By Direc.
..Loc Uniform
..Loc By Dir.
.Node
..To Position
..From/To
..Selected To
..Sel From/To
.Color
.Curve
..Both Ends
..One End
..Make Path
..Make Circle
..Match Fsurf
..Match Qsurf
..Round Out
..Straighten
.Convert
..Split Qsurf
..Split Fsurf
..Open Fsurf
..Close Fsurf
..F => Q
..Q => F
.Round It
.Clean
..Nodes
..Curves

ANIMATE
.Edit
.Start

PREFERENCES
.Resol/#Col
.Color
..Default
..System
.Clipping
..On
..Off
.Snap
..On
..Off
.Undo
.View Axes
.Redraw
.Add A View
.Info
===================================================================
Forms In Flight 2 docs brought to you by The Southern Star for MAAD.
