[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17199] branches/soc-2008-nicholasbishop/ source/blender/blenkernel/intern/multires.c: For moving through displacements, use a 2D coord system based on vertex side total, not disp side total.

Nicholas Bishop nicholasbishop at gmail.com
Sun Oct 26 22:15:10 CET 2008


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++) {





More information about the Bf-blender-cvs mailing list