sm_viewer
An OpenGL-based viewer that allows you to look at
a streaming mesh and also helps illustrating the "stream quality" of the
mesh. First of all you can watch the order in which the triangles stream
from disk into memory. You can also visualize their arrangement in the
the stream by coloring them according to their position in the triangle
array. And finally you can visualize how compatible the vertex order is
by coloring all triangles with high vertex spans in red.
This viewer was used on a 1.1~Ghz laptop with 512~MB to create the images
in the paper. The streaming mesh format allowed even the largest of our
models (e.g. atlas with 500 million triangles) to be rendered directly
from its full resolution version. The viewer does so by simplifying the
mesh on-the-fly using simple vertex clustering. Read vertices are hashed
into a uniform grid based on their position. The mapping from their indices
to their grid cell is stored in the hash where it is looked up by incoming
triangles. The crucial part is that when a vertex is finalized we can now
remove its entry from the hash since there will no more subsequent triangles
looking it up. The maximal number of vertices in the hash equals the maximal
number of vertices that are active at the same time (e.g. the width of the
streaming mesh). This number is reported in the console after loading has
completed. Notice that for non-streaming formats this number equals the
number of vertices in the mesh. Therefore it is not possible to operate
on large meshes in standard ply format.
In addition to our formats SMA to SMD, this tool
supports OBJ, SMF, and PLY meshes (optionally gzipped).
For more on sm formats, see
sm2sm.
(Note: Descriptions for some of these flags were unavailable. Shawn Brown has made his best guess with regards to these. Guesses will be marked in blue)
Example Usage:
General
-i <filename>
Usage:
sm_veiwer -h
sm_viewer mesh.sma
sm_viewer -ismc < mesh.smc
sm_viewer -win 640 480
sm_viewer -win 1600 1200 mymesh.obj
sm_viewer -grid 9 -every 1000 -isma < mymesh.sma
sm_viewer -h
Input File Flags
Input File Format Flags
-isma
Streaming Mesh ASCII
-ismb
Streaming Mesh Binary
-ismc
Streaming Mesh Compressed
-ismd
Streaming Mesh (might be obsolete)
-ismq
Streaming Mesh Quadratic (becoming obsolete)
-ioff
Stanford OFF format
-iply
Stanford PLY format
-ijrs
Jonathan Schewchuk's format
-iasc
ESRI Grid (ASCII) format
Misc Flags
-win <width> <height>
Starting width and height of main window
-grid <number>
Grid Precision
-every <number>
Subsample, take every nth vertex for display
-until <number>
Stop rendering when you reach nth vertex
-steps <number>
number of steps to take thru animation
-kamera <azimuth> <elevation> <distX> <distY> <distZ>
Camera parameters
GUI Commands
Keyboard Shortcuts |
'Q' or 'q' or 'Esc' | Quit application |
<space> | switch between translate, rotate, and scale modes |
'>' | zoom in |
'<' | zoom out |
'-' | <minus>, decreases RED_SCALE ??? |
'=' | <equal>, increases RED_SCALE ??? |
'[' | increases EXTRA_Z_SCALE ??? |
']' | decreases EXTRA_Z_SCALE ??? |
'C' or 'c' | rotates STREAM_COLORING mode thru 4 states |
'M' or 'm' | rotates RENDER_MODE thru 3 states |
'O' or 'o' | turns off animation |
'V' or 'v' | shades triangles based on vertex span |
'R' or 'r' | Render the entire mesh (can be very slow) |
'W' or 'w' | toggle blue and white colors for mesh rendering |
'D' or 'd' | creates raw frame buffer ??? |
'T' | takes tiny step backwards thru animation |
't' | takes tiny step forwards thru animation |
'S' | takes large step backwards thru animation |
's' | takes large step forwards thru animation |
'P' or 'p' | Plays or replays animation |
'K' or 'k' | Dump camera info to console |
'L' or 'l' | toggle LINE display |
'0' or '9' | brings up corresponding 3D model sub-menu |
1 | display triangle "stripes" |
Left mouse button either translates, rotates, or zooms based on current mode.
Middle mouse button increases relative scale vertically to horizontally.
Right mouse button brings up context menu.
Menu Items
3D Menu Items |
"models ..." | Various 3D models (obsolete for terrain) |
"grid ..." | brings up grid sub-menu (see below) |
"steps ..." | brings up steps sub-menu (see below) |
"lines ..." | brings up lines sub-menu (see below) |
"rotate" | switches to rotate mode |
"translate" | switches to translate mode |
"zoom" | switches to zoom mode |
"<s>tep" | step thru animation, same as 's' shortcut |
"<p>lay" | play animation, same as 'p' shortcut |
"st<o>p" | stop animation, same as 'o' shortcut |
"<v>ertex span (+/-) | ??? |
"stream-<l>ines" | Show stream lines ??? |
"stream <c>oloring" | rotates STREAM_COLORING between 3 states (same as 'c' shortcut) |
"render <m>ode" | rotates RENDER_MODE between 3 states (same as 'm' shortcut) |
"<Q>UIT" | Quits application, same as 'Q' shortcut |
Grid Sub-menu (Size of grid to use for rendering triangles/vertices from coarse to fine)
- "3x3x3 grid"
- "4x4x4 grid"
- "5x5x5 grid"
- "6x6x6 grid"
- "7x7x7 grid"
- "8x8x8 grid"
- "9x9x9 grid"
- "10x10x10 grid"
Step Sub-menu (Number of frames to step thru animation when using 'S' or 's' commands)
- "every 5 steps"
- "every 10 steps"
- "every 25 steps"
- "every 50 steps"
- "every 100 steps"
- "every 500 steps"
- "every 1000 steps"
Lines Sub-menu (Has something to do with STREAM COLORING - IE, how often the colors change)
- "10 lines"
- "15 lines"
- "20 lines"
- "25 lines"
- "40 lines"
- "50 lines"
- "60 lines"
- "75 lines"
Models Sub-menu (Obsolete for terrain purposes - appears to be used for loading in various 3D model meshes)
- Bunny Sub-menu
- Dinosaur Sub-menu
- Armadillo Sub-menu
- Dragon Sub-menu
--
JackSnoeyink - 02 Jun 2008
--
ChristianStith - 24 Jun 2008
Revision: r1.1 - 03 Jul 2008 - 20:49 - Main.guest