/// <summary> /// Read Keyframes of a certain type /// advance i /// </summary> /// <param name="data">Animation Byte array</param> /// <param name="i">Offset in the Byte Array. Will be advanced</param> /// <param name="keycount">Number of Keyframes</param> /// <param name="min">Scaling Min to pass to the Uint16ToFloat method</param> /// <param name="max">Scaling Max to pass to the Uint16ToFloat method</param> /// <returns></returns> public binBVHJointKey[] readKeys(byte[] data, ref int i, int keycount, float min, float max) { float x; float y; float z; /* * 17 255 <-- Time Code * 17 255 <-- Time Code * 255 255 <-- X * 127 127 <-- X * 255 255 <-- Y * 127 127 <-- Y * 213 213 <-- Z * 142 142 <---Z * */ binBVHJointKey[] m_keys = new binBVHJointKey[keycount]; for (int j = 0; j < keycount; j++) { binBVHJointKey pJKey = new binBVHJointKey(); if (!BitConverter.IsLittleEndian) { pJKey.time = Utils.UInt16ToFloat(EndianSwap(data, i, 2), 0, InPoint, OutPoint); i += 2; x = Utils.UInt16ToFloat(EndianSwap(data, i, 2), 0, min, max); i += 2; y = Utils.UInt16ToFloat(EndianSwap(data, i, 2), 0, min, max); i += 2; z = Utils.UInt16ToFloat(EndianSwap(data, i, 2), 0, min, max); i += 2; } else { pJKey.time = Utils.UInt16ToFloat(data, i, InPoint, OutPoint); i += 2; x = Utils.UInt16ToFloat(data, i, min, max); i += 2; y = Utils.UInt16ToFloat(data, i, min, max); i += 2; z = Utils.UInt16ToFloat(data, i, min, max); i += 2; } pJKey.key_element = new Vector3(x, y, z); m_keys[j] = pJKey; } return(m_keys); }
public static bool Equals(binBVHJointKey arr1, binBVHJointKey arr2) { return(arr1.time == arr2.time && arr1.key_element == arr2.key_element); }
public static bool Equals(binBVHJointKey[] arr1, binBVHJointKey[] arr2) { if (arr1.Length == arr2.Length) { for (int i = 0; i < arr1.Length; i++) if (!Equals(arr1[i], arr2[i])) return false; /* not same*/ return true; } return false; }
public static bool Equals(binBVHJointKey arr1, binBVHJointKey arr2) { return (arr1.time == arr2.time && arr1.key_element == arr2.key_element); }
/// <summary> /// Read Keyframes of a certain type /// advance i /// </summary> /// <param name="data">Animation Byte array</param> /// <param name="i">Offset in the Byte Array. Will be advanced</param> /// <param name="keycount">Number of Keyframes</param> /// <param name="min">Scaling Min to pass to the Uint16ToFloat method</param> /// <param name="max">Scaling Max to pass to the Uint16ToFloat method</param> /// <returns></returns> public binBVHJointKey[] readKeys(byte[] data, ref int i, int keycount, float min, float max) { float x; float y; float z; /* 17 255 <-- Time Code 17 255 <-- Time Code 255 255 <-- X 127 127 <-- X 255 255 <-- Y 127 127 <-- Y 213 213 <-- Z 142 142 <---Z */ binBVHJointKey[] m_keys = new binBVHJointKey[keycount]; for (int j = 0; j < keycount; j++) { binBVHJointKey pJKey = new binBVHJointKey(); if (!BitConverter.IsLittleEndian) { pJKey.time = Utils.UInt16ToFloat(EndianSwap(data, i, 2), 0, InPoint, OutPoint); i += 2; x = Utils.UInt16ToFloat(EndianSwap(data, i, 2), 0, min, max); i += 2; y = Utils.UInt16ToFloat(EndianSwap(data, i, 2), 0, min, max); i += 2; z = Utils.UInt16ToFloat(EndianSwap(data, i, 2), 0, min, max); i += 2; } else { pJKey.time = Utils.UInt16ToFloat(data, i, InPoint, OutPoint); i += 2; x = Utils.UInt16ToFloat(data, i, min, max); i += 2; y = Utils.UInt16ToFloat(data, i, min, max); i += 2; z = Utils.UInt16ToFloat(data, i, min, max); i += 2; } pJKey.key_element = new Vector3(x, y, z); m_keys[j] = pJKey; } return m_keys; }