Browse Source

Emitter: fix rotation and alignment glitches in world space

trethaller 6 years ago
parent
commit
6d1a48d775
1 changed files with 4 additions and 3 deletions
  1. 4 3
      hide/prefab/fx/Emitter.hx

+ 4 - 3
hide/prefab/fx/Emitter.hx

@@ -147,9 +147,9 @@ private class ParticleInstance extends h3d.scene.Object {
 						case Local:mat.multiply3x4(mat, emitter.invTransform);
 						case Local:mat.multiply3x4(mat, emitter.invTransform);
 						case World:
 						case World:
 					}
 					}
-					var q = new h3d.Quat();
-					q.initRotateMatrix(mat);
-					setRotationQuat(q);
+					getRotationQuat().initRotateMatrix(mat);
+					getRotationQuat().normalize();
+					posChanged = true;
 				}
 				}
 				case Axis: {
 				case Axis: {
 					var absChildMat = new h3d.Matrix();
 					var absChildMat = new h3d.Matrix();
@@ -352,6 +352,7 @@ class EmitterObject extends h3d.scene.Object {
 					part.baseMat = particleTemplate.getTransform();
 					part.baseMat = particleTemplate.getTransform();
 					var worldQuat = new h3d.Quat();
 					var worldQuat = new h3d.Quat();
 					worldQuat.initRotateMatrix(getAbsPos());
 					worldQuat.initRotateMatrix(getAbsPos());
+					worldQuat.normalize();
 					tmpq.multiply(tmpq, worldQuat);
 					tmpq.multiply(tmpq, worldQuat);
 					part.setRotationQuat(tmpq);
 					part.setRotationQuat(tmpq);
 					part.orientation = tmpq.clone();
 					part.orientation = tmpq.clone();