SLIDE 7 7 View-Dependent Progressive Meshes
- Start from vertices in the coarse mesh M0 and build a
vsplit tree under each vertex (we’ll end up with a forest with coarse level vertices as roots).
- At run time start from the roots nodes and split them if
they meet the criteria discussed before
VDPM Hierarchy
v v2
2
vspl vspl0
M M0
vspl vspl1
1
vspl vspl2
2
vspl vspl3
3
vspl vspl4
4
vspl vspl5
5
v v1
1
v v3
3
M M0
v v10
10
v v11
11
vspl vspl3
3
v v1
1
v v2
2
v v4
4
v v5
5
vspl vspl0
v v8
8
v v9
9
vspl vspl2
2
v v3
3
v v6
6
v v7
7
vspl vspl1
1
v v5
5
v v12
12
v v13
13
vspl vspl4
4
v v10
10
vspl vspl5
5
v v14
14
v v15
15
v v6
6
PM: PM: M Mn
n Courtesy of Hugues Hoppe
M M0
Algorithm
Add the vertices of M0 to the active vertex list Foreach vertex v in active vertex list if qrefine(v) if vsplit(v,..) is legal (see details in VDPM paper) split v (add its children to the active vertex list) else force split of every vertex that v’s neighborhood depends on else if ecol(v,..) is legal (see details in VDPM paper) collapse v (add its parent to active vertex list)
function qrefine(v) if outside_view_frustum(v) return false if oriented_away(v) return false if screen_space_error(v) <= t return false return true
Further Issues
– Blend between levels Mi and Mj to avoid popping
– Try achieving constant frame rate by varying screen space tolerance t
– Distribute traversing the tree over frames (works well for slowly changing view)