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