[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33415] branches/particles-2010/source/ blender: Added some more mesh custom data types.
Lukas Toenne
lukas.toenne at googlemail.com
Wed Dec 1 16:54:36 CET 2010
Revision: 33415
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33415
Author: lukastoenne
Date: 2010-12-01 16:54:35 +0100 (Wed, 01 Dec 2010)
Log Message:
-----------
Added some more mesh custom data types.
Modified Paths:
--------------
branches/particles-2010/source/blender/blenlib/BLI_math_vector.h
branches/particles-2010/source/blender/blenlib/intern/math_vector.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_mesh_data.c
Modified: branches/particles-2010/source/blender/blenlib/BLI_math_vector.h
===================================================================
--- branches/particles-2010/source/blender/blenlib/BLI_math_vector.h 2010-12-01 14:55:55 UTC (rev 33414)
+++ branches/particles-2010/source/blender/blenlib/BLI_math_vector.h 2010-12-01 15:54:35 UTC (rev 33415)
@@ -116,6 +116,7 @@
void interp_v3_v3v3v3v3(float p[3], const float v1[3], const float v2[3], const float v3[3], const float v4[3], const float w[4]);
void interp_v4_v4v4(float r[4], const float a[4], const float b[4], const float t);
void interp_v4_v4v4v4(float p[4], const float v1[4], const float v2[4], const float v3[4], const float w[3]);
+void interp_v4_v4v4v4v4(float p[4], const float v1[4], const float v2[4], const float v3[4], const float v4[4], const float w[4]);
void mid_v3_v3v3(float r[3], const float a[3], const float b[3]);
Modified: branches/particles-2010/source/blender/blenlib/intern/math_vector.c
===================================================================
--- branches/particles-2010/source/blender/blenlib/intern/math_vector.c 2010-12-01 14:55:55 UTC (rev 33414)
+++ branches/particles-2010/source/blender/blenlib/intern/math_vector.c 2010-12-01 15:54:35 UTC (rev 33415)
@@ -91,6 +91,14 @@
p[3] = v1[3]*w[0] + v2[3]*w[1] + v3[3]*w[2];
}
+void interp_v4_v4v4v4v4(float p[4], const float v1[4], const float v2[4], const float v3[4], const float v4[4], const float w[4])
+{
+ p[0] = v1[0]*w[0] + v2[0]*w[1] + v3[0]*w[2] + v4[0]*w[3];
+ p[1] = v1[1]*w[0] + v2[1]*w[1] + v3[1]*w[2] + v4[1]*w[3];
+ p[2] = v1[2]*w[0] + v2[2]*w[1] + v3[2]*w[2] + v4[2]*w[3];
+ p[3] = v1[3]*w[0] + v2[3]*w[1] + v3[3]*w[2] + v4[3]*w[3];
+}
+
void mid_v3_v3v3(float v[3], const float v1[3], const float v2[3])
{
v[0]= 0.5f*(v1[0] + v2[0]);
Modified: branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_mesh_data.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_mesh_data.c 2010-12-01 14:55:55 UTC (rev 33414)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_mesh_data.c 2010-12-01 15:54:35 UTC (rev 33415)
@@ -65,7 +65,9 @@
CDDMProperty cddm_properties[] = {
{ CD_MVERT, CD_MASK_MVERT, "Vertex Position", "", SOCK_VECTOR },
+ { CD_MCOL, CD_MASK_MCOL, "Vertex Color", "", SOCK_RGBA },
{ CD_NORMAL, CD_MASK_NORMAL, "Normal", "", SOCK_VECTOR },
+ { CD_TANGENT, CD_MASK_TANGENT, "Tangent", "", SOCK_VECTOR },
{ -1, 0, NULL, NULL, 0 } /* terminator */
};
@@ -144,6 +146,11 @@
for (i=0; i < node->totout; ++i) {
CDDMProperty *prop= (CDDMProperty*)args[i+5];
+
+ /* skip if derived mesh does not provide this data */
+ if (!prop->data)
+ continue;
+
switch (prop->cd) {
case CD_MVERT:
vec = SIM_OUTPUT_VECTOR(0, global_id);
@@ -168,6 +175,78 @@
case SIM_SPACE_OBJECT:
break;
}
+ break;
+
+ case CD_MCOL:
+ vec = SIM_OUTPUT_RGBA(0, global_id);
+ if (mf->v4) {
+ MCol *c1= (MCol*)prop->data+mf->v1;
+ MCol *c2= (MCol*)prop->data+mf->v2;
+ MCol *c3= (MCol*)prop->data+mf->v3;
+ MCol *c4= (MCol*)prop->data+mf->v4;
+ /* MCol is just four floats and can be interpreted as a float[4] */
+ interp_v4_v4v4v4v4(vec, (float*)c1, (float*)c2, (float*)c3, (float*)c4, weights);
+ }
+ else {
+ MCol *c1= (MCol*)prop->data+mf->v1;
+ MCol *c2= (MCol*)prop->data+mf->v2;
+ MCol *c3= (MCol*)prop->data+mf->v3;
+ /* MCol is just four floats and can be interpreted as a float[4] */
+ interp_v4_v4v4v4(vec, (float*)c1, (float*)c2, (float*)c3, weights);
+ }
+ break;
+
+ case CD_NORMAL:
+ vec = SIM_OUTPUT_VECTOR(0, global_id);
+ if (mf->v4) {
+ float *v1= (float*)prop->data+3*mf->v1;
+ float *v2= (float*)prop->data+3*mf->v2;
+ float *v3= (float*)prop->data+3*mf->v3;
+ float *v4= (float*)prop->data+3*mf->v4;
+ interp_v3_v3v3v3v3(vec, v1, v2, v3, v4, weights);
+ }
+ else {
+ float *v1= (float*)prop->data+3*mf->v1;
+ float *v2= (float*)prop->data+3*mf->v2;
+ float *v3= (float*)prop->data+3*mf->v3;
+ interp_v3_v3v3v3(vec, v1, v2, v3, weights);
+ }
+
+ switch (node->base->custom1) {
+ case SIM_SPACE_WORLD:
+ /* don't translate normals */
+ mul_mat3_m4_v3(ob->obmat, vec);
+ break;
+ case SIM_SPACE_OBJECT:
+ break;
+ }
+ break;
+
+ case CD_TANGENT:
+ vec = SIM_OUTPUT_VECTOR(0, global_id);
+ if (mf->v4) {
+ float *v1= (float*)prop->data+3*mf->v1;
+ float *v2= (float*)prop->data+3*mf->v2;
+ float *v3= (float*)prop->data+3*mf->v3;
+ float *v4= (float*)prop->data+3*mf->v4;
+ interp_v3_v3v3v3v3(vec, v1, v2, v3, v4, weights);
+ }
+ else {
+ float *v1= (float*)prop->data+3*mf->v1;
+ float *v2= (float*)prop->data+3*mf->v2;
+ float *v3= (float*)prop->data+3*mf->v3;
+ interp_v3_v3v3v3(vec, v1, v2, v3, weights);
+ }
+
+ switch (node->base->custom1) {
+ case SIM_SPACE_WORLD:
+ /* don't translate tangents */
+ mul_mat3_m4_v3(ob->obmat, vec);
+ break;
+ case SIM_SPACE_OBJECT:
+ break;
+ }
+ break;
}
}
}
More information about the Bf-blender-cvs
mailing list