Revision: 17199
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17199
Author:   nicholasbishop
Date:     2008-10-26 22:15:08 +0100 (Sun, 26 Oct 2008)

Log Message:
-----------
For moving through displacements, use a 2D coord system based on vertex side 
total, not disp side total.

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-10-26 19:42:29 UTC (rev 17198)
+++ 
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c    
    2008-10-26 21:15:08 UTC (rev 17199)
@@ -572,7 +572,7 @@
        float (*mat_norms)[3];
 
        int spacing;
-       int sidetot;
+       int sidetot, disp_st;
        int sidendx;
        int type;
        int invert;
@@ -598,7 +598,8 @@
        d->mat_norms = MultiresDM_get_vertnorm(dm);
 
        d->spacing = pow(2, MultiresDM_get_totlvl(dm) - MultiresDM_get_lvl(dm));
-       d->sidetot = multires_side_tot[MultiresDM_get_totlvl(dm) - 1];
+       d->sidetot = multires_side_tot[MultiresDM_get_lvl(dm) - 1];
+       d->disp_st = multires_side_tot[MultiresDM_get_totlvl(dm) - 1];
        d->invert = invert;
 }
 
@@ -615,30 +616,30 @@
 
        if(type == 2) {
                if(side_index == 0)
-                       d->y -= d->spacing;
+                       d->y -= 1;
                else if(side_index == 1)
-                       d->x += d->spacing;
+                       d->x += 1;
                else if(side_index == 2)
-                       d->y += d->spacing;
+                       d->y += 1;
                else if(side_index == 3)
-                       d->x -= d->spacing;
+                       d->x -= 1;
        }
        else if(type == 3) {
                if(side_index == 0) {
-                       d->x -= d->spacing;
-                       d->y -= d->spacing;
+                       d->x -= 1;
+                       d->y -= 1;
                }
                else if(side_index == 1) {
-                       d->x += d->spacing;
-                       d->y -= d->spacing;
+                       d->x += 1;
+                       d->y -= 1;
                }
                else if(side_index == 2) {
-                       d->x += d->spacing;
-                       d->y += d->spacing;
-       }
+                       d->x += 1;
+                       d->y += 1;
+               }
                else if(side_index == 3) {
-                       d->x -= d->spacing;
-                       d->y += d->spacing;
+                       d->x -= 1;
+                       d->y += 1;
                }
        }
 
@@ -648,7 +649,7 @@
 
 static void multires_displacer_anchor_edge(MultiresDisplacer *d, int v1, int 
v2, int x)
 {
-       const int mov = d->spacing * x;
+       const int mov = x;
 
        d->type = 4;
 
@@ -704,20 +705,20 @@
 static void multires_displacer_jump(MultiresDisplacer *d)
 {
        if(d->sidendx == 0) {
-               d->x -= d->spacing;
+               d->x -= 1;
                d->y = d->ay;
        }
        else if(d->sidendx == 1) {
                d->x = d->ax;
-               d->y -= d->spacing;
+               d->y -= 1;
        }
        else if(d->sidendx == 2) {
-               d->x += d->spacing;
+               d->x += 1;
                d->y = d->ay;
        }
        else if(d->sidendx == 3) {
                d->x = d->ax;
-               d->y += d->spacing;
+               d->y += 1;
        }
 }
 
@@ -728,7 +729,7 @@
 
        if(!d->grid || !d->grid->disps) return;
 
-       data = d->grid->disps[d->y * d->sidetot + d->x];
+       data = d->grid->disps[(d->y * d->spacing) * d->disp_st + (d->x * 
d->spacing)];
 
        if(d->invert)
                VecSubf(disp, co, d->subco->co);
@@ -764,23 +765,23 @@
 
        if(d->type == 2) {
                if(d->sidendx == 0)
-                       d->y -= d->spacing;
+                       d->y -= 1;
                else if(d->sidendx == 1)
-                       d->x += d->spacing;
+                       d->x += 1;
                else if(d->sidendx == 2)
-                       d->y += d->spacing;
+                       d->y += 1;
                else if(d->sidendx == 3)
-                       d->x -= d->spacing;
+                       d->x -= 1;
        }
        else if(d->type == 3) {
                if(d->sidendx == 0)
-                       d->y -= d->spacing;
+                       d->y -= 1;
                else if(d->sidendx == 1)
-                       d->x += d->spacing;
+                       d->x += 1;
                else if(d->sidendx == 2)
-                       d->y += d->spacing;
+                       d->y += 1;
                else if(d->sidendx == 3)
-                       d->x -= d->spacing;
+                       d->x -= 1;
        }
 }
 
@@ -802,13 +803,15 @@
 
        for(i = 0; i < me->totface; ++i) {
                const int numVerts = mface[i].v4 ? 4 : 3;
-                       
+               
+               /* Center */
                multires_displacer_init(&d, dm, i, invert);
                multires_displacer_anchor(&d, 1, 0);
                multires_displace(&d, mvert->co);
                ++mvert;
                ++d.subco;
 
+               /* Cross */
                for(S = 0; S < numVerts; ++S) {
                        multires_displacer_anchor(&d, 2, S);
                        for(x = 1; x < gridFaces; ++x) {
@@ -818,6 +821,7 @@
                        }
                }
 
+               /* Quarters */
                for(S = 0; S < numVerts; S++) {
                        multires_displacer_anchor(&d, 3, S);
                        for(y = 1; y < gridFaces; y++) {


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to