示例#1
0
        /// <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);
        }
示例#2
0
        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);
        }
示例#4
0
        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);
        }