Progressive meshes project (csc570)

Michael Wagner


 

Introduction

"Progressive Meshes" by Hugues Hoppe presents a way to simplify a mesh.  This technique involves simplifying to a "base mesh", and recording how the reductions were made by using "vsplits".  Together, a base mesh and a series of vsplits constitutes a progressive mesh.

 

The program offered here converts a mesh into a progressive mesh representation.  Also, it allows the user to specify what percentage of the original (that is, what percentage of the original number of vertices) is desired for the base mesh.  The file format used is the simple .m, which is vertices followed by faces.  The file format is as follows:

 

Vertex [1] [x] [y] [z]

...

Vertex [m] [x] [y] [z]

Face [1] [vertex reference] [vertex reference] [vertex reference]

...

Face [n] [vertex reference] [vertex reference] [vertex reference]

 

The file format outputted by this project, is the same as the .m representation but appended to the bottom are the vsplit records.  The vsplit records are encoded as 3 vertices: the first and second are vertices that need to be added.  The third is the vertex that will be replaced with the first two.  A vsplit entry looks like:

 

Vsplit [vx1] [vy1] [vz1] [vx2] [vy2] [vz2] [vx3] [vy3] [vz3]

 

Download:

MeshSimplification.zip 96k

 

To use this program:

Command promptt>MeshSimplification
Usage: MeshSimplification [source .m file] [new file name] [percentage of source]
For example, say we want to convert a file named example.m to a progressive mesh.
Also for the base mesh, we want it to have 60 percent of the vertices. Just type,
MeshSimplification example.m example.pm .6
Note: use 0.0 for [percentage of source] to reduce as far down as possible


Results

 

The test mesh

 

The original

 

After simplification...

C:\Documents and Settings\Mike\Desktop\Project>MeshSimplification test.m test.pm 0.0
This mesh has 10 vertices, 19 edges, and 10 faces.
Reducing to base mesh m0...
It now has 8 vertices, 13 edges, and 6 faces.
Created test.pm
Writing out vertices... done!
Writing out faces... done!
Writing out vsplit records... done!

 

Input: test.m

Output test.pm

 

The Cessna

 

 

The original

 

After simplification...

 

C:\Documents and Settings\Mike\Desktop\Project>MeshSimplification cessna500.m cessna.pm 0.0
This mesh has 272 vertices, 750 edges, and 500 faces.
Reducing to base mesh m0...
It now has 44 vertices, 66 edges, and 44 faces.
Created cessna.pm
Writing out vertices... done!
Writing out faces... done!
Writing out vsplit records... done!

 

Input: cessna500.m

Output cessna.pm

 

 

The gargoyle


The original

 

After simplification

 

Command Prompt>MeshSimplification gargoyle500.m gargoyle.pm 0.0
This mesh has 252 vertices, 750 edges, and 500 faces.
Reducing to base mesh m0...
It now has 4 vertices, 6 edges, and 4 faces.
Created gargoyle.pm
Writing out vertices... done!
Writing out faces... done!
Writing out vsplit records... done!

 

Input: gargoyle500.m

Output gargoyle.pm

 

The fan disk

 

The original

 

After simplification...

C:\Documents and Settings\Mike\Desktop\Project>MeshSimplification fandisk_10k.m fandisk.pm 0.0
This mesh has 6475 vertices, 19419 edges, and 12946 faces.
Reducing to base mesh m0...
It now has 4 vertices, 6 edges, and 4 faces.
Created fandisk.pm
Writing out vertices... done!
Writing out faces... done!
Writing out vsplit records... done!

 

Input: fandisk_10k.m

Output fandisk.pm

 

 

 

The dragon

 

 

The original

 

After simplification...

Command Prompt>MeshSimplification dragon10k.m dragon.pm 0.0
This mesh has 4960 vertices, 15000 edges, and 10000 faces.
Reducing to base mesh m0...
It now has 122 vertices, 486 edges, and 324 faces.
Created dragon.pm
Writing out vertices... done!
Writing out faces... done!
Writing out vsplit records... done!

 

Input: dragon10k.m

Output dragon.pm


References

 

1. "Progressive Meshes", Hugues Hoppe, SIGGRAPH, 1996

2. "Zoe Wood's website", Zoe Wood, csc.calpoly.edu/~zwood