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. */ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs