a simple viewer/converter for 3d models and tetrahedral meshes
Dan Morris - Stanford University Haptics Lab

[overview]    [download]    [screenshots]    [contact]   



winmeshview is a simple (and free) viewer/converter for 3d meshes, including surface meshes in .ply (ascii or binary), .3ds, .face/.node, .smesh, and .obj format, and tetrahedral meshes in the format (.ele/.node) generated by TetGen (a popular package for generating tetrahedral meshes) and the Abaqus input file format. At the time I'm writing this .html file, TetView - the viewer developed to complement TetGen - is not available for Windows, so winmeshview seemed like a useful thing to make available.

It's also useful as a quick viewer for standard 3d surface meshes; I find that I often download a mesh (or generate a mesh with TetGen) and have to open up a giant slow edtior/viewer just to quickly see what the deal is with the mesh. winmeshview loads whatever mesh you put on the command line, so it's easy to tell Windows to open supported file types with winmeshview, and it generally loads pretty quickly.

winmeshview reads meshes in .ply, .3ds, .face, .obj, and .smesh format, and writes meshes in .smesh, .face/.node, Abaqus .inp, and .obj format. It can also export to a format referred to as ".anode", which is the equivalent of a TetGen node file with only a reference to an element file.

One of the more useful features that TetView provides is the ability to scroll a graphical clipping plane through the model, to let you look at internal tetrahedra; winmeshview has the same feature. It also stole from TetView the useful table of boundary markers that's generated for TetGen-style input files, with faces corresponding to each marker rendered in a different color on the mesh itself.

This program evolved from the object_loader example provided with CHAI, so there are some other cool features that come "for free":

  • You can click "enable haptics" to explore the mesh haptically, if you have a supported haptic device installed.
  • You can view meshes in stereo if you have a stereo-friendly video card and stereo glasses.

batch conversion

winmeshview can also be used for batch conversion, by writing to a file called winmeshview.ini and running the winmeshview binary. The .ini file looks like this:

  # Only two commands are supported in this .ini file:
  # LOAD [filename]
  # CONVERT [input_file] [output_file]
  # Sorry, spaces are not allowed in any of the filenames (lazy lazy parsing
  # on the author's part).
  # LOAD c:\users\dmorris\models\foot.3ds
  # CONVERT c:\users\dmorris\models\foot.3ds c:\users\dmorris\foot.obj

download (binaries and source) (updated 11/10/2013)

The provided source compiles under Visual Studio 2012, and includes all dependencies.

The zipfile also includes the winmeshview binary, the virtual haptic device that ships with CHAI, and a number of sample files in the supported formats (including all the files shown in the screenshots on this page).

winmeshview uses CHAI's overall framework and uses a variant of rply for loading ply files.


  • If you want to start winmeshview by clicking on files (i.e. if the current directory will not be the place to which you unzipped winmeshview), PhantomDriver.dll needs to be in your path (even if you don't have a Phantom haptic device). This is a limitation in CHAI that we hope to fix soon.

  • The .ply loader has been expanded from the original rply implementation but has some limitations; in particular, the last line of your ply file must have a line break on it, and you cannot have a comment on the "end_header" line. The .ply standard is a little fuzzy on these things, so it's not clear whether this is a bug or a feature. These are easy enough to fix in WordPad if your model doesn't meet these specs.

screenshots (click for full-window screenshots)

Most of these meshes were downloaded from the TetGen home page.

A tetgen output file with multiple surface markers is rendered.

A clipping plane is used to expose the inside surface of the same model.

A tetrahedral mesh is rendered.

A clipping plane is used to expose the inner tetrahedra of the mesh.

The user interacts haptically with a surface mesh.

The user interacts haptically with a tetrahedral mesh.

A surface mesh is rendered.

It really wouldn't be a mesh viewer if I didn't show you the bunny.


Feel free to send comments, suggestions, bug reports, or indications that this was useful software to