[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17516] branches/soc-2008-nicholasbishop/ source/blender/blenkernel/intern/multires.c: WIP: Fixed tangents for vertices of valence 3.
Nicholas Bishop
nicholasbishop at gmail.com
Thu Nov 20 09:25:01 CET 2008
Revision: 17516
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17516
Author: nicholasbishop
Date: 2008-11-20 09:25:01 +0100 (Thu, 20 Nov 2008)
Log Message:
-----------
WIP: Fixed tangents for vertices of valence 3. Still need to look at handling triangles better.
Modified Paths:
--------------
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c 2008-11-20 06:44:50 UTC (rev 17515)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c 2008-11-20 08:25:01 UTC (rev 17516)
@@ -559,6 +559,9 @@
int subco_index, face_index;
float weight;
+ /* Valence for each corner */
+ int valence[4];
+
/* Indices of neighboring faces (or -1 for no neighbor) */
int face_spill_x, face_spill_y;
/* 1 = Negative variable axis */
@@ -692,6 +695,15 @@
}
}
+static void find_corner_valences(MultiresDisplacer *d, DerivedMesh *dm)
+{
+ int i;
+
+ /* Set the vertex valence for the corners */
+ for(i = 0; i < (d->face->v4 ? 4 : 3); ++i)
+ d->valence[i] = BLI_countlist(&MultiresDM_get_vert_edge_map(dm)[((unsigned*)(&d->face->v1))[i]]);
+}
+
static void multires_displacer_init(MultiresDisplacer *d, DerivedMesh *dm,
const int face_index, const int invert)
{
@@ -715,6 +727,7 @@
multires_displacer_get_spill_faces(d, dm, me->mface);
find_displacer_edges(d, dm, &d->edges_primary, d->face);
+ find_corner_valences(d, dm);
d->dm_first_base_vert_index = dm->getNumVerts(dm) - me->totvert;
}
@@ -939,6 +952,14 @@
norm[1] = base->no[1] / 32767.0f;
norm[2] = base->no[2] / 32767.0f;
+ /* Special handling for vertices of valence 3 */
+ if(d->valence[1] == 3 && d->x == d->sidetot - 1 && d->y == 0)
+ u = -1;
+ else if(d->valence[2] == 3 && d->x == d->sidetot - 1 && d->y == d->sidetot - 1)
+ u = v = -1;
+ else if(d->valence[3] == 3 && d->x == 0 && d->y == d->sidetot - 1)
+ v = -1;
+
/* If either u or v is -2, it's on a boundary. In this
case, back up by one row/column and use the same
vector as the preceeding sub-edge. */
More information about the Bf-blender-cvs
mailing list