[Bf-blender-cvs] [a944cf8] strand_gpu: Eval function to get a location and normal vector from mesh samples.
Lukas Tönne
noreply at git.blender.org
Tue Jul 5 09:56:16 CEST 2016
Commit: a944cf84509029bf8effa4aee9023f4fc5a658ac
Author: Lukas Tönne
Date: Mon Mar 3 14:10:58 2014 +0100
Branches: strand_gpu
https://developer.blender.org/rBa944cf84509029bf8effa4aee9023f4fc5a658ac
Eval function to get a location and normal vector from mesh samples.
===================================================================
M source/blender/blenkernel/BKE_mesh_sample.h
M source/blender/blenkernel/intern/mesh_sample.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_mesh_sample.h b/source/blender/blenkernel/BKE_mesh_sample.h
index 084f477..8d1ce65 100644
--- a/source/blender/blenkernel/BKE_mesh_sample.h
+++ b/source/blender/blenkernel/BKE_mesh_sample.h
@@ -25,10 +25,14 @@
* \ingroup bke
*/
+struct DerivedMesh;
+
struct MSurfaceSample;
/* Evaluate */
+void BKE_mesh_sample_eval(struct DerivedMesh *dm, const struct MSurfaceSample *sample, float loc[3], float nor[3]);
+
/* Iterators */
diff --git a/source/blender/blenkernel/intern/mesh_sample.c b/source/blender/blenkernel/intern/mesh_sample.c
index 53b9231..49e4486 100644
--- a/source/blender/blenkernel/intern/mesh_sample.c
+++ b/source/blender/blenkernel/intern/mesh_sample.c
@@ -41,6 +41,46 @@
/* Evaluate */
+void BKE_mesh_sample_eval(DerivedMesh *dm, const MSurfaceSample *sample, float loc[3], float nor[3])
+{
+ MVert *mverts = dm->getVertArray(dm);
+ MVert *v1, *v2, *v3, *v4;
+ MFace *mfaces = dm->getTessFaceArray(dm);
+ int totfaces = dm->getNumTessFaces(dm);
+ MFace *mface = &mfaces[sample->orig_face];
+ float vnor[3];
+
+ zero_v3(loc);
+ zero_v3(nor);
+
+ if (sample->orig_face >= totfaces)
+ return;
+
+ v1 = &mverts[mface->v1];
+ v2 = &mverts[mface->v2];
+ v3 = &mverts[mface->v3];
+
+ madd_v3_v3fl(loc, v1->co, sample->orig_weights[0]);
+ madd_v3_v3fl(loc, v2->co, sample->orig_weights[1]);
+ madd_v3_v3fl(loc, v3->co, sample->orig_weights[2]);
+
+ normal_short_to_float_v3(vnor, v1->no);
+ madd_v3_v3fl(nor, vnor, sample->orig_weights[0]);
+ normal_short_to_float_v3(vnor, v2->no);
+ madd_v3_v3fl(nor, vnor, sample->orig_weights[1]);
+ normal_short_to_float_v3(vnor, v3->no);
+ madd_v3_v3fl(nor, vnor, sample->orig_weights[2]);
+
+ if (mface->v4) {
+ v4 = &mverts[mface->v4];
+
+ madd_v3_v3fl(loc, v4->co, sample->orig_weights[3]);
+
+ normal_short_to_float_v3(vnor, v4->no);
+ madd_v3_v3fl(nor, vnor, sample->orig_weights[3]);
+ }
+}
+
/* Iterators */
More information about the Bf-blender-cvs
mailing list