3D Utilities

Repository: https://isda.ncsa.illinois.edu/svn/nara/trunk/3DUtilities
Documentation: Web | PDF
License: NCSA Open Source
Status: Supported

The 3D Utilities are a Java library and set of tools built on top of OpenGL to load, save, view, manipulate, and compare 3D file content from a variety of formats. Including supported formats from NCSA Portfolio, the 3D Utilities contains loaders for 3DS, AC, BYU, COB, DAE, DXF, FACET, GEO, GTS, IOB, JVX, KMZ, LWS, MS3D, NFF, OBJ, OFF, PHD, PLG, PLY, POLY, Q3O, RAW, SDML, STP, STL, TET, TM, TRI, VTK, WRL, X, and X3D. Data loaded from the 3D files are returned in a simple Mesh data structure containing the models vertices and faces.

The 3D Utilities package was created by a need to load, view/manipulate, and compare 3D files from among the many formats that exist today. The open source project is based around a single simple data structure for representing 3D objects, a polygonal mesh. Though a variety of data structures exist to represent 3D data, the polygonal mesh is by far one of the simplest and as such is fairly easy for most people to deal with. In addition, being a fairly low level representation of a 3D surface most other 3D representations can be converted to this representation while the inverse can often be non-trivial.

By fixing our 3D data representation we provide a uniform means of constructing a library of file loaders, model viewers, manipulation methods, and comparison measures. Of particular importance is the effort to construct a large open library of 3D file loaders. To our knowledge there does not exist an active open source library for loading 3D data. Java 3D attempted to provide such a functionality some time ago by providing a “Loader” interface by which developers could construct new file loaders. Over the years however very few loaders have been made and distributed. It is possible that the complexity of the very flexible scene graphs used by Java 3D made it a hindrance for all but the more advanced programmers to attempt constructing file loaders. Coupled with the effort required to construct loaders for the many file formats available, many of which being propriety with closed specifications, likely did not help the situation.

It is this projects hope that by “keeping things simple” and imposing this simple mesh data structure we can succeed where others have failed. We hope to encourage programmers at large, both advanced and novice, to contribute file loaders. At the same time we hope to provide a free means of loading a large numbers of 3D formats to developers (in particular new programmers, students, who often re-implement a simple loader to incorporate models in their projects). By developing the library in Java we hope to provide this functionality across platforms and over the web.

Source code is available from our Subversion repository at:


and can be checked out as follows:

svn checkout https://isda.ncsa.illinois.edu/svn/nara/trunk/3DUtilities

If you wish to contribute code to the project please contact mchenry@uiuc.edu.

When multiple files are selected at the same time, by holding the control key and clicking, the models are displayed at the same time connected by weighted edges. The weights on the edges are obtained from the currently set “MeshSignature” and indicate the level of dis-similarity between the models. In this example the mesh signature is set to “MeshSignature_LightFields”. Invariant to rigid transformations the distance between the two planes is small, 0.0. The planes being very different in appearance from the cow model have a much higher distance between them, 205.345.
The model viewer applet used within a browser to view a 3D model.
A model viewer displaying a mesh model. The user can click and drag to rotate the object and right click to reveal additional options within a popup menu.
The model browser tool displaying all loadable 3D files found under a given directory. The left pane shows the files found. By hovering the mouse over a particular file a thumbnail is shown of the 3D model under a fixed view. If a file is clicked on it is loaded and rendered in the model viewer within the right pane where it can be manipulated. The bottom pane shows information regarding the loaded model.