diff options
author | Nicholas Bishop <nicholasbishop@gmail.com> | 2007-03-21 09:33:04 +0300 |
---|---|---|
committer | Nicholas Bishop <nicholasbishop@gmail.com> | 2007-03-21 09:33:04 +0300 |
commit | fa2627aa2c6040581700d02eed08790042a8bd84 (patch) | |
tree | c71b5231db4763736195fb75c15ab9a3940f1605 /source/blender/src/multires.c | |
parent | ce46f049355a2f7f7c010615488f4d0d007f4125 (diff) |
== Multires ==
Added an option to choose between Catmull-Clark and simple subdivision when adding a level. This setting applies only to how the level is created; any changes to lower levels are still propagated to the top level using Catmull-Clark.
Diffstat (limited to 'source/blender/src/multires.c')
-rw-r--r-- | source/blender/src/multires.c | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/source/blender/src/multires.c b/source/blender/src/multires.c index 6f1d0fd82dd..ff583d13610 100644 --- a/source/blender/src/multires.c +++ b/source/blender/src/multires.c @@ -944,26 +944,28 @@ void multires_add_level(void *ob, void *me_v) multi_apply(lvl->verts[f->mid].co, &data, 3, catmullclark_smooth_face); } - for(i=0; i<lvl->prev->totedge; ++i) { - const MultiresEdge *e= &lvl->prev->edges[i]; - data.boundary= multires_edge_is_boundary(lvl->prev,i); - edge_face_neighbor_midpoints_accum(&data,lvl->prev,lvl->verts,sizeof(MVert),e); - data.endpoint1= lvl->prev->verts[e->v[0]].co; - data.endpoint2= lvl->prev->verts[e->v[1]].co; - multi_apply(lvl->verts[e->mid].co, &data, 3, catmullclark_smooth_edge); - } - - for(i=0; i<lvl->prev->totvert; ++i) { - data.boundary= multires_vert_is_boundary(lvl->prev,i); - data.original= lvl->verts[i].co; - data.edge_count= BLI_countlist(&lvl->prev->vert_edge_map[i]); - if(data.boundary) - boundary_edges_average(&data,lvl->prev,lvl->prev->verts,sizeof(MVert),i); - else { - vert_face_neighbor_midpoints_average(&data,lvl->prev,lvl->verts,sizeof(MVert),i); - vert_edge_neighbor_midpoints_average(&data,lvl->prev,lvl->prev->verts,sizeof(MVert),i); + if(G.scene->toolsettings->multires_subdiv_type == 0) { + for(i=0; i<lvl->prev->totedge; ++i) { + const MultiresEdge *e= &lvl->prev->edges[i]; + data.boundary= multires_edge_is_boundary(lvl->prev,i); + edge_face_neighbor_midpoints_accum(&data,lvl->prev,lvl->verts,sizeof(MVert),e); + data.endpoint1= lvl->prev->verts[e->v[0]].co; + data.endpoint2= lvl->prev->verts[e->v[1]].co; + multi_apply(lvl->verts[e->mid].co, &data, 3, catmullclark_smooth_edge); + } + + for(i=0; i<lvl->prev->totvert; ++i) { + data.boundary= multires_vert_is_boundary(lvl->prev,i); + data.original= lvl->verts[i].co; + data.edge_count= BLI_countlist(&lvl->prev->vert_edge_map[i]); + if(data.boundary) + boundary_edges_average(&data,lvl->prev,lvl->prev->verts,sizeof(MVert),i); + else { + vert_face_neighbor_midpoints_average(&data,lvl->prev,lvl->verts,sizeof(MVert),i); + vert_edge_neighbor_midpoints_average(&data,lvl->prev,lvl->prev->verts,sizeof(MVert),i); + } + multi_apply(lvl->verts[i].co, &data, 3, catmullclark_smooth_vert); } - multi_apply(lvl->verts[i].co, &data, 3, catmullclark_smooth_vert); } /* Vertex Colors |