diff options
author | Daniel Dunbar <daniel@zuster.org> | 2005-04-04 07:38:21 +0400 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2005-04-04 07:38:21 +0400 |
commit | 0b02d592b8d3c665aceba5c4665326c3fc80aa1c (patch) | |
tree | 2d98ee3560f7b9dd1c9fdf36a30acbeddaa692fd /source/blender/blenkernel/intern/CCGSubSurf.c | |
parent | 5c85bb9cd21975f01f1447070bea7138ced4d7dc (diff) |
- work-in-progress: subsurf level 0 now just acts like a regular mesh,
before it would follow subsurf code path by creating fake displistmesh,
etc... kinda fun for testing but just annoying now.
- change to creasing behavior, to make sure that with full creasing effect
is just simple subdivision.
Diffstat (limited to 'source/blender/blenkernel/intern/CCGSubSurf.c')
-rw-r--r-- | source/blender/blenkernel/intern/CCGSubSurf.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/source/blender/blenkernel/intern/CCGSubSurf.c b/source/blender/blenkernel/intern/CCGSubSurf.c index 2f6c95414e2..9dd5e7340c4 100644 --- a/source/blender/blenkernel/intern/CCGSubSurf.c +++ b/source/blender/blenkernel/intern/CCGSubSurf.c @@ -1131,7 +1131,7 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { CCGVert *v = effectedV[ptrIdx]; void *co = VERT_getCo(v, curLvl); void *nCo = VERT_getCo(v, nextLvl); - int sharpCount = 0; + int sharpCount = 0, allSharp = 1; float avgSharpness = 0.0; for (i=0; i<v->numEdges; i++) { @@ -1141,6 +1141,8 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { if (sharpness!=0.0f) { sharpCount++; avgSharpness += sharpness; + } else { + allSharp = 0; } } @@ -1206,7 +1208,7 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { ss->meshIFC.vertDataMulN(ss->meshData, q, (float) 1/sharpCount); - if (sharpCount!=2) { + if (sharpCount!=2 || allSharp) { // q = q + (co-q)*avgSharpness ss->meshIFC.vertDataCopy(ss->meshData, r, co); ss->meshIFC.vertDataSub(ss->meshData, r, q); @@ -1409,7 +1411,7 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { CCGVert *v = (CCGVert*) effectedV[ptrIdx]; void *co = VERT_getCo(v, curLvl); void *nCo = VERT_getCo(v, nextLvl); - int sharpCount = 0; + int sharpCount = 0, allSharp = 1; float avgSharpness = 0.0; for (i=0; i<v->numEdges; i++) { @@ -1419,6 +1421,8 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { if (sharpness!=0.0f) { sharpCount++; avgSharpness += sharpness; + } else { + allSharp = 0; } } @@ -1485,7 +1489,7 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { ss->meshIFC.vertDataMulN(ss->meshData, q, (float) 1/sharpCount); - if (sharpCount!=2) { + if (sharpCount!=2 || allSharp) { // q = q + (co-q)*avgSharpness ss->meshIFC.vertDataCopy(ss->meshData, r, co); ss->meshIFC.vertDataSub(ss->meshData, r, q); |