[Bf-blender-cvs] [e5de6a8] hair_system: WIP inverse transform, still misbehaving

Antony Riakiotakis noreply at git.blender.org
Fri Aug 22 19:35:42 CEST 2014


Commit: e5de6a8b5d00c533fad9fa86075e38448b946709
Author: Antony Riakiotakis
Date:   Fri Aug 22 17:32:34 2014 +0200
Branches: hair_system
https://developer.blender.org/rBe5de6a8b5d00c533fad9fa86075e38448b946709

WIP inverse transform, still misbehaving

===================================================================

M	source/blender/blenkernel/intern/particle_system.c
M	source/blender/hair/HAIR_capi.cpp
M	source/blender/hair/HAIR_capi.h
M	source/blender/hair/intern/HAIR_scene.cpp
M	source/blender/hair/intern/HAIR_scene.h

===================================================================

diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index 9ee9413..bc2f619 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -4118,7 +4118,7 @@ static void do_hair_dynamics(ParticleSimulationData *sim)
 	psys->hair_out_dm->getVertCos(psys->hair_out_dm, deformedVerts);
 
 	if (psys->solver) {
-		HAIR_solver_get_derived_verts(psys->solver, psys, deformedVerts);				
+		HAIR_solver_get_derived_verts(psys->solver, psys, sim->ob, deformedVerts);				
 	}
 	//clothModifier_do(psys->clmd, sim->scene, sim->ob, dm, deformedVerts);
 
diff --git a/source/blender/hair/HAIR_capi.cpp b/source/blender/hair/HAIR_capi.cpp
index 88f6f6b..0c8c222 100644
--- a/source/blender/hair/HAIR_capi.cpp
+++ b/source/blender/hair/HAIR_capi.cpp
@@ -283,8 +283,8 @@ void HAIR_frame_iter_next(struct HAIR_FrameIterator *citer)
 	iter->next();
 }
 
-void HAIR_solver_get_derived_verts(struct HAIR_Solver *csolver, ParticleSystem *psys, float (*vertCoords)[3])
+void HAIR_solver_get_derived_verts(struct HAIR_Solver *csolver, ParticleSystem *psys, Object *ob, float (*vertCoords)[3])
 {
 	Solver *solver = (Solver *)csolver;
-	SceneConverter::apply_solver_data(solver->data(), psys, vertCoords);
+	SceneConverter::apply_solver_data(solver->data(), psys, ob, vertCoords);
 }
diff --git a/source/blender/hair/HAIR_capi.h b/source/blender/hair/HAIR_capi.h
index 96d2d45..d928b8f 100644
--- a/source/blender/hair/HAIR_capi.h
+++ b/source/blender/hair/HAIR_capi.h
@@ -60,7 +60,7 @@ void HAIR_solver_update_particle_externals(struct HAIR_Solver *solver, struct Sc
 void HAIR_solver_rebuild_rigidbodyworld(struct HAIR_Solver *solver, struct rbDynamicsWorld *world);
 void HAIR_solver_remove_from_rigidbodyworld(struct HAIR_Solver *solver, struct rbDynamicsWorld *world);
 /* get the final object space vertex data from the solver */
-void HAIR_solver_get_derived_verts(struct HAIR_Solver *solver, struct ParticleSystem *psys, float (*vertCoords)[3]);
+void HAIR_solver_get_derived_verts(struct HAIR_Solver *solver, struct ParticleSystem *psys, struct Object *ob, float (*vertCoords)[3]);
 
 
 void HAIR_solver_step(struct HAIR_Solver *solver, float time, float timestep);
diff --git a/source/blender/hair/intern/HAIR_scene.cpp b/source/blender/hair/intern/HAIR_scene.cpp
index 1e28213..475cc93 100644
--- a/source/blender/hair/intern/HAIR_scene.cpp
+++ b/source/blender/hair/intern/HAIR_scene.cpp
@@ -392,20 +392,26 @@ void SceneConverter::apply_solver_data(SolverData *data, Scene *scene, Object *o
 	}
 }
 
-void SceneConverter::apply_solver_data(SolverData *data, ParticleSystem *psys, float (*vertCoords)[3])
+void SceneConverter::apply_solver_data(SolverData *data, ParticleSystem *psys,  Object *ob, float (*vertCoords)[3])
 {
 	int i, k, pc = 0;
 	
+	invert_m4_m4(ob->imat, ob->obmat);
+	
 	for (i = 0; i < data->totcurves; i++) {
 		int part_pc = pc;
 		ParticleData *pa = psys->particles + i;
 		
 		for (k = 0; k < pa->totkey; k++) {
 			copy_v3_v3(vertCoords[part_pc + i + k + 1], (data->points + pc)->cur.co.data());
+	
+			/* convert back to object space from world space */
+			mul_m4_v3(ob->imat, vertCoords[part_pc + i + k + 1]);
+			
 			pc++;
 		}
 		
-		copy_v3_v3(vertCoords[part_pc + i], (data->points + part_pc)->cur.co.data());
+		copy_v3_v3(vertCoords[part_pc + i], vertCoords[part_pc + i + 1]);
 	}
 }
 
diff --git a/source/blender/hair/intern/HAIR_scene.h b/source/blender/hair/intern/HAIR_scene.h
index 7a24dab..cb4f60e 100644
--- a/source/blender/hair/intern/HAIR_scene.h
+++ b/source/blender/hair/intern/HAIR_scene.h
@@ -47,7 +47,7 @@ struct SceneConverter {
 	static void update_solver_data_externals(SolverData *data, SolverForces &force, Scene *scene, Object *ob, DerivedMesh *dm, ParticleSystem *hsys, float time);
 	
 	static void apply_solver_data(SolverData *data, Scene *scene, Object *ob, HairSystem *hsys);
-	static void apply_solver_data(SolverData *data, ParticleSystem *psys, float (*vertCoords)[3]);
+	static void apply_solver_data(SolverData *data, ParticleSystem *psys,  Object *ob, float (*vertCoords)[3]);
 	
 	static void sync_rigidbody_data(SolverData *data, const HairParams &params);
 };




More information about the Bf-blender-cvs mailing list