/// <summary> /// Build a rotation matrix from a quaternion /// </summary> /// <param name="q">the quaternion</param> /// <returns>A rotation matrix</returns> public static SCNMatrix4 Rotate(Quaterniond q) { Vector3d axis; double angle; SCNMatrix4 result; q.ToAxisAngle(out axis, out angle); CreateFromAxisAngle(axis, angle, out result); return(result); }
public virtual Quaterniond [] GetQuaterniondValues() { var count = ElementCount * TimeSampleCount; var timesArr = new Quaterniond [(int)count]; int typeSize = Marshal.SizeOf(typeof(Quaterniond)); unsafe { fixed(Quaterniond *arrptr = timesArr) MDLMemoryHelper.FetchValues(typeSize, (IntPtr)arrptr, count, _GetDoubleQuaternionArray); } return(timesArr); }
public virtual Quaterniond [] GetQuaterniondValues(double time) { var count = ElementCount; var timesArr = new Quaterniond [(int)count]; unsafe { int typeSize = sizeof(Quaterniond); fixed(Quaterniond *arrptr = timesArr) MDLMemoryHelper.FetchValues(typeSize, (IntPtr)arrptr, count, time, _GetDoubleQuaternionArray); } return(timesArr); }
public virtual Quaterniond [] GetQuaterniondValues(nuint maxCount) { var timesArr = new Quaterniond [(int)maxCount]; unsafe { int typeSize = sizeof(Quaterniond); fixed(Quaterniond *arrptr = timesArr) { var rv = MDLMemoryHelper.FetchValues(typeSize, (IntPtr)arrptr, maxCount, _GetDoubleQuaternionArray); Array.Resize(ref timesArr, (int)rv); } } return(timesArr); }