Welcome to Genesis beta v1.0   (c) Silicon Dream Ltd. 1995

It is important that you read at least the QUICK START section of this
document before unzipping and running Genesis. I apologise for the poor
format of the user documentation (yes, its what your reading now) and
my spelling. The programmer documentation is far more proffessional
and is included in the genvxx.zip file in both Microsoft Word format
and plain text.

Contents of this document:

       A BRIEF RUNDOWN
       PC REQUIREMENTS
       QUICK START
       THE USER GUIDE
         THE VIEW
         THE 3D CURSOR
         CHANGING VIEWPOINT
         SURFACE DIALOG
         TOOLS
           Sphere tool
           Patch tool
           Spin tools
           Diff, Union and Int tools
           Enclosed tool
           Coordinate system editor
           Normal tool
       ROYALTIES ON API USEAGE
       DEVELOPERS NOTE

If you have any questions, queries, praises or verbal abuse then I am
your primary and only point of contact;

Name:         Steven Woodman (otheriwse known as Spike)
Org:          Silicon Dream Ltd.
Email:        spike@silicond.demon.co.uk
Smail-mail:   Flat 1 Chine view, 5 Mckinley rd, Westbourne,
              Bournemouth, Dorset, UK, BH4 8AG
Tel:          ...ooooh - could be a bad idea
Updates from: - The SimTel20 windows software repository
              - UK's Demon ftp server
              - The Raytech bulletin board on UK tel; 01862 832020
              - Me

Those of you who followed my original append in the
comp.graphics.algorithms and comp.graphics.raytracing newsgroups will
already be familiar with what Genesis is. To those who didn't here's
a brief rundown;

A BRIEF RUNDOWN

Genesis is a new windows based 3D toolkit with a comprehensive set
of programming interfaces. The editor application supplied as part of
Genesis is intended to allow easy and intuitive editing of 3D objects,
textures, lights and animations. My design goal was to try and build
something like a 2D drawing program, BUT IN 3D! The API can be used for
writing 3D applications independent of the editor. On the other hand if
you are interested in writing a 'tool' to do a 3D type job, for instance,
say you want to write some code to take one 3D object and 'bend' it
around another, then the way to do it is to write a 'tool' that plugs
into the editor. The various API's provide you with an excellent platform
to start your work, one in which most of the hard stuff is already done
for you. The Geometry engine is also replaceable meaning Genesis could
support BRender, Glint chips, Windows 3D GDI, Open GL, Renderware,
Playstation, Rendermorphics engine and Intel 3DR to name but a few.

PC REQUIREMENTS

You need;

	* At least a 386 PC WITH a maths copro (or 486DX). Contact
	    author for details of non-copro version
	* 4 Megs RAM although 8 is recomended
	* About 3 megs free on hard disk
	* Window 3.x
	* A good graphics card.

The faster your graphics card the better. Also if your card supports true
colour (either 16 bit or 24 bit), this will give better results than an
8 bit colour card. Check your card is in true color mode if it has one.

QUICK START

To get straight into the Genesis editor, do the following;

Make a directory you want to install it in, eg;

	md gen

copy the gen.zip file in, eg;

	cd gen
	copy \gen.zip

unzip this file with the -d and -o options;

	unzip -d -o gen.zip

this will give create you a directory structure containing all of the
Genesis executable files, plus the programmers toolkit and the
documentation needed to start programming.

Start windows (if not already) and create an icon using the windows program
manager's File/Properties menu item. Both the program directory and the
working directory must be set to;

	\gen\bin

or whatever you have called your directory. Copy the Gened.ini file to
the main windows directory, eg;

	copy \gen\bin\gened.ini \windows

NOW RUN GENESIS FROM THE PROGRAM MANAGER ICON! Alternatively you could just
run it from the Program managers File/Run menu item.

The version of Genesis you have is a Freeware copy. Feel free
to play with it, develop for it, give it to your friends and write GOOD
articles about it in magazines. It will NOT explode after 30 days leaving
a nasty mess on your hard disk, however you are limited to a maximum of
1000 polygons. If you would like an unresricted version, this is available
from the author for a small fee of 20 quid (which includes posting fee and
cost of disks if neccessary). If you are interested in developing tools,
Geometry engines or applications, please read the developers note at the
bottom of this document.

