[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12922] trunk/blender/source/blender/src/ editparticle.c:
Brecht Van Lommel
brechtvanlommel at pandora.be
Mon Dec 17 12:20:51 CET 2007
Revision: 12922
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12922
Author: blendix
Date: 2007-12-17 12:20:51 +0100 (Mon, 17 Dec 2007)
Log Message:
-----------
Bugfix: particle add brush in perspective mode would sometimes
not add particles, view ray was wrong.
Modified Paths:
--------------
trunk/blender/source/blender/src/editparticle.c
Modified: trunk/blender/source/blender/src/editparticle.c
===================================================================
--- trunk/blender/source/blender/src/editparticle.c 2007-12-17 10:34:49 UTC (rev 12921)
+++ trunk/blender/source/blender/src/editparticle.c 2007-12-17 11:20:51 UTC (rev 12922)
@@ -2121,7 +2121,7 @@
int i, k, n = 0, totpart = psys->totpart;
short dmx = 0, dmy = 0;
short mx = mval[0] - curarea->winx / 2, my = mval[1] - curarea->winy / 2;
- float co1[3], co2[3], vec[4], min_d, imat[4][4], dx, dy;
+ float co1[3], co2[3], vec[4], min_d, imat[4][4];
float framestep, timestep = psys_get_timestep(psys->part);
short size = pset->brush[PE_BRUSH_ADD].size;
short size2 = size*size;
@@ -2151,20 +2151,22 @@
/* create intersection coordinates in view Z direction at mouse coordinates */
/* Thanks to who ever wrote the "Mouse Location 3D Space" tutorial in "Blender 3D: Blending Into Python/Cookbook". */
if(G.vd->persp){
- dx = G.vd->persmat[3][3] * (2.0f*(mx+dmx)/curarea->winx) - G.vd->persmat[3][0];
- dy = G.vd->persmat[3][3] * (2.0f*(my+dmy)/curarea->winy) - G.vd->persmat[3][1];
+ vec[0]= (2.0f*(mx+dmx)/curarea->winx);
+ vec[1]= (2.0f*(my+dmy)/curarea->winy);
+ vec[2]= -1.0f;
+ vec[3]= 1.0f;
- co2[0]=G.vd->persinv[0][0]*dx + G.vd->persinv[1][0]*dy;
- co2[1]=G.vd->persinv[0][1]*dx + G.vd->persinv[1][1]*dy;
- co2[2]=G.vd->persinv[0][2]*dx + G.vd->persinv[1][2]*dy;
+ Mat4MulVec4fl(G.vd->persinv, vec);
+ VecMulf(vec, 1.0f/vec[3]);
- VECCOPY(co1,G.vd->viewinv[3]);
+ VECCOPY(co1, G.vd->viewinv[3]);
+ VECSUB(vec, vec, co1);
+ Normalize(vec);
- VECSUB(vec,co2,co1)
-
- VECADDFAC(co2,co1,vec,1000.0f);
+ VECADDFAC(co1, G.vd->viewinv[3], vec, G.vd->near);
+ VECADDFAC(co2, G.vd->viewinv[3], vec, G.vd->far);
}
- else{
+ else {
vec[0] = 2.0f*(mx+dmx)/curarea->winx;
vec[1] = 2.0f*(my+dmy)/curarea->winy;
vec[2] = 0.0f;
More information about the Bf-blender-cvs
mailing list