On these pages I am trying to understand the Axiom geometry and graphics structures, add extra code to export these to 3D graphics files and try to find a simpler way to work with these things
My motivation is to:
- Export plots into a dedicated 3D editors (such as 'blender').
- I have also had a idea to draw shapes and transform them using the Clifford algebra.
- I also find it very helpful to be able to visulise the algebraic structures and I want to find better ways to do this.
The draw and plot commands in axiom are well documented. However I have been having some difficulty getting information about some of the geometry and graphics structures that surround them.
I have found some documentation here:
- bookvolume0 - 7.2.6 - Building 3D primitives from scratch
- and HyperDoc - Topics->Graphics->
but mostly I have been trying to work out the information from the code files. As I work out how the existing Axiom code works in this area I have been putting my documentation on this page.
Applications of Graphics In Axiom
For instance I would like to:
Existing Axiom Graphics Structures
Click on a structure in this diagram to see more about it:
I am trying to put together documentation for each of these categories, packages and domains on this page.
My first impression of geometry and graphics structures is that it seems messy, it would be nice to have a more consistent set of conventions, it is hard for me to discover an overall plan so I have tried to show the main connections in the above diagram. Of course the implementation is a lot more complicated than that.
One of the things that makes it so complicated is that it it written in a mixture of spad,C and Lisp.
Other issues that concern me:
- There are different structures for two and three dimensional cases. Forth dimension can be represented by colour but this is also done in an inconsistent way.
- Some structures allow non cartesian coordinates, but I am not sure where cartesian coordinates are assumed.
- Structures like 'ThreeSpace' and 'SubSpace' just seem to me to have a lack of generality and regularity, it is quite difficult to work out how they work and how to extend them to do new things. Although ThreeSpace holds SubSpace structures there still seems to be overlap between their functionality.
- No easy way to store text in the scene for labeling, axis scale and so on.
Scene Graph and Open Inventor
A scenegraph structure would be much better. The advantage of a scene graph is that transforms can be applied without modifying the points defining the geometry. This is faster and also minimises the accumulation of rounding errors when floating point numbers are subject to many calculations. In the scene graph structure each geometry primitive is defined in its local coordinate system. To get its absolute coordinates we have to apply all the transform nodes between it and the root node.
Many 3D file formats such as X3D, VRML and Java3D are based on a scene graph and these are based on an older standard called Open Inventor. Open Inventor, originally IRIS Inventor, is a C++ object oriented retained mode 3D graphics API designed by SGI to provide a higher layer of programming for OpenGL.
There seem to be many structures in axiom to implement Open Inventor (IVNodeCategory, RenderTools, IVSimpleInnerNode, IVSeparator, IVGroup, IVCoordinate3, IVQuadMesh, IVIndexedLineSet, IVUtilities).
I can't find any documentation about using Open Inventor structures from Axiom, apart from the discussion on this thread:
Is it one of the write modes available: 'pixmap','bitmap','postscript' or 'image' files?
Exporting Graphics Information
I would like to be able to output a draw 3D image to a standard 3D file format rather than the x-window. Axiom/Fricas does have the ability to write to 'pixmap','bitmap','postscript' and 'image' files, however most of these formats flattern the 3D geometry information to a 2D image or are quite out-of-date file formats.
I want a format which I can import into a 3D editor like blender. Also it must be able to output any geometry, either produced by draw/plot or makeObject or built from primitives. For instance so that a plot can be exported together with axes and grid.
I am looking at creating two graphics output writers (because they would have complimentary capabilities):
- A Wavefront .OBJ file - Produces a very simple file which is supported by virtually every 3D editor.
- A X3D file - more complicated and can do things like text and colour which are harder for .obj files.
I am putting information about this work on this page as I do it.
Existing File Formats
Any information that I can find out about the 'pixmap','bitmap','postscript' and 'image' export capability of Axiom (and the working datafile format 'viewfile?') I will put on this page.