[Bf-blender-cvs] [1d0f1a1] master: Fix T44593: particle volume distribution not working with large meshes.

Brecht Van Lommel noreply at git.blender.org
Tue May 5 21:45:12 CEST 2015


Commit: 1d0f1a1ec9c098f3b1307b13b0c98edbca5469df
Author: Brecht Van Lommel
Date:   Tue May 5 21:39:34 2015 +0200
Branches: master
https://developer.blender.org/rB1d0f1a1ec9c098f3b1307b13b0c98edbca5469df

Fix T44593: particle volume distribution not working with large meshes.

===================================================================

M	source/blender/blenkernel/intern/particle_distribute.c

===================================================================

diff --git a/source/blender/blenkernel/intern/particle_distribute.c b/source/blender/blenkernel/intern/particle_distribute.c
index 4a2540e..28a2d05 100644
--- a/source/blender/blenkernel/intern/particle_distribute.c
+++ b/source/blender/blenkernel/intern/particle_distribute.c
@@ -490,7 +490,7 @@ static void distribute_from_faces_exec(ParticleTask *thread, ParticleData *pa, i
 static void distribute_from_volume_exec(ParticleTask *thread, ParticleData *pa, int p) {
 	ParticleThreadContext *ctx= thread->ctx;
 	DerivedMesh *dm= ctx->dm;
-	float *v1, *v2, *v3, *v4, nor[3], co1[3], co2[3];
+	float *v1, *v2, *v3, *v4, nor[3], co[3];
 	float cur_d, min_d, randu, randv;
 	int distr= ctx->distr;
 	int i, intersect, tot;
@@ -530,14 +530,12 @@ static void distribute_from_volume_exec(ParticleTask *thread, ParticleData *pa,
 	/* experimental */
 	tot=dm->getNumTessFaces(dm);
 	
-	psys_interpolate_face(mvert,mface,0,0,pa->fuv,co1,nor,0,0,0,0);
+	psys_interpolate_face(mvert,mface,0,0,pa->fuv,co,nor,0,0,0,0);
 	
 	normalize_v3(nor);
-	mul_v3_fl(nor,-100.0);
+	negate_v3(nor);
 	
-	add_v3_v3v3(co2,co1,nor);
-	
-	min_d=2.0;
+	min_d=FLT_MAX;
 	intersect=0;
 	
 	for (i=0,mface=dm->getTessFaceDataArray(dm,CD_MFACE); i<tot; i++,mface++) {
@@ -547,20 +545,20 @@ static void distribute_from_volume_exec(ParticleTask *thread, ParticleData *pa,
 		v2=mvert[mface->v2].co;
 		v3=mvert[mface->v3].co;
 		
-		if (isect_line_tri_v3(co1, co2, v2, v3, v1, &cur_d, 0)) {
+		if (isect_ray_tri_v3(co, nor, v2, v3, v1, &cur_d, 0)) {
 			if (cur_d<min_d) {
 				min_d=cur_d;
-				pa->foffset=cur_d*50.0f; /* to the middle of volume */
+				pa->foffset=cur_d*0.5f; /* to the middle of volume */
 				intersect=1;
 			}
 		}
 		if (mface->v4) {
 			v4=mvert[mface->v4].co;
 			
-			if (isect_line_tri_v3(co1, co2, v4, v1, v3, &cur_d, 0)) {
+			if (isect_ray_tri_v3(co, nor, v4, v1, v3, &cur_d, 0)) {
 				if (cur_d<min_d) {
 					min_d=cur_d;
-					pa->foffset=cur_d*50.0f; /* to the middle of volume */
+					pa->foffset=cur_d*0.5f; /* to the middle of volume */
 					intersect=1;
 				}
 			}




More information about the Bf-blender-cvs mailing list