[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16563] trunk/blender/source/blender/ blenkernel/intern/particle.c: Fix for [#17561] when i try to change the particle to hair I cant choose group or object as viz .
Janne Karhu
jhkarh at utu.fi
Tue Sep 16 23:16:32 CEST 2008
Revision: 16563
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16563
Author: jhk
Date: 2008-09-16 23:16:32 +0200 (Tue, 16 Sep 2008)
Log Message:
-----------
Fix for [#17561] when i try to change the particle to hair I cant choose group or object as viz.
-Partly reverted Genscher's previous fix on the issue and added the idea he had as a special case
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/particle.c
Modified: trunk/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle.c 2008-09-16 21:11:38 UTC (rev 16562)
+++ trunk/blender/source/blender/blenkernel/intern/particle.c 2008-09-16 21:16:32 UTC (rev 16563)
@@ -3850,7 +3850,7 @@
void psys_get_dupli_path_transform(Object *ob, ParticleSystem *psys, ParticleSystemModifierData *psmd, ParticleData *pa, ChildParticle *cpa, ParticleCacheKey *cache, float mat[][4], float *scale)
{
- float loc[3], nor[3], vec[3], len, obrotmat[4][4], qmat[4][4];
+ float loc[3], nor[3], vec[3], side[3], len, obrotmat[4][4], qmat[4][4];
float xvec[3] = {-1.0, 0.0, 0.0}, q[4];
VecSubf(vec, (cache+cache->steps-1)->co, cache->co);
@@ -3875,9 +3875,27 @@
Mat4MulMat4(mat, obrotmat, qmat);
}
else {
- Normalize(nor);
- Mat4One(mat);
- VECCOPY(mat[2], nor); // mat[2] is normal/direction
+ /* make sure that we get a proper side vector */
+ if(fabs(Inpf(nor,vec))>0.999999) {
+ if(fabs(Inpf(nor,xvec))>0.999999) {
+ nor[0] = 0.0f;
+ nor[1] = 1.0f;
+ nor[2] = 0.0f;
+ }
+ else {
+ nor[0] = 1.0f;
+ nor[1] = 0.0f;
+ nor[2] = 0.0f;
+ }
+ }
+ Crossf(side, nor, vec);
+ Normalize(side);
+ Crossf(nor, vec, side);
+
+ Mat4One(mat);
+ VECCOPY(mat[0], vec);
+ VECCOPY(mat[1], side);
+ VECCOPY(mat[2], nor);
}
*scale= len;
More information about the Bf-blender-cvs
mailing list