Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Bishop <nicholasbishop@gmail.com>2007-03-21 09:33:04 +0300
committerNicholas Bishop <nicholasbishop@gmail.com>2007-03-21 09:33:04 +0300
commitfa2627aa2c6040581700d02eed08790042a8bd84 (patch)
treec71b5231db4763736195fb75c15ab9a3940f1605 /source/blender/src/multires.c
parentce46f049355a2f7f7c010615488f4d0d007f4125 (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.c40
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