sp_viewer
An OpenGL viewer for visualizing files containing streaming point clouds. Performs simplification for fast rendering; to rerender the full model from a file, press R and wait. Visualizes a streaming point cloud and its spatial finalization quadtree.
The point cloud has to have been run through
spfinalize first. (I.E., an unfinalized point cloud won't get visualized by sp_viewer.)
(
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 red)
Example Usage:
General
-i <input filename>
-o <input filename>
Input File Formats
-ispa
Streaming Point ASCII
-ispb
Streaming Point Binary
-hi <header filename>
Specify an optional input header file
-lof <list of files>
Specify a list of files to visualize
-double
Force input datatype to be read as doubles
-force_double
Same as
-double
-float
Force input datatype to be read as floats
-force_float
Same as
-float
-random <number>
Generates n random points per cell
-win <width> <height>
Set initial width and height of main window
-del2
Visualizes the state of streaming delaunay triangulation
(
Note: won't work if stream hasn't been properly finalized)
-del3
Wrap stream with 3D delaunay tetrahedron generator (Note: won't work if stream hasn't been properly finalized)
-fin2
Something to do with finalization 2D method override
-fin3
Something to do with finalization 3D method override
-flatten
Force bounding box z-values to zero
-steps <number>
Step Size for 'S' or 's' large step commands
-until <number>
Stop rendering when you reach the nth point
-every <number>
Only show every nth point
-points <number>
Display buffer should only contain at most
n points, so only show every mth point where 'm' = total input points/
n points
-kamera <azimuth> <elevation> <distX> <distY> <distZ>
Set initial camera parameters, otherwise, initial camera is computed from min/max bounds
-scatter
Add some random noise to input stream via a wrapper class spreadscattered.h -
Class says it is not really used anymore
Usage:
sp_viewer -h
sp_viewer -i cloud.spb
sp_viewer -i cloud.spa.gz -del3
sp_viewer -i terrain.spb -every 100
sp_viewer -i terrain.spb.gz -del2
sp_viewer -i terrain.obj.gz -del2 -flatten
sp_viewer -i cloud.spb -del3 -steps 500
sp_viewer -win 1600 1200 -i cloud.obj
sp_viewer -h
Keyboard Shortcuts
Interactive controls: |
p | play/stop |
o | stop |
space | switch between rotate/translate/zoom |
-/= | render points smaller/bigger |
_/+ | render lines thinner/wider |
>/< | Zoom in/out |
[/] | exaggerate/mellow elevation differences |
b | hide/show bounding box |
S/s | Big step forward/backward |
T/t | Small step forward/backward |
r | out-of-core full resolution rendering |
d | create a raw frame buffer (for dumping) |
u | toggle render mode through unfinalized space |
a | toggle render mode through active triangles |
i | toggle render mode through infinite triangles |
v | toggle render mode through stream coloring |
c | toggle render mode through Circumspheres |
k | print kamera parameters to stderr |
x | exchange filenamed (if multiple '-i' inputs) |
ESC or q | quit |
'N' or 'n'
Something to do with picking a quadtree/octree cell
'K'
Dump # of points remaining to console
Move pointer above a triangle and press 'm'. Shows you circumcircles that
intersect the grid (if computed already).
GUI Commands
Mouse:
Press and hold the left mouse button to translate (pan), rotate, or zoom
(scale) based on which state you are currently in (translate, rotate,
zoom).
Press and hold the middle mouse button to adjust the z-scale (make
vertical heights more pronounced relative to the horizontal scale).
Right click to bring up a context menu.
Context Menu Commands: |
point ... | brings up Points submenu (see below) |
steps ... | brings up steps submenu (see below) |
rotate | switches to rotate mode |
translate | switches to translate mode |
zoom | switches to zoom mode |
<s>tep | steps thru animation, same as 's' keyboard shortcut |
<p>lay | play animation, same as 'p' shortcut |
st<o>p | stop animation, same as 'o' shortcut |
stream <c>oloring | Change stream coloring mode, same as 'c' shortcut |
render <m>ode | Change render mode, same as 'm' shortcut |
<a>ctive elements | Change active elements mode, same as 'a' shortcut |
<i>nfinite elements | Change infinite elements mode, same as 'i' shortcut |
<u>nfinalized space | Change unfinalized mode, same as 'u' shortcut |
<Q>UIT | Quits Application, same as 'Q' or 'q' shortcut |
Points SubMenu Command
(
Note: also see -points <number>)
Represent point cloud by
n representative points.
(Only display every
m th point where
m = total points /
n points)
5,000 points | Only display 5,000 representative points |
50,000 points | Only display 50,000 representative points |
100,000 points | Only display 100,000 representative points |
250,000 points | Only display 250,000 representative points |
500,000 points | Only display 500,000 representative points |
1,000,000 points | Only display 1,000,000 representative points |
2,500,000 points | Only display 2,500,000 representative points |
5,000,000 points | Only display 5,000,000 representative points |
Steps SubMenu command
Large Step size for Animation commands 'S' and 's' -
Changes step size to specified number
- in 5 steps
- in 10 steps
- in 25 steps
- in 50 steps
- in 100 steps
- in 250 steps
- in 500 steps
- in 1000 steps
- in 10000 steps
Miscellaneous
The memory requirements are proportional to the maximal number of triangles
and vertices that are allocated concurrently (the actual number is output to
stderr in the end) and the maximal number of quadtree cells in the quadtree
that is used to maintain and query the finalized space.
If given a non-streaming point cloud, nothing can get finalized, and the memory
requirements are much higher (e.g. more than a standard delaunay triangulator).
--
JackSnoeyink - 02 Jun 2008
--
ChristianStith - 24 Jun 2008
UNDEFINED FLAGS
These are a few more flags that I currently do not have information/descriptions of. Anyone who does please send them to me at
stith@cs.unc.edu
-tiles2D
-tiling2D
-tiles3D
-tiling3D
??? (have to debug)
-parse <parseString>
???
Would have to debug to figure this out -
Might allow generic text files to get parsed.