public static void GizmoInput(Vector2 Cursor, bool Left, bool Translate, bool Rotate, bool Scale, bool Local, bool Ctrl) { Cursor = ((Cursor / Camera.ActiveCamera.ViewportSize) * new Vector2(2) - Vector2.One) * new Vector2(1, -1); Vector3 RayDir = new Vector3(Cursor.X / Camera.ActiveCamera.Projection.M11, Cursor.Y / Camera.ActiveCamera.Projection.M22, -1); RayDir = Vector3.Normalize(RayDir); RayDir = Vector4.Transform(new Vector4(RayDir, 0), Camera.ActiveCamera.World).XYZ(); TinyGizmo.GizmoInput(RayDir, Left, Translate, Rotate, Scale, Local, Ctrl); }
public static bool Gizmo(/*string Name,*/ float Dt, ref Vector3 Pos, ref Quaternion Rot, ref Vector3 Scale, Vector3?Snapping = null, float ScreenScale = 25) { Camera Cam = Camera.ActiveCamera; TinyGizmo.GizmoBegin(Dt, Engine.WindowSize, Cam.Near, Cam.Far, Cam.VerticalFOV, Cam.Position, Cam.WorldForwardNormal, ScreenScale, Snapping ?? Vector3.Zero); Matrix3x3 RotMat = Matrix4x4.CreateFromQuaternion(Rot); bool Ret = TinyGizmo.Gizmo("GizmoName", ref Pos, ref RotMat, ref Scale); Rot = Quaternion.CreateFromRotationMatrix(RotMat); TinyGizmo.GizmoEnd(); return(Ret); }
static Immediate() { TinyGizmo.OnRender = (PrimType, Verts) => { Vector3[] Positions = Verts.Select((V) => V.Position.XYZ()).ToArray(); Vector4[] Colors = Verts.Select((V) => V.Color).ToArray(); if (PrimType == Im3dPrimitiveType.Triangles) { Triangles(Positions, Colors); } else if (PrimType == Im3dPrimitiveType.Lines) { Lines(Positions, Colors, Verts.Select((V) => V.Position.W).ToArray()); } else { Points(Positions, Colors, Verts.Select((V) => V.Position.W).ToArray()); } }; TinyGizmo.GizmoInit(); }