[Bf-blender-cvs] [282c7ae] opensubdiv-modifier: Added some magic to support NGons
Sergey Sharybin
noreply at git.blender.org
Fri May 2 11:11:03 CEST 2014
Commit: 282c7ae5dee863989816191cc56aee9a30d930c1
Author: Sergey Sharybin
Date: Fri May 2 04:41:35 2014 +0600
https://developer.blender.org/rB282c7ae5dee863989816191cc56aee9a30d930c1
Added some magic to support NGons
Seems tris and ngons are working now, however need
some much more intense testing.
===================================================================
M source/blender/blenkernel/intern/CCGSubSurf.c
===================================================================
diff --git a/source/blender/blenkernel/intern/CCGSubSurf.c b/source/blender/blenkernel/intern/CCGSubSurf.c
index 126f4ed..aefbf97 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf.c
@@ -2669,6 +2669,7 @@ static void opensubdiv_evaluateNGonFaceGrids(CCGSubSurf *ss,
for (S = 0; S < face->numVerts; S++) {
CCGEdge *edge = FACE_getEdges(face)[S];
int x, S0, S1;
+ bool flip;
for (x = 0; x < face->numVerts; ++x) {
if (all_verts[x] == edge->v0) {
@@ -2678,15 +2679,33 @@ static void opensubdiv_evaluateNGonFaceGrids(CCGSubSurf *ss,
S1 = x;
}
}
+ if (S == face->numVerts - 1) {
+ flip = S0 > S1;
+ }
+ else {
+ flip = S0 < S1;
+ }
for (x = 0; x <= edgeSize / 2; x++) {
float *edge_co = EDGE_getCo(edge, subdivLevels, x);
- float *face_edge_co = FACE_getIFCo(face, subdivLevels, S0, gridSize - 1, gridSize - 1 - x);
+ float *face_edge_co;
+ if (flip) {
+ face_edge_co = FACE_getIFCo(face, subdivLevels, S0, gridSize - 1, gridSize - 1 - x);
+ }
+ else {
+ face_edge_co = FACE_getIFCo(face, subdivLevels, S0, gridSize - 1 - x, gridSize - 1);
+ }
VertDataCopy(edge_co, face_edge_co, ss);
}
for (x = edgeSize / 2 + 1; x < edgeSize; x++) {
float *edge_co = EDGE_getCo(edge, subdivLevels, x);
- float *face_edge_co = FACE_getIFCo(face, subdivLevels, S1, x - edgeSize / 2, gridSize - 1);
+ float *face_edge_co;
+ if (flip) {
+ face_edge_co = FACE_getIFCo(face, subdivLevels, S1, x - edgeSize / 2, gridSize - 1);
+ }
+ else {
+ face_edge_co = FACE_getIFCo(face, subdivLevels, S1, gridSize - 1, x - edgeSize / 2);
+ }
VertDataCopy(edge_co, face_edge_co, ss);
}
}
More information about the Bf-blender-cvs
mailing list