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:
authorDaniel Dunbar <daniel@zuster.org>2005-04-04 07:38:21 +0400
committerDaniel Dunbar <daniel@zuster.org>2005-04-04 07:38:21 +0400
commit0b02d592b8d3c665aceba5c4665326c3fc80aa1c (patch)
tree2d98ee3560f7b9dd1c9fdf36a30acbeddaa692fd /source/blender/blenkernel/intern/CCGSubSurf.c
parent5c85bb9cd21975f01f1447070bea7138ced4d7dc (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.c12
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);