[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15298] branches/soc-2008-nicholasbishop/ source/blender/blenkernel: Vertices in the base mesh now get displaced.

Nicholas Bishop nicholasbishop at gmail.com
Sat Jun 21 22:22:33 CEST 2008


Revision: 15298
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15298
Author:   nicholasbishop
Date:     2008-06-21 22:21:31 +0200 (Sat, 21 Jun 2008)

Log Message:
-----------
Vertices in the base mesh now get displaced.

Modified Paths:
--------------
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/subsurf_ccg.c

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h	2008-06-21 18:20:32 UTC (rev 15297)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h	2008-06-21 20:21:31 UTC (rev 15298)
@@ -91,6 +91,7 @@
 int MultiresDM_get_totlvl(struct DerivedMesh *);
 int MultiresDM_get_lvl(struct DerivedMesh *);
 int MultiresDM_get_totorfa(struct DerivedMesh *);
+int MultiresDM_get_totorco(struct DerivedMesh *);
 int MultiresDM_get_totored(struct DerivedMesh *);
 void MultiresDM_set_update(struct DerivedMesh *, void (*)(struct DerivedMesh*));
 
@@ -124,5 +125,6 @@
 void multires_displacer_weight(MultiresDisplacer *d, const float w);
 void multires_displacer_anchor(MultiresDisplacer *d, const int type, const int side_index);
 void multires_displacer_anchor_edge(MultiresDisplacer *d, const int, const int, const int);
+void multires_displacer_anchor_vert(MultiresDisplacer *d, const int);
 void multires_displacer_jump(MultiresDisplacer *d);
 void multires_displace(MultiresDisplacer *d, float out[3]);

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c	2008-06-21 18:20:32 UTC (rev 15297)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c	2008-06-21 20:21:31 UTC (rev 15298)
@@ -1241,6 +1241,11 @@
 
 }
 
+int MultiresDM_get_totorco(struct DerivedMesh *dm)
+{
+	return ((MultiresDM*)dm)->totorco;
+}
+
 void *MultiresDM_get_subco(DerivedMesh *dm)
 {
 	return ((MultiresDM*)dm)->subco;

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c	2008-06-21 18:20:32 UTC (rev 15297)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c	2008-06-21 20:21:31 UTC (rev 15298)
@@ -1536,6 +1536,20 @@
 	}
 }
 
+void multires_displacer_anchor_vert(MultiresDisplacer *d, const int v)
+{
+	const int e = d->sidetot - 1;
+	d->x = d->y = 0;
+	if(v == d->face->v2)
+		d->x = e;
+	else if(v == d->face->v3)
+		d->x = d->y = e;
+	else if(v == d->face->v4)
+		d->y = e;
+
+	d->type = 5;
+}
+
 void multires_displacer_jump(MultiresDisplacer *d)
 {
 	if(d->sidendx == 0) {
@@ -1681,6 +1695,17 @@
 				++d.subco;
 			}
 		}
+		
+		for(i = 0; i < MultiresDM_get_totorco(dm); ++i) {
+			IndexNode *n;
+			for(n = map[i].first; n; n = n->next) {
+				multires_displacer_init(&d, dm, n->index, 1);
+				multires_displacer_anchor_vert(&d, i);
+				multires_displace(&d, mvert->co);
+			}
+			++mvert;
+			++d.subco;
+		}
 	}
 }
 

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/subsurf_ccg.c	2008-06-21 18:20:32 UTC (rev 15297)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/subsurf_ccg.c	2008-06-21 20:21:31 UTC (rev 15298)
@@ -693,7 +693,23 @@
 
 		DM_copy_vert_data(dm, result, vertIdx, i, 1);
 		VecCopyf(mvert->co, ccgSubSurf_getVertData(ss, v));
+		if(mmd) {
+			int numFaces = ccgSubSurf_getVertNumFaces(ss, v);
+			int vertface;
 
+			VecCopyf(mr_orig, mvert->co);
+			mr_orig += 3;
+
+			multires_displacer_weight(&d, 1.0f / numFaces);
+			for(vertface = 0; vertface < numFaces; ++vertface) {
+				CCGFace *f = ccgSubSurf_getVertFace(ss, v, vertface);
+				int faceIdx = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(ss, f));
+				multires_displacer_init(&d, result, faceIdx, 0);
+				multires_displacer_anchor_vert(&d, vertIdx);
+				multires_displace(&d, mvert->co);
+			}
+		}
+
 		*((int*)ccgSubSurf_getVertUserData(ss, v)) = i;
 		*origIndex = ccgDM_getVertMapIndex(NULL, ss, v);
 		++mvert;





More information about the Bf-blender-cvs mailing list