[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14078] trunk/blender/source/blender/ render/intern/source/convertblender.c: Temporary bugfix [#8474]: Smaller fluid objects had no velocity assigned for vectorblur usage.

Daniel Genrich daniel.genrich at gmx.net
Thu Mar 13 02:25:00 CET 2008


Revision: 14078
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14078
Author:   genscher
Date:     2008-03-13 02:24:59 +0100 (Thu, 13 Mar 2008)

Log Message:
-----------
Temporary bugfix [#8474]: Smaller fluid objects had no velocity assigned for vectorblur usage. All zero elements now get the average velocity assigned. I tried to fix the real source - but that seems to be somewhere in the fluids code not reachable by me

Modified Paths:
--------------
    trunk/blender/source/blender/render/intern/source/convertblender.c

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2008-03-12 22:01:57 UTC (rev 14077)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2008-03-13 01:24:59 UTC (rev 14078)
@@ -5172,7 +5172,7 @@
 	ObjectRen *obr= obi->obr;
 	Object *fsob= obr->ob;
 	VertRen *ver= NULL;
-	float *speed, div, zco[2];
+	float *speed, div, zco[2], avgvel[4] = {0.0, 0.0, 0.0, 0.0};
 	float zmulx= re->winx/2, zmuly= re->winy/2, len;
 	float winsq= re->winx*re->winy, winroot= sqrt(winsq);
 	int a, j;
@@ -5202,6 +5202,16 @@
 	else
 		Mat4CpyMat4(winmat, re->winmat);
 	
+	/* (bad) HACK calculate average velocity */
+	/* better solution would be fixing getVelocityAt() in intern/elbeem/intern/solver_util.cpp
+	so that also small drops/little water volumes return a velocity != 0. 
+	But I had no luck in fixing that function - DG */
+	for(a=0; a<obr->totvert; a++) {
+		for(j=0;j<3;j++) avgvel[j] += vverts[a].co[j];
+	}
+	for(j=0;j<3;j++) avgvel[j] /= (float)(obr->totvert);
+	
+	
 	for(a=0; a<obr->totvert; a++, vectors+=2) {
 		if((a & 255)==0)
 			ver= obr->vertnodes[a>>8].vert;
@@ -5213,6 +5223,14 @@
 		//fsvec[0] = fsvec[1] = fsvec[2] = fsvec[3] = 0.; fsvec[2] = 2.; // NT fixed test
 		for(j=0;j<3;j++) fsvec[j] = vverts[a].co[j];
 		
+		/* (bad) HACK insert average velocity if none is there (see previous comment */
+		if(fsvec[0] == fsvec[1] == fsvec[2] == 0.0)
+		{
+			fsvec[0] = avgvel[0];
+			fsvec[1] = avgvel[1];
+			fsvec[2] = avgvel[2];
+		}
+		
 		// transform (=rotate) to cam space
 		camco[0]= imat[0][0]*fsvec[0] + imat[0][1]*fsvec[1] + imat[0][2]*fsvec[2];
 		camco[1]= imat[1][0]*fsvec[0] + imat[1][1]*fsvec[1] + imat[1][2]*fsvec[2];





More information about the Bf-blender-cvs mailing list