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

Reply via email to