Now follow the user guide...

THE USER GUIDE

When the editor starts you will see the main editor window and in it a couple
of view windows, a tool bar at the top, a status bar at the bottom, and a
control bar on the right hand side. At the top of the control bar you will see
the 'toolbox'. Each icon in here is actually a button which invokes one of the
tools.

At this point it is quite likely that you have already been messing around with
the program for about 10 minutes and have got yourself confused, or the program
confused and have then resorted back to the documentation. (I often do this
too).

Before I go on let me remind you that Genesis is a version 1 beta, so it
is incomplete and yes, it has bugs! You might find that some very basic
operations are still not supported, I am not yet too worried about this as
generally this is just a matter of writing the tools for the job. At present
I am more concerned with getting the API's and supporting framework finished
and tested.

OK, enough excuses, lets continue with the user documentation;

The two views represent two 'scenes'. A bit like two documents in a
word processor. One view has a default object in it (just so you can mess
around rendering stuff). The other has nothing in it and can be used to
experiment with the tools. Click in the view called start.gen to make it
active (start.gen is the name of the model file loaded from the \bin
directory). Start.gen is a model of an everday goblet with a silvery brick
texture on it containing a gold sphere, the sort of thing commonly found in
glass cabinets! Actually its really just to show off the surface types.

THE VIEW

The view is a window into a scene. There can be more than one view per scene.
Select the Window/New Window menu item for another view into the active scene.
In the view you will see the x, y and z axis drawn, along with a grid in the
zx plane. The grid can be changed or switched off from the control panel. The
entire overlay can be switched off using the View/No overlay menu item. The
grid can also be switched to solid lines or points from the View menu (points
take longer to draw).

Sort of bug: Changing the size of the view window causes a re-render with a
             different aspect ratio. This will soon change so you cant easily
             make your view all squashed up.

THE 3D CURSOR

If you hold the left mouse button down in the view and move the mouse the
mouse cursor disappears and you find that you can move a 3D cursor around in
the view. If you move left to right or vice versa then the cursor moves in the
most horizontal axis in the view. If its moved up/down then the 3D cursor
moves in the most vertical axis. Unless you change the view orientation this
will be the x and y axis. To move in z hold down the right button and move up
and down.

Bug: Sometimes from some views the cursor moves in the opposite direction you
     expect. All adds to the fun!

CHANGING VIEWPOINT

To change the direction in which you are looking into the scene position the
cursor and press the DIR. button on the control panel. The next time a render
is done you will look towards the new position. To render press the cube shaped
button on the tool bar below the menu bar (not the toolbox!). Alternatively
the File/Render menu item can be used. To change the position you are looking
from, position the cursor and press the POS. buttton. The In and Out buttons on
the control bar can be used to zoom in and out (all quite intuitive really),
and the Back button can be used to step back through all the previous views
rendered. So if you screw up and find yourself staring into blank space, just
press Back.

The Up button changes the up direction in the rendered image.

SURFACE DIALOG

To edit the surface type of the goblet select the Scene/Surfaces menu item.
The dialog shows the properties of the currently defined surfaces. To change
the brick texture to a more natural looking concrete, click on the preview
picture of the brick surface, then on the filename Browse button and select
the conctex.bmp. When the image is rendered it will have the new texure. The
preview is a model which is rendered in real-time. You can change the type of
the preview model from the dialog.

Other options allow you to change wether or not the texture is infinetly tiled,
and the type of specular reflections the surface generates. The 'dull' spec
reflection actually produces no highlights. Silver produces large bright
highlights, Gold produces large dull highlights. Glass gives you very small
highlights just around the edges of your object. Linear and Constant are also
implemented but the rest just do the same as glass. Notice that selecting these
options does not change the colour of your object - just the highlights. To
change the colour switch off texturing for this surface and press the colour
button.

Any windows bitmap file can be used to make a new texture. See the coordinate
system editor section on how to specify the orientation of the texture.

