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();
        }
예제 #2
0
 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;
 }
예제 #3
0
 public static float GetAngle(Quaternion q)
 {
     return (float)(2.0 * Math.Acos((double)q.n));
 }
예제 #4
0
 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;
 }
예제 #5
0
 public static Vector3 VRotate(Quaternion q, Vector3 v)
 {
     return (q * v * ~q).v;
 }
예제 #6
0
 public static Quaternion Rotate(Quaternion q1, Quaternion q2)
 {
     return q1 * q2 * ~q1;
 }