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

Update gizmo ( always face the camera )

ShiroSmith 6 жил өмнө
parent
commit
eadee72ff9
1 өөрчлөгдсөн 15 нэмэгдсэн , 0 устгасан
  1. 15 0
      hide/view/l3d/Gizmo.hx

+ 15 - 0
hide/view/l3d/Gizmo.hx

@@ -60,6 +60,7 @@ class Gizmo extends h3d.scene.Object {
 			else {
 				hit.visible = false;
 			}
+
 			var mat = o.getMaterials()[0];
 			mat.props = h3d.mat.MaterialSetup.current.getDefaults("ui");
 			mat.mainPass.blend(SrcAlpha, OneMinusSrcAlpha);
@@ -236,6 +237,20 @@ class Gizmo extends h3d.scene.Object {
 		var ratio = 150 / engine.height;
 		gizmo.setScale(ratio * distToCam * Math.tan(cam.fovY * 0.5 * Math.PI / 180.0));
 
+		if( !moving ) {
+			var dir = cam.pos.sub(gpos);
+			dir = gizmo.globalToLocal(dir);
+			gizmo.getObjectByName("xAxis").setRotation(0, 0, dir.x < 0 ? Math.PI : 0);
+			gizmo.getObjectByName("yAxis").setRotation(0, 0, dir.y < 0 ? Math.PI : 0);
+			gizmo.getObjectByName("zAxis").setRotation(dir.z < 0 ? Math.PI : 0, 0, 0);
+			gizmo.getObjectByName("xy").setRotation(0, 0, dir.x < 0 ? dir.y < 0 ? Math.PI : Math.PI / 2.0 : dir.y < 0 ? -Math.PI / 2.0 : 0);
+			gizmo.getObjectByName("xz").setRotation(0, dir.z < 0 ? dir.x < 0 ? Math.PI : Math.PI / 2.0 : 0, dir.x < 0 ? dir.z < 0 ? 0 : Math.PI : 0);
+			gizmo.getObjectByName("yz").setRotation(dir.z < 0 ? dir.y < 0 ? Math.PI : -Math.PI / 2.0 : 0, 0, dir.y < 0 ? dir.z < 0 ? 0 : Math.PI : 0);
+			gizmo.getObjectByName("xRotate").setRotation(dir.z < 0 ? -Math.PI / 2.0 : 0, 0, dir.y < 0 ? Math.PI : 0);
+			gizmo.getObjectByName("yRotate").setRotation(0, dir.z < 0 ? Math.PI / 2.0 : 0, dir.x < 0 ? Math.PI : 0);
+			gizmo.getObjectByName("zRotate").setRotation(0, 0, dir.x < 0 ? dir.y < 0 ? Math.PI : Math.PI / 2.0 : dir.y < 0 ? -Math.PI / 2.0 : 0);
+		}
+
 		axisScale = K.isDown(K.ALT);
 		for(n in ["xRotate", "yRotate", "zRotate", "xy", "xz", "yz", "scale"]) {
 			gizmo.getObjectByName(n).visible = !axisScale;