[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35839] trunk/blender/source/blender/ blenkernel/intern/particle_system.c: Bug fix: particles emitted from a moving emitter exploded with verlet integration

Janne Karhu jhkarh at gmail.com
Mon Mar 28 10:09:00 CEST 2011


Revision: 35839
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35839
Author:   jhk
Date:     2011-03-28 08:08:59 +0000 (Mon, 28 Mar 2011)
Log Message:
-----------
Bug fix: particles emitted from a moving emitter exploded with verlet integration
* Verlet integration didn't like moving emitters, so now the first step for newborn particles with verlet is actually done with euler integration.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/particle_system.c

Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c	2011-03-28 05:37:25 UTC (rev 35838)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c	2011-03-28 08:08:59 UTC (rev 35839)
@@ -2063,10 +2063,15 @@
 	float force[3],acceleration[3],impulse[3],dx[4][3],dv[4][3],oldpos[3];
 	float pa_mass= (part->flag & PART_SIZEMASS ? part->mass * pa->size : part->mass);
 	int i, steps=1;
+	int integrator = part->integrator;
+
+	copy_v3_v3(oldpos, pa->state.co);
 	
-	copy_v3_v3(oldpos, pa->state.co);
+	/* Verlet integration behaves strangely with moving emitters, so do first step with euler. */
+	if(pa->prev_state.time < 0.f && integrator == PART_INT_VERLET)
+		integrator = PART_INT_EULER;
 
-	switch(part->integrator){
+	switch(integrator){
 		case PART_INT_EULER:
 			steps=1;
 			break;
@@ -2100,7 +2105,7 @@
 		/* calculate next state */
 		add_v3_v3(states[i].vel, impulse);
 
-		switch(part->integrator){
+		switch(integrator){
 			case PART_INT_EULER:
 				madd_v3_v3v3fl(pa->state.co, states->co, states->vel, dtime);
 				madd_v3_v3v3fl(pa->state.vel, states->vel, acceleration, dtime);




More information about the Bf-blender-cvs mailing list