[Bf-blender-cvs] [77b604a] soc-2014-remesh: Initial structures to compute the gradient field.
Alexander Pinzon Fernandez
noreply at git.blender.org
Sat Jun 21 02:27:34 CEST 2014
Commit: 77b604afa2de27c0f9930bc81e03341e310d1f64
Author: Alexander Pinzon Fernandez
Date: Fri Jun 20 18:53:00 2014 -0500
https://developer.blender.org/rB77b604afa2de27c0f9930bc81e03341e310d1f64
Initial structures to compute the gradient field.
===================================================================
M source/blender/modifiers/intern/MOD_quadremesh.c
===================================================================
diff --git a/source/blender/modifiers/intern/MOD_quadremesh.c b/source/blender/modifiers/intern/MOD_quadremesh.c
index 2d1e582..6eedcda 100644
--- a/source/blender/modifiers/intern/MOD_quadremesh.c
+++ b/source/blender/modifiers/intern/MOD_quadremesh.c
@@ -53,6 +53,8 @@ typedef struct LaplacianSystem {
int total_features;
char features_grp_name[64]; /* Vertex Group name */
float(*co)[3]; /* Original vertex coordinates */
+ float(*no)[3]; /* Original vertex normal */
+ float(*gf1)[3]; /* Gradient Field g1 */
int *constraints; /* Feature points constraints*/
float *weights; /* Feature points weights*/
float *U_field; /* Initial scalar field*/
@@ -90,6 +92,8 @@ static LaplacianSystem *initLaplacianSystem(int totalVerts, int totalEdges, int
BLI_strncpy(sys->features_grp_name, defgrpName, sizeof(sys->features_grp_name));
sys->faces = MEM_mallocN(sizeof(int[4]) * totalFaces, "QuadRemeshFaces");
sys->co = MEM_mallocN(sizeof(float[3]) * totalVerts, "QuadRemeshCoordinates");
+ sys->no = MEM_callocN(sizeof(float[3]) * totalVerts, "DeformNormals");
+ sys->gf1 = MEM_mallocN(sizeof(float[3]) * totalVerts, "QuadRemeshGradientField1");
sys->constraints = MEM_mallocN(sizeof(int) * totalVerts, "QuadRemeshConstraints");
sys->weights = MEM_mallocN(sizeof(float)* (totalVerts), "QuadRemeshWeights");
sys->U_field = MEM_mallocN(sizeof(float)* (totalVerts), "QuadRemeshUField");
@@ -100,9 +104,11 @@ static void deleteLaplacianSystem(LaplacianSystem *sys)
{
MEM_SAFE_FREE(sys->faces);
MEM_SAFE_FREE(sys->co);
+ MEM_SAFE_FREE(sys->no);
MEM_SAFE_FREE(sys->constraints);
MEM_SAFE_FREE(sys->weights);
MEM_SAFE_FREE(sys->U_field);
+ MEM_SAFE_FREE(sys->gf1);
if (sys->context) {
nlDeleteContext(sys->context);
}
@@ -128,6 +134,20 @@ static void initLaplacianMatrix(LaplacianSystem *sys)
has_4_vert = vidf[3] ? 1 : 0;
i = has_4_vert ? 4 : 3;
+
+ if (has_4_vert) {
+ normal_quad_v3(no, sys->co[idv1], sys->co[idv2], sys->co[idv3], sys->co[idv4]);
+ add_v3_v3(sys->no[idv4], no);
+ i = 4;
+ }
+ else {
+ normal_tri_v3(no, sys->co[idv1], sys->co[idv2], sys->co[idv3]);
+ i = 3;
+ }
+ add_v3_v3(sys->no[idv1], no);
+ add_v3_v3(sys->no[idv2], no);
+ add_v3_v3(sys->no[idv3], no);
+
for (j = 0; j < i; j++) {
idv1 = vidf[j];
@@ -229,6 +249,17 @@ static void laplacianDeformPreview(LaplacianSystem *sys)
#endif
}
+static computeGradientFieldU1(LaplacianSystem * sys){
+ float(*AG)[3]; /* Gradient Field g1 */
+ float v1[3], v2[3], v3[3], v4[3], no[3];
+ float w2, w3, w4;
+ int i, j, fi;
+ bool has_4_vert;
+ unsigned int idv1, idv2, idv3, idv4;
+ AG = MEM_mallocN(sizeof(float[3]) * sys->total_faces * 3, "QuadRemeshAG");
+
+}
+
static LaplacianSystem * initSystem(QuadRemeshModifierData *qmd, Object *ob, DerivedMesh *dm,
float(*vertexCos)[3], int numVerts)
{
More information about the Bf-blender-cvs
mailing list