This is release 1.1 of geomview, an interactive viewer for 3- and 4-D
geometric objects from the Geometry Center at the University of
Minnesota, built on OOGL, an object-oriented geometry library.
Geomview is loosely a successor of our earlier program MinneView.

Geomview at present runs only on Irises.  A Next Quick Renderman version
is currently under development. A Sun X-windows version using XGL is planned.

This blurb includes a summary of geomview's features, comparison with those
of MinneView, and a brief geomview tutorial.


		FEATURES

Geomview accepts geometric data in a variety of simple ASCII and binary file
formats and displays them in a workstation's graphics window(s), letting you
examine them interactively.  Multiple objects can be manipulated independently;
there may be several views of them.

  o  Control panels
	There are interactive controls for shaded/wireframe drawing, lighting
	and material properties, etc., built using Mark Overmars' FORMS
	package.  Most controls are also available via keyboard shortcuts.

  o  Direct interaction
	Motions of objects and points of view are controlled by
	direct interaction: gestures of the mouse in the graphics window.

  o  Geometric data types
	We have some polygonal data types: lists of quadrilaterals (QUAD),
	quadrilateral meshes (MESH), polylists: collections of
	polygons with shared vertices (OFF), all optionally with
	colors and surface normals. Lines and points are provided
	(VECT), as are Bezier surface patches (BBP, BEZ) of arbitrary
	degree, including rational patches. LISTs build collections of
	these, and INSTs apply homogeneous 4x4 transformations to
	them, including replicating a single object under a collection
	of transformations. 
	Four dimensional visualization is now supported. Points for
	any object can be in homogeneous coordinates: {x,y,z,w}
	quadruplets instead of {x,y,z} triplets. The 4D->3D
	transformation can be specified with an INST. 


  o  Other spaces
	Besides ordinary Euclidean 3-space, geomview also deals with
	hyperbolic 3-space and Euclidean 4-space.  The hyperbolic model
	is the projective one, where geodesics are straight lines and
	isometries are represented as 4x4 projective matrices.
	4-D objects are shown in 3-D by projecting from the origin
	(not by slicing).

  o  External controls
	Besides its interactive controls, geomview can also be driven
	by external programs.  A lisp-like command language can control
	most aspects of the program.  Also one can externally supply
	geometric objects and transformations, changing all or part
	of a geometric hierarchy on the fly.  The viewer can act as
	a graphical front-end for other applications, showing e.g.
	a simulation's dynamically changing output, or a program-driven
	animation.


	  COMPARISON WITH MINNEVIEW 

Geomview has much in common with MinneView, but has a very different
user interface.  While MinneView offered all its features from a stack
of menus, geomview uses FORMS panels.  Also, most of the keyboard shortcuts
have changed.

Geomview has many new features; however, many of MinneView's features
are not present.

Some things which haven't changed (much):

  o  Data file formats: Geomview accepts all the file formats MinneView did.
	There are some extensions though, described below.

  o  Motion modes: rotate, translate, and zoom mode are still there.


