2
0
Эх сурвалжийг харах

Fix gizmo movement when only one axis is used

Tom SPIRA 6 жил өмнө
parent
commit
bbe4114f70
1 өөрчлөгдсөн 12 нэмэгдсэн , 8 устгасан
  1. 12 8
      hide/view/l3d/Gizmo.hx

+ 12 - 8
hide/view/l3d/Gizmo.hx

@@ -122,20 +122,23 @@ class Gizmo extends h3d.scene.Object {
 		intOverlay = new h2d.Interactive(40000, 40000, scene.s2d);
 		intOverlay.onPush = function(e) finishMove();
 		switch(mode) {
-			case MoveX: norm.x = 0;
-			case MoveY: norm.y = 0;
-			case MoveZ: norm.z = 0;
 			case MoveXY: norm.set(0, 0, 1);
 			case MoveYZ: norm.set(1, 0, 0);
 			case MoveZX: norm.set(0, 1, 0);
 			case RotateX: norm.set(1, 0, 0);
 			case RotateY: norm.set(0, 1, 0);
 			case RotateZ: norm.set(0, 0, 1);
-			case Scale: norm.z = 0;
+			default:
+		}
+
+		if (mode == MoveX || mode == MoveY || mode == MoveZ || mode == Scale) {
+			var point = scene.s3d.camera.rayFromScreen(scene.s2d.mouseX, scene.s2d.mouseY).getDir();
+			dragPlane = h3d.col.Plane.fromNormalPoint(point, startPos);
+		} else {
+			norm.normalize();
+			norm.transform3x3(startMat);
+			dragPlane = h3d.col.Plane.fromNormalPoint(norm, startPos);
 		}
-		norm.normalize();
-		norm.transform3x3(startMat);
-		dragPlane = h3d.col.Plane.fromNormalPoint(norm, startPos);
 		var startDragPt = getDragPoint(dragPlane);
 		updateFunc = function(dt) {
 			var curPt = getDragPoint(dragPlane);
@@ -156,7 +159,8 @@ class Gizmo extends h3d.scene.Object {
 				var step = K.isDown(K.SHIFT) ? moveStep / 2.0 : moveStep;
 				return hxd.Math.round(m / step) * step;
 			}
-
+			trace(startMat);
+			trace(delta);
 			if(mode == MoveX || mode == MoveXY || mode == MoveZX) vec.x = moveSnap(delta.dot(startMat.front().toPoint()));
 			if(mode == MoveY || mode == MoveYZ || mode == MoveXY) vec.y = moveSnap(delta.dot(startMat.right().toPoint()));
 			if(mode == MoveZ || mode == MoveZX || mode == MoveYZ) vec.z = moveSnap(delta.dot(startMat.up().toPoint()));