Bug: I lied, currently only 8 bit (256 col.) and 24 bit bitmaps work!

The 'more' button is used to define recursive textures and bump mapping,
neither of which the default Geometry engine support, so messing around with
these options will have no effect.

TOOLS

Sphere tool

Now go to the blank view. To invoke a tool, say the sphere, click on its
button in the toolbox (second one in). The Tool/Configure menu item can now
be used to configure the sphere tool. Use this to change to a smooth sphere
and OK the dialog. Position the cursor for the center of the sphere and press
the 'Set' button on the control panel. Then move the cursor to a point on the
radius and press the 'Do' button. The surface is coloured with the currently
selected surface type from the surface dialog box (the one you clicked in last).

A new object called 'sphere' will appear in the object listbox. If you create
a second sphere object it will be called 'sphere2'. This applies to all tools
that create objects.

The 'Mapped texture' checkbox in the sphere config dialog will be used for
warping a texture into a spherical map so that the image doesn't distort across
the surface of the sphere. If you think I'm talking cac please ignore the last
sentance.

All tools that create primitive objects or bits of objects use the currently
selected surface type. The grand list currently consists of; Patch, Sphere
and Spin tools (the first, second and seventh respectively in the toolbox).

Bug: You can change the 'Number of verticies' field in the configuration
     of the sphere but some values will cause the code to crash. The number
     is only an approximate indication anyway

Patch tool

The most basic of all tools, enables you to create a patch or polygon by
positioning the cursor and pressing 'Set' for as many verticies as are needed.
The patch tool is the first one in the box by the way (if theres one thing I
learnt its that doing 3D icons is harder than 2D ones). Use 'Do' to create
the patch. All points must lie on a plane but you are not limited to how many
points you create. You can define a 1,000 point concave outline and as long
as all the points lie on a plane then Genesis will split it up into lots of
small patches (of up to 4 verticies each). Each patch has a solid and an empty
side. The patch must always be seen from the solid side as it will actually
become invisible if seen from the wrong side. You implicitly define which
side is solid by ALWAYS drawing the verticies CLOCKWISE as seen from the
outside.

You must also select which object in your scene you want the patch
to belong to. Do this by highlighting the 'start' object name in the rightmost
listbox on the control panel. The 'start' object is initially empty.

Was that a bit un-intuitive? If it was then you will find yourself very
rarely actually using this tool as other more powerfull ones actually build
whole objects for you.

Spin tool

This allows you to define an outline which is spun around an axis to form a
cylindrical type formation. The goblet was done using this technique. Select
the tool (7th one in toolbox). Position the cursor at a point at the start of
the axis you want to spin in and press 'Set'. Then position the cursor at the
end of the spin axis and press 'Set' again. You will then be presented with
an outline editor. The vertical axis of the editor is the line you have just
drawn in 3D. Each press of the mouse button in the editor defines a new
segment to be added to the outline.

If you want to create a disconnected part of the outline use the 'move'
button. If you want to create an arc, circle or box as part of the outline,
press 'move' and position the 2D outline cursor at the center of the
arc/circle or corner of the box. Then position the cursor at a point on the
radius or the other corner and press the appropriate button at the bottom
of the editor. When you OK the dialog a wireframe is drawn in the view, if
you're happy with it press 'Do', otherwise you can reposition the end of the
spin axis and press 'Set' again to get the outline editor back.

IMPORTANT NOTE: Consider this. In the outline editor you define a line segment
		coming out from the bottom of the vetical axis and extending
		right. Then another segment goes straight up. Now given that
		patches have a solid and an empty side, have you defined a
		sort of cylinder (solid on the inside, where the spin axis is)
		or a sort of cylindrical hole which is solid on the outside
		(and empty space where the axis is). The answer is you have
		defined a solid cylinder because the outline is always solid
		on the left hand side as you draw it. If you 'moved' to the
		end of the cylinder first and then drew down to the axis
		origin, then would would have defined a cylindrical hole!
		When defining arcs and circles a negative arc angle makes
		the outline proceed clockwise instead of anticlockwise
		(ie. giving hole type outlines instead of solid ones).