New features:

  o  Multiple objects, multiple windows.
	Geomview can display multiple objects at once, allowing motion
	and other controls to apply to all or to any one of them.
	You can also set up multiple windows, each with an independent camera
	providing a separate view of the same set of objects.

	Objects and windows can be added and deleted at any time,
	not just on the command line.

  o  Command language.
	A LISP-style language controls all sorts of functions, e.g.
	object loading, object transformations, window background colors, 
	external communications.  At present it has only viewer controls,
	no variables nor control structures.  Commands may be read from
	plain disk files or dynamically via named pipes.

  o  Camera motion modes.
	There are "fly" and "orbit" modes for moving a camera through
	the world. "Flight Sim" mode is similar to the SGI "flight" demo.

  o  Appearances.
	MinneView had only a single set of material and lighting properties,
	settable with the "medit" program, which applied to everything.
	The new OOGL libraries allow "Appearance" structures, specifying
	material, lighting, shading, etc. properties to be attached to
	any object.  Geomview has interactive controls for most
	appearance properties, incorporating medit's functionality.
	Appearances are independently controllable for each object.

  o  Communications.
	The OOGL libraries now allow communication of objects
	(geometry, transformations and cameras) between programs.
	Extensions to the OOGL object formats support this.
	Arbitrary portions of hierarchies may be transmitted;
	the process involves creating references to named items,
	then transmitting values for those names.
	Only stream-based (disk file, named pipe) communications
	are supported now; shared memory is deferred.

  o  External program control.
	The command language and/or OOGL communications can be used to
	let external programs drive (selected aspects of) the viewer.
	Meanwhile, interactive controls still apply, at least to features
	not being externally controlled.
	External modules in this distribution are:

	Trigrp: Tesselation of triangle groups. A triangle with 
	        angles pi/2, pi/3, pi/n tiles Euclidean space when n = 6, 
	        spherical space when n = [5|4|3], hyperbolic space when
	        n = 7. You can move around the point where the three colors 
	        meet with right mouse button. Try going into hyperbolic 
	        space mode (on the Obscure panel in geomview) when n = 7
		and translating the disk.

	4Drotate: Control the projection of four dimensional objects
	          into 3-space. The annoying "feature" that the 3D
		  modelling transform is wiped out whenever a 4D
		  rotation occurs will be fixed soon.

	Nose: Demonstrates how to use fine-grain picking. Click with 
	      the right mouse button. When a face is picked, a yellow
	      box appears at the point of intersection. When an edge
	      is picked, a yellow box appears at point of intersection
	      and cyan boxes appear at the vertices of the picked
	      edge. When a vertex is picked, a purple box appears at
	      that vertex.  

	Eucsyms: Explore the crystallographic symmetries of the 230 three 
		 dimensional Euclidean space groups by building a crystal
		 using any OOGL object. See the man page for more details.
	
	Graffiti: Draw vectors on a surface using right mouse button and
		  Start button. If the vector and the object become
		  separated, try recentering everything with the 'W' key.
		  You'll probably want to turn off the bounding box of
		  the vector. Experiment with linewidth and edge color.

  o  State saving.
	Geomview can write a fairly complete state dump, in command-language
	form, or in OOGL geometry form, to a file.  The dump includes all 
	objects and cameras, their current transformations, motions, and 
	appearance settings, and other stuff.

  o  Object sharing
	The new OOGL libraries make it feasible to have multiple
	references to a single object.  When a plain file containing a
	single (possibly hierarchical) object is referenced multiple times,
	it's read and stored only once.

  o Picking
	See Nose, Hinge, and Graffiti for examples of how to use picking.

Missing features, incompatibilities with MinneView:

  o  Movie loops
	Geomview doesn't provide true animation loops, but this release
	includes an external program "animate" that sends a list of files
	to geomview in succession as quickly as possible. Running animate
	on the same list of files a second time goes much more quickly
	than the first, since the objects have already been loaded into 
	memory.

  o  Shared memory
	There's no shared-memory communications yet, though
	named pipes can serve a similar purpose.
	Shared memory will probably be implemented some day, but it surely
	won't be compatible with data written by programs which
	talked to MinneView.

	Programs using "stuff" to send geometry to MinneView are in
	better shape, since stuff essentially just accepts objects written
	through a pipe.  This release includes a "stuff" emulator called 
	"geomstuff". Use the same syntax as before: 
	"geomview -M <memsegment>" and "geomstuff <memsegment> <filename>"


  o  Stereo (crosseyed and hardware)
  o  Transparency
  o  Viewfinder mode

	All these seem desirable and not difficult; they'll probably be
	done in some form in the reasonably near future.





		HINTS

    This section is for those who don't like to read documentation
(some of which hasn't yet been written anyway).  After reading this
you might be able to guess a lot more. Type "?" in a window for a list
of keyboard shortcuts.

    Geomview accepts OOGL data files on the command line.
See the sample files in the "data" directory.  A nice file-format
tutorial is in "doc/oogltour".  A reference manual is "doc/oogl.5".

  o Motions.

    To make something move, you select a motion mode and an object,
then click and drag with the left or middle mouse button down in a (the)
graphics window.  Objects have momentum: they keep moving if the mouse
is still moving when you release the button.

    In most modes (Rotate, Translate, Orbit, Fly), only relative
    motion matters.

    In others (Zoom) the center of the window is special.

    Left-mouse motion acts in X and Y (the screen plane).
    Middle-mouse motion acts on Z (the viewing direction).
    Shift-leftmouse motion is constrained along the X or Y (screen) axes.

    [r] Rotate about the origin.
    [t] Translate.
    [z] Zoom scales about the origin.
    [o] Orbit rotates the camera about the world's origin.
    [f] Fly flies the camera.  Leftmouse controls direction, middlemouse speed.

So the left mouse in Rotate mode spins an object around, and the
middle mouse in Translate moves things toward or away.  Try loading "xyz.vect".

    To retrieve a lost object, try the panel's "[W] Center" button.
    The "[W]" means that pressing the "W" key -- with the cursor in
    the graphics window -- is a synonym for pressing that button.

  o The World

To easily move multiple objects together, the viewer groups all of them
in a collection -- the World.  An object's position depends both on
motions applied to the World and those applied to that object alone.

    To move everything together, select the World.
    To move just a single object, select that.
    You can't select multiple objects.

  o Picking

Select an object by double-clicking on it with the right mouse. Select
the world by double-clicking on the background.
