
				3Dto3D

              a little 3D to 3D Format Converter Version 3.1
                             by Thomas Baier
                              May 1998
		       Internet  : thbaier@ibm.net
			Copyright by Thomas Baier



   Version 1.0 and later of 3Dto3D are Shareware and may be distributed
   freely, provided that you leave this documentation file in the
   archive. Note that this program is fully functional.

   If you enjoy this program, use it frequently, and can afford to pay
   a registration fee, then send $20 to:

			Thomas Baier
			Ammerseestr.9
			85551 Kirchheim
			Germany

   Please include your name and mailing address.
   With this registration you help me improve 3dto3d. With registration you
   can expect a prompt response on questions or bugs. Thanks.


   This program is a little utility to convert 3D files to a number of
   other 3D formats. It can generate smooth triangles for those formats
   that support it, allowing you to specify the angle under which the
   faces should be smoothed.


   NOTE TO SOURCECODE

   This program was developed on a INTEL platform. If you want to build
   versions for other plattforms than DOS/Windows95 or WindosNT,
   please keep attention !!!
   Please keep in mind, that INTEL platforms use IEEE floating format.

   If you have problems, bugs or suggentions please send me a mail.

   Thanks to my brother Bernhard. He made this distribution possible.
   Source code obfuscation done by COBF (bernhard.baier@ibm.net)
   Thanks.

   Any modifications of the source modules prohibited!

   CONTENT

   README		this file
   a*.cc		C++ source modules
   *.h			needed header files
   Makefile		Makefile for Linux / GCC 2.7 or better
			Please modify for other unices!
   3dto3d		Linux ELF executable for 486+ machines
   chess.raw		sample file for 3dto3d



   INPUT

   This version supports the following input formats:

   - *.RAW
     Simple RAW format in the form: pnt0 pnt1 pnt2
     Multiple objects are supported if the file is in the form:
     NAME_OBJECT1
     pnta00 pnta01 pnta02
     pnta10 pnta11 pnta12
     pnta20 pnta21 pnta22
     ...
     NAME_OBJECT2
     pntb00 pntb01 pntb02
     pntb10 pntb11 pntb12
     pntb20 pntb21 pntb22
     ...

     see chess.raw for an example.

   - *.3DS/*.PRJ
     Binary mesh format for 3D Studio (Trademark ...)
     only objects with faces are supported
     Splitting by texture surfaces is supported

   - *.IOB/*.OBJ
     Binary mesh format for Imagine 2.x/3.x (Trademark ...)
     only objects with faces are supported
     Tip: If you have a object generated in the form - editor, load it
     into the detail editor, select it, use the "merge" command and
     save it as a ".obj" file. Now the object is ready for converting.
     Tip: If you have object files with the extension .iob (Amiga
     extension ??) rename it to ".obj".
     Supports now old and new 32bit style format

   - *.LWO
     Binary mesh format for Lightwave
     Splitting by texture surfaces is supported

   - *.DXF
      Well known interchange format of Autodesk
      Objects by layer or color are supported

   - *.POB
       POV-Ray binary scene format
       Only sets of triangles or meshes supported

   - *.OBJ
       Wafefront Object format
       Only face and polygons are supported


   OUTPUT

   This version supports the following output formats:

   - *.RAW
     The converter can generate a smooth RAW from an unsmoothed
     RAW and vice versa.

   - *.UDO/*.INC
     Userdefined Object format for Moray V2.x and a inc file for
     POVRAY2.2 or 3.0 or POLYRAY.
     The converter writes a UDO file and a corresponding POV-Ray or
     Polyray include file, generating triangles (poly's) and
     smooth_triangles (patches). Use the /e parameter to reduce
     the edge count if you are getting too many edges in the UDO file.
     A value of /e5 will retain just about all edges that are not coplanar.
     A value of /e60 will throw out lots of edges and retain only pretty
     sharp contours.
     Additional wired and wired/blobby output for povray is supported

   - *.ASC
     ASCII object format for 3D Studio. Hidden edges are supported

   - *.OBT
     ASCII object format for Highlight Pro

   - *.RPL
     ASCII object macro format for Real 3D. (Version 3.12)

   - *.3DS
     Binary object format for 3D Studio. Hidden edges are supported

   - *.IOB/*.OBJ
     Binary object format for Imagine.
     Hidden edges (Quick edges) and smoothing (Sharp Edges) are supported
     old and new 32bit style format support

   - *.RWX
     ASCII objectformat for RenderWare

   - *.WRL
     ASCII objectformat for VRML 1.0

   - *.DXF
     ASCII objectformat for Autocad DXF, output with 3DFACE or POLYLINE

   - *.LWO
     Binary mesh format for Lightwave
     Support for smoothing and NURBS

   - *.X
     Direct X ASCII format for Mircrosoft

   - *.OBJ
     Binary meshformat for Real 3D

   - *.C
     OpenGL C File

   - *.OBJ
     Wavefront Object file



   If inputtype and outputtype are the same, $$$ is used as filename.


Usage:
		3dto3d xxxx [options]
Example:
		3dto3d chess /oe20 /ot3
Options:
		/ifvalue (value = Inputtype)
			value = 0 RAW (default)
			- Supported switches:
				/iv
				/iu
				/it
				/ix

			value = 1 3DS (3D Studio)
			- reads *.3ds and *.prj
			- Could split every object by surfaces
			- Supported switches:
				/iv
				/iu
				/it
				/ix
				/imvalue:
					value = 0 => no split
					value = 1 => split by surfaces

			value = 2 OBJ (Imagine)
			- Supported switches:
				/iv
				/iu
				/it
				/ix

			value = 3 LWO (Lightwave)
			- Supported switches:
				/iv
				/iu
				/it
				/ix
				/imvalue:
					value = 0 => no split
					value = 1 => split by surfaces

			value = 4 DXF <AutoCad Object>
			- supports objects by layer or color
			- Supported switches:
				/iv
				/iu
				/it
				/ix
				/imvalue:
					value = 0 => Objects by Layer
					value = 1 => Objects by Color

			value = 5 POB <Povray Binary>
			- recognizes only triangles and meshes
			- Supported switches:
				/iv
				/iu
				/it
				/ix

		/iv(Verbose on)
		- gives status messages on the progress of the conversion

		/iu(Unify Mesh on)
		- changing all normal vectors pointing outside

		/itvalue (value = Swapmode)
			value = 0 normal (default);
			value = 1 swap X <-> Y;
			value = 2 swap X <-> Z
			value = 3 swap Y <-> Z
		- swaps axis

		/ixvalue (val = sizingvalue, default 1.0)
		- sizes the mesh.
		  values from 0.0 to 1.0 shrink the mesh
		  values greater than 1.0 enlarg the mesh
		  negative values mirror the mesh

		/imvalue (value = Mode)
		- mode has different meaning depending on
		  import format

		/ofvalue (value = Outputtype)
			value = 0 RAW
			- makes a pure RAW file for testing
			  form: pnt0 pnt1 pnt2
			- Supported switches:
				/ov
				/ou
				/ot
				/ox

			val = 1 Smoothed RAW
			- makes a smoothed Raw file
			  form: pnt0 norm0 pnt1 norm1 pnt2 norm2
			- Supported switches:
				/ov
				/ou
				/ot
				/ox
				/os

			val = 2 UDO + POV/INC <Moray/Povray>(default)
			- makes a POVRAY include File with triangles
			  and a MORAY UDO file
			- Supported switches:
				/ov
				/ou
				/ot
				/ox
				/os
				/oe

			val = 3 UDO + POLY/INC <Moray/Polyray>
			- makes a POLYRAY include File with triangles
			  and a MORAY UDO file
			- Supported switches:
				/ov
				/ou
				/ot
				/ox
				/os
				/oe

			val = 4 ASC <3DStudio>
			- makes a 3DStudio ASC file
			- /e affects hiding edges for better viewing
			- Supported switches:
				/ov
				/ou
				/ot
				/ox
				/os
				/oe

			val = 5 OBT <HighLight>
			- makes a HighLightPro OBT file
			  (multible objects are converted to
			   multible files, f00000, f00001, ...)
			- Supported switches:
				/ov
				/ou
				/ot
				/ox

			val = 6 RPL <Real3D Macro>
			- makes Real3D RPL file, ASCII Macro
			- Supported switches:
				/ov
				/ou
				/ot
				/ox

			val = 7 3DS <3DStudio>
			- makes a 3DStudio binary file
			- /e affects hiding edges for better viewing
			- Supported switches:
				/ov
				/ou
				/ot
				/ox
				/os
				/oe

			val = 8 UDO + POV/INC <Moray/Povray>(wire)
			- makes a POVRAY include File
			  and a MORAY UDO file
			  For every edge in the object a cylinder
			  and for every vertex a sphere is output
			  The radius is controlled via /r
			  /r1.0 for radius 1.0
			  Can be used to make a 'real' wireframe object
			- Supported switches:
				/ov
				/ou
				/ot
				/ox
				/os
				/oe
				/or

			val = 9 UDO + POV/INC <Moray/Povray>(blobbywire)
			- makes a POVRAY include File
			  and a MORAY UDO file
			  For every edge in the object a line of blobs
			  and for every vertex a blob is output
			  The radius and the spacing is controlled via /r
			  /r1.0 for radius 1.0
			- Supported switches:
				/ov
				/ou
				/ot
				/ox
				/os
				/oe
				/or

			val = 10 OBJ <Imagine Object>
			- makes a Imagine binary file
			- /e affects hiding edges for better viewing
			  (Quickedges)
			- /s affects smoothing edges for better viewing
			  (Sharpedges). A low value makes more edges sharp.
			- Supported switches:
				/ov
				/ou
				/ot
				/ox
				/os
				/oe
				/imvalue:
                                        value = 0 => old format
                                        value = 1 => new 32bit format

			val = 11 RWX <RenderWare Object>
			- makes RenderWare object file, ASCII
			- Supported switches:
				/ov
				/ou
				/ot
				/ox

			val = 12 WRL <VRML 1.0 Object>
			- makes VRML object file, ASCII
			- Supported switches:
				/ov
				/ou
				/ot
				/ox

			val = 13 DXF < Autocad DXF Object>
			- makes DXF object file, ASCII
			- Supported switches:
				/ov
				/ou
				/ot
				/ox
				/imvalue:
					value = 0 => 3DFACE
					value = 1 => POLYLINE

			val = 14 LWO < LWO Lightwave Object>
			- makes LWO object file and a Lightwave Scene file
			  (multible objects are converted to
			   multible files)
			- Supported switches:
				/ov
				/ou
				/ot
				/ox
				/os
				/imvalue:
                                        value = 0 => POLYGONS
                                        value = 1 => NURBS

			val = 15 UDO + POV3/INC <Moray/Povray>
			- makes a POVRAY 3.0 include File with triangles
			  and a MORAY UDO file
			- Supported switches:
				/ov
				/ou
				/ot
				/ox
				/os
				/oe

			val = 16 Direct X <Microsoft>
			- makes a Direct 3D X file, smoothing is supported
			- Supported switches:
				/ov
				/ou
				/ot
				/ox
				/os

			val = 17 OBJ <Real3D Object>
			- makes a Real 3D binary object file
			- Supported switches:
				/ov
				/ou
				/ot
				/ox

                        val = 18 OpenGL C Source
                        - makes a OpenGL C file, smoothing is supported
			- Supported switches:
				/ov
				/ou
				/ot
				/ox
				/os

                        val = 19 WaveFront
                        - makes a Wavefront triangle file, smoothing is supported
			- Supported switches:
				/ov
				/ou
				/ot
				/ox
				/os

                /osvalue (value = Smoothing Angle in degrees, default 70.0)
		- smoothes tri's with a normal angle below value

		/oevalue (value = Edge Detect Angle in degree, default 1.0)
		- throws out edges with an angle below value

		/orvalue (value = radius for wireframe objetcs, default 1.0)

		/ov(Verbose on)
		- gives status messages on the progress of the conversion

		/ou(Unify Mesh on)
		- changing all normal vectors pointing outside

		/otvalue (value = Swapmode)
			value = 0 normal (default);
			value = 1 swap X <-> Y;
			value = 2 swap X <-> Z
			value = 3 swap Y <-> Z
		- swaps axis

		/oxvalue (val = sizingvalue, default 1.0)
		- sizes the mesh.
		  values from 0.0 to 1.0 shrink the mesh
		  values greater than 1.0 enlarg the mesh
		  negative values mirror the mesh

		/omvalue (value = Mode)
		- mode has different meaning depending on
		  export format


				History
        Version 3.1
        - UDO comma bug fixed
        - added support for LWO NURBS output
        - added support for binary formats on non Intel plattforms
        - added OpenGL export
        - added WaveFront import/export
        - memory use decreased
        - unify speed increased


        Version 3.0
	- 3dto3d, 3DWin and 3DWinOGL share same source of fileformats
	- Direct X added
	- Real 3D added
	- DXF added
	- POB added
	- lots of improvements

	Version 1.7
	- Strang memory bug fixed during loading lwo files
	- lwo output implemented

	Version 1.6
	- Support for Lightwave objects added
	- Bug with imgine naming fixed (imagine writes zero name)
	- Better obt (Highlight) support. Multible Objects are
	  converted to multible files in the form f00000.obt, f00001.obt
	- Imagine 2.0/3.0/4.0 limits object size to 32767 vertics or edges
	  or faces.

	Version 1.5
	- DXF (Autocad) output supported (/o13)

	Version 1.4
	- OBJ (Imagine) output supported (/o10)
        - Quickedges support (hidden edges in meshes) for 3ds and obj (/e)
        - mesh sizing (/x)
        - mesh unifing (/u)
        - SharpEdges (smoothing) support for obj (/s)
        - NT console compile (3dnt3d.exe)
        - RWX (RenderWare) output supported (/o11)
        - WRL (VRML 1.0) output supported (/o12)

        Version 1.3
        - bugfix for raw input

        Version 1.2
        - blobby wire

        Version 1.1
        - improved 3ds import

        Version 1.0
        - first public release