The Spin tool has a configuration dialog box which is accessed the same as
for the sphere.

Diff, Union an Int tools

These tools are more complex than the others, (and took longer to write).
Having created two objects such as a sphere and a spin object you will notice
that their names appear in the right hand list box on the control panel.
If these two objects overlap in space then using these tools you can perform
a CSG (constructive solid geometry) (sometimes called boolean) operation on
the objects. The diff tool (3rd one in) subtracts one object from another.
Highlight the names of the two objects in the listbox, select the tool, and
press 'Do'. Indicate on the dialog which object is subtracted from which, and
thats all! When the operation is complete the all views into the scene are
re-rendered. The union tool joins two objects together such that the patches
form a continuous mesh across the surface. The intersection tool takes only
the overlapping part of the two objects. After the operation only one object
will be listed in the object listbox with a name like 'diff object', 'union
object' or 'int object'.

The configuration dialog boxes for these tools allow you to specify how the
smoothing is to be performed if a curved patch from one object joins a curved
patch from the other in the resulting object.

Enclosed tool

I said earlier that all patches have a solid and an empty side, and that if
you view it from the wrong side it will become invisible. This is OK because
each object should be a continous polygon mesh surface, in other words each
edge of each patch should be connected to another patch thereby preventing
you seeing the wrong side of any particular patch. Unless of course you intend
to view the object from the inside in which case you should design its inside
as another continuous polygon mesh belonging to the same object!

If an object isn't a continous mesh nothing will go wrong, its just it might
look like you have holes in it when seen from certain angles (ie. when
looking at the inside of patches). What is more the CSG tools will warn
you if either object is not completely enclosed as sometimes the results
you get from un-enclosed objects might not be what you expected.

So to cut through the waffle, the enclosed tool highlights any unconnected
edges in all objects in your scene. When developing tools this can also act as
a debugger to check your tool is giving sensible results. To try it out
simply create a patch and select the enclosed tool (6th one in toolbox).

It has no configuration dialog.

Bug: Very occasionally the CSG tools will generate an object with unconnected
     edges.

Coordinate system editor

The coordinate system editor (8th tool) is a very powerfull tool. It doesn't
work on objects themselves but on the coordinate systems they belong too.
So far both of the scenes you have been experimenting with have each had a
single coordinate system. The left hand listbox of the control panel contains
a list of the coordinate systems belonging to the active scene.

OK, let me start by posing some problems, then maybe the significance of
coordinate systems will become more obvious;

      Prob 1. You have designed a large cube with one corner at the origin.
              You now want add a load of primitives (spheres, blocks etc.)
              such that they appear to be sitting on one of the faces of the
              cube. However the face you have chosen is the back vertical
              face! Even if you re-position the viewpoint so you can see what
              you are doing you are used to working on a flat horizontal
              surface not a vertical one and have trouble adjusting. Worst
              still suppose the face isn't exactly aligned with one of the
              axis, you will have terrible trouble knowing wether your new
              primitives are actually sitting on the surface, penetrating
              it, or sitting too high above it. also some primitive creation
              tools might only create primitives algined with the axis.

      Prob 2. When defining a texture, the bitmap you use is placed in the
              xy plane of the coordinate system. If your bitmap is 100 pixels
              wide by 80 high then the extent of the texture will be from the
              origin to x=100 and y=80 (if not tiled) and will be projected
              through the z. Suppose you want the texture scaled to x=1000
              to y=800 or projected down through the zx plane.

      Prob 3. You are using an animation tool. You have a landscape and within
              it a river. On the river is two boats; A and B. Boat A has 10
              people on it. When the boat moves relative to the landscape all
              the people on the boat must also move (otherwise they will end
              up suspended above the river!), BUT the people must still be
              able to move about on the boat. Boat B obviously moves
              indepentently of boat A. You need a way of telling the editor
              that the people objects of Boat A must move when the Boat A
              object moves and likewise for Boat B.

