public void Import(BinaryReader Reader) { Position = new Vector3(Reader.ReadSingle(), Reader.ReadSingle(), Reader.ReadSingle()); Rotation = new Quaternion(Reader.ReadSingle(), Reader.ReadSingle(), Reader.ReadSingle(), Reader.ReadSingle()); Scaling = new Vector3(Reader.ReadSingle(), Reader.ReadSingle(), Reader.ReadSingle()); UInt32 NameLen = Reader.ReadUInt32(); Name = Encoding.ASCII.GetString(Reader.ReadBytes((int)NameLen)); MirrorIndex = Reader.ReadInt32(); ParentIndex = Reader.ReadInt32(); NameHash = Reader.ReadUInt32(); Flags = Reader.ReadUInt32(); }
public static Vector3 GetAxis(Quaternion q) { Vector3 vec = q.v; float num = vec.Length(); if (num <= 0.0001f) { return new Vector3(0f, 0f, 0f); } return vec / num; }
public static float GetAngle(Quaternion q) { return (float)(2.0 * Math.Acos((double)q.n)); }
public static Quaternion MakeFromEulerAngles(float x, float y, float z) { double num = (double)x; double num2 = (double)y; double num3 = (double)z; double num4 = Math.Cos(0.5 * num3); double num5 = Math.Cos(0.5 * num2); double num6 = Math.Cos(0.5 * num); double num7 = Math.Sin(0.5 * num3); double num8 = Math.Sin(0.5 * num2); double num9 = Math.Sin(0.5 * num); double num10 = num4 * num5; double num11 = num7 * num8; double num12 = num4 * num8; double num13 = num7 * num5; Quaternion result = new Quaternion((float)(num10 * num9 - num11 * num6), (float)(num12 * num6 + num13 * num9), (float)(num13 * num6 - num12 * num9), (float)(num10 * num6 + num11 * num9)); return result; }
public static Vector3 VRotate(Quaternion q, Vector3 v) { return (q * v * ~q).v; }
public static Quaternion Rotate(Quaternion q1, Quaternion q2) { return q1 * q2 * ~q1; }