浏览代码

LookAt: take up into account

lviguier 6 月之前
父节点
当前提交
49afbaac6b
共有 1 个文件被更改,包括 11 次插入4 次删除
  1. 11 4
      hrt/prefab/fx/LookAt.hx

+ 11 - 4
hrt/prefab/fx/LookAt.hx

@@ -39,12 +39,17 @@ class LookAtObject extends h3d.scene.Object {
 	}
 	}
 
 
 	override function calcAbsPos() {
 	override function calcAbsPos() {
-		if(target != null)
-			lookAtPos = target.getAbsPos().getPosition();
+		var up : h3d.Vector;
+		if(target != null) {
+			var abs = target.getAbsPos();
+			lookAtPos = abs.getPosition();
+			up = abs.up();
+		}
 		else {
 		else {
 			if(getScene() == null || getScene().camera == null) return;
 			if(getScene() == null || getScene().camera == null) return;
 			var cam = getScene().camera;
 			var cam = getScene().camera;
 			lookAtPos.load(definition.faceTargetForward ? this.getAbsPos().getPosition() + -1 * (cam.target - cam.pos) : cam.pos);
 			lookAtPos.load(definition.faceTargetForward ? this.getAbsPos().getPosition() + -1 * (cam.target - cam.pos) : cam.pos);
+			up = cam.up;
 		}
 		}
 
 
 		super.calcAbsPos();
 		super.calcAbsPos();
@@ -106,7 +111,7 @@ class LookAtObject extends h3d.scene.Object {
 				scale *= v.length();
 				scale *= v.length();
 			}
 			}
 
 
-			qRot.initDirection(deltaVec);
+			qRot.initDirection(deltaVec, up);
 			qRot.toMatrix(absPos);
 			qRot.toMatrix(absPos);
 			absPos._11 *= scale.x;
 			absPos._11 *= scale.x;
 			absPos._12 *= scale.x;
 			absPos._12 *= scale.x;
@@ -140,7 +145,9 @@ class LookAt extends Object3D {
 	}
 	}
 
 
 	override function makeObject(parent3d:h3d.scene.Object):h3d.scene.Object {
 	override function makeObject(parent3d:h3d.scene.Object):h3d.scene.Object {
-		return new LookAtObject(parent3d, this);
+		var obj = new LookAtObject(parent3d, this);
+		obj.name = this.name;
+		return obj;
 	}
 	}
 
 
 	#if editor
 	#if editor