The answer to all these problems is coordinate systems. The coordinate system
editor tool enables you to define a new coordinate system relative to the
currently active one (which is called 'top level' unless you've already
created some). The new coordinate becomes a 'child' of the active one and the
three buttons at the bottom of the coor sys editor dialog allow you to
reposition and scale it relative to its parent. When you create a new coordinate
system (using the 'New' button) a new view is automatically created for you.

To modify a coordinate system relative to its parent, first make it active
(by clicking in its view, or selecting its name from the coor sys listbox).
Then click the 'Modify' button. The tool then makes its parent's view
active and draws a represention of its axis's within its parent. Then
using the Origin->Cursor button you can move the origin, and using the
Z Axis->Cursor button you can specify a direction towards which the z axis
should point. The third button; Y Dir->Cursor can be used give an aproximate
direction to the Y axis given the constraints of the origin and the z axis.

The new view can be used exactly like its parents view but what you have
really done is turned the world on its head so that you can work with a
sensible set of axis, while the rest of the world (ie. everything defined in
the parent coor sys) is at an awkward angle.

You can define a coordinate system purely for the purpose of defining a texture
position. The surface type dialog has a combo-box field where you can tell
it the name of the coor sys the texture is defined in. You can then close down
the view if your not going to be working in it (this doesn't delete the coor
sys).

In the Prob 3 example boats A and B will each have their own coordinate
system which is a child of 'top level'. The landscape will be defined in
'top level' by a bunch of patches. The individual people of boat A will each
have their own coordinate system (as they can all move independently of each
other) but they will all be children of the boat A coordinate system (as they
must move if the boat moves). Boat B will likewise have its own coordinate
system as a child of 'top level'.

Normal tool

The normal tool (last one in the box) draws onto the view the normal (or
arrow perpendicular to the surface) of each every curved patch facing the
view. Since the tools described create the normals for you, you will rarely
need to use this, however eventually this tool will enable you to 'grab' a
normal with the mouse and bend it, thereby changing the shading at that
point on the surface. Even then this tool is really just for perfectionists
who maybe dont like default smoothing effect of some tools.

The normal tool will be good for doing things like, putting a dent in the
side of your object, eg. a dented, brick coloured goblet, with a dented gold
globe in it! Obviously there is no limit to your creative potential.

...Watch out for more tools

ROYALTIES ON API USEAGE

I must apologies to those whom I told the API was free to use in your own
programs. Dont worry just yet - please hear me out. I was strongly advised
for copyright reasons to demand a small royalty fee on use of the API. I
want to keep this as low as possible as I want to encourage people to use
the API. If you want to use the API in an application or tool that will be
sold for profit, then a small royalty fee of 2% of the retail value of the
product will be charged on each unit sold. 1% if any part of the maths,
debug or Helper API's are used without the Geometry API. This note applies
to use of the API's irrespective of wether the libraries themselves are used.

DEVELOPERS NOTE

I think this is the bit a lot of people have been waiting for. This is the
agreement; This version of Genesis is Freeware. Soon there will be
a commercial release. The more tools and/or Geometry engine's it supports
the better, so if you are interested in developing for it, send me what you
have and if its of general use to others (ie. no spinal column fracture
detectors please) it will be included. This is your chance to get your name
in lights and obviously a royalty payment in your pocket. The initial release
will be under œ100 (pounds) unless there is such a wealth of tools that
puts us way above the competition. This would be nice but I'm trying to
be realistic. I will have to work out fairly on an individual basis the
royalty payment based on effort put in and value it adds to the package as
a whole.

From the overwhelming response I had to my original append I'm sure this is
going to take off in a big way. I will endevour to set up a Genesis newsgroup
so that developers can talk to each other and help each other with their
problems. This will also serve to ensure that developers aren't writing the
same tools (.DXF loader anyone?).

I am of course still working on Genesis and have my own schedule, however if
there are areas you would like completed sooner rather than later in order
to develop tools then feel free to E-mail me a request.

Once again, Genesis (particularly the editor and the tool interface) is not
complete by a long way. I am confident that by the time we reach first release
which hopefully will be well within a year, it will be one of if not the most
powerfull PC based 3D graphics development tools available.
