Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Tönne <lukas.toenne@gmail.com>2014-11-17 19:45:21 +0300
committerLukas Tönne <lukas.toenne@gmail.com>2015-01-20 11:30:08 +0300
commit64a4d4ed2564e8a0dad6bfc1117812b2feabbfa8 (patch)
treeb65dbcd81eeb2454083607cf88d536b2513e3eea /source/blender/modifiers/intern/MOD_particleinstance.c
parentbd033721c248a906a9734fa872ea7d075039aba9 (diff)
Fix for particle instance initial frames.
These were not orthonormal and tended to flip with changing hair direction, now use the particle hair matrix which is stable wrt. the mesh surface.
Diffstat (limited to 'source/blender/modifiers/intern/MOD_particleinstance.c')
-rw-r--r--source/blender/modifiers/intern/MOD_particleinstance.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/source/blender/modifiers/intern/MOD_particleinstance.c b/source/blender/modifiers/intern/MOD_particleinstance.c
index e58ec24f43b..fbb2e16a6a7 100644
--- a/source/blender/modifiers/intern/MOD_particleinstance.c
+++ b/source/blender/modifiers/intern/MOD_particleinstance.c
@@ -43,6 +43,7 @@
#include "BLI_utildefines.h"
#include "BKE_cdderivedmesh.h"
+#include "BKE_effect.h"
#include "BKE_global.h"
#include "BKE_lattice.h"
#include "BKE_modifier.h"
@@ -327,17 +328,11 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* Incrementally Rotating Frame (Bishop Frame) */
if (k == 0) {
+ float hairmat[4][4];
float mat[3][3];
- float temp[3] = {0.0f, 0.0f, 0.0f};
- temp[axis] = 1.0f;
- /* normal direction */
- copy_v3_v3(mat[0], state.vel);
- /* tangent from projecting axis onto the surface plane */
- project_v3_plane(mat[1], state.vel, temp);
- normalize_v3(mat[1]);
- /* cotangent */
- cross_v3_v3v3(mat[2], mat[0], mat[1]);
+ psys_mat_hair_to_global(sim.ob, sim.psmd->dm, sim.psys->part->from, pa, hairmat);
+ copy_m3_m4(mat, hairmat);
/* to quaternion */
mat3_to_quat(frame, mat);
@@ -355,7 +350,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
mul_qt_qtqt(frame, rot, frame);
copy_v3_v3(prev_dir, state.vel);
- }
+ }
copy_qt_qt(state.rot, frame);
#if 0