コード例 #1
0
ファイル: GLKQuaternion.cs プロジェクト: Monobjc/monobjc
		/// <summary>
		/// <para>Returns the sum of two quaternions.</para>
		/// <para>Original signature is 'GLKQuaternion GLKQuaternionAdd ( GLKQuaternion quaternionLeft, GLKQuaternion quaternionRight );'</para>
		/// <para>Available in OS X x0.8 and later.</para>
		/// </summary>
		/// <param name="quaternionLeft">MISSING</param>
		/// <param name="quaternionRight">MISSING</param>
		/// <returns>A new quaternion.</returns>
		public static GLKQuaternion Add (GLKQuaternion quaternionLeft, GLKQuaternion quaternionRight)
		{
			GLKQuaternion q = new GLKQuaternion (quaternionLeft.x + quaternionRight.x,
				quaternionLeft.y + quaternionRight.y,
				quaternionLeft.z + quaternionRight.z,
				quaternionLeft.w + quaternionRight.w);
			return q;
		}
コード例 #2
0
ファイル: GLKQuaternion.cs プロジェクト: Monobjc/monobjc
		/// <summary>
		/// <para>Returns an inverse of a quaternion.</para>
		/// <para>Original signature is 'GLKQuaternion GLKQuaternionInvert ( GLKQuaternion quaternion );'</para>
		/// <para>Available in OS X x0.8 and later.</para>
		/// </summary>
		/// <param name="quaternion">MISSING</param>
		/// <returns>A new quaternion that is the inverse of the source quaternion.</returns>
		public static GLKQuaternion Invert (GLKQuaternion quaternion)
		{
			float scale = 1.0f / (quaternion.x * quaternion.x + 
				quaternion.y * quaternion.y +
				quaternion.z * quaternion.z +
				quaternion.w * quaternion.w);
			GLKQuaternion q = new GLKQuaternion (-quaternion.x * scale, -quaternion.y * scale, -quaternion.z * scale, quaternion.w * scale);
			return q;
		}
コード例 #3
0
ファイル: GLKMatrix4.cs プロジェクト: Monobjc/monobjc
		/// <summary>
		/// <para>Returns a 4x4 matrix that performs a rotation based on a quaternion.</para>
		/// <para>Original signature is 'GLKMatrix4 GLKMatrix4MakeWithQuaternion ( GLKQuaternion quaternion );'</para>
		/// <para>Available in OS X v10.8 and later.</para>
		/// </summary>
		/// <param name="quaternion">MISSING</param>
		/// <returns>A new matrix that provides an equivalent rotation to that stored in the quaternion.</returns>
		public static GLKMatrix4 MakeWithQuaternion (GLKQuaternion quaternion)
		{
			quaternion = GLKQuaternion.Normalize (quaternion);
			
			float x = quaternion.x;
			float y = quaternion.y;
			float z = quaternion.z;
			float w = quaternion.w;
			
			float _2x = x + x;
			float _2y = y + y;
			float _2z = z + z;
			float _2w = w + w;
			
			GLKMatrix4 m = new GLKMatrix4 (1.0f - _2y * y - _2z * z,
				_2x * y + _2w * z,
				_2x * z - _2w * y,
				0.0f,
				_2x * y - _2w * z,
				1.0f - _2x * x - _2z * z,
				_2y * z + _2w * x,
				0.0f,
				_2x * z + _2w * y,
				_2y * z - _2w * x,
				1.0f - _2x * x - _2y * y,
				0.0f,
				0.0f,
				0.0f,
				0.0f,
				1.0f);
			
			return m;
		}
コード例 #4
0
ファイル: GLKQuaternion.cs プロジェクト: Monobjc/monobjc
		/// <summary>
		/// <para>Returns the length of a quaternion.</para>
		/// <para>Original signature is 'float GLKQuaternionLength ( GLKQuaternion quaternion );'</para>
		/// <para>Available in OS X x0.8 and later.</para>
		/// </summary>
		/// <param name="quaternion">MISSING</param>
		/// <returns>The length of the quaternion.</returns>
		public static float Length (GLKQuaternion quaternion)
		{
			return (float)Math.Sqrt (quaternion.x * quaternion.x +
				quaternion.y * quaternion.y +
				quaternion.z * quaternion.z +
				quaternion.w * quaternion.w);
		}
コード例 #5
0
ファイル: GLKQuaternion.cs プロジェクト: Monobjc/monobjc
		/// <summary>
		/// <para>Returns the conjugate of a quaternion.</para>
		/// <para>Original signature is 'GLKQuaternion GLKQuaternionConjugate ( GLKQuaternion quaternion );'</para>
		/// <para>Available in OS X x0.8 and later.</para>
		/// </summary>
		/// <param name="quaternion">MISSING</param>
		/// <returns>A new quaternion that is the conjugate of the source quaternion.</returns>
		public static GLKQuaternion Conjugate (GLKQuaternion quaternion)
		{
			GLKQuaternion q = new GLKQuaternion (-quaternion.x, -quaternion.y, -quaternion.z, quaternion.w);
			return q;
		}
コード例 #6
0
ファイル: GLKQuaternion.cs プロジェクト: Monobjc/monobjc
		/// <summary>
		/// <para>Returns a new vector calculated by applying a quaternion rotation to a vector.</para>
		/// <para>Original signature is 'GLKVector4 GLKQuaternionRotateVector4 ( GLKQuaternion quaternion, GLKVector4 vector );'</para>
		/// <para>Available in OS X x0.8 and later.</para>
		/// </summary>
		/// <param name="quaternion">MISSING</param>
		/// <param name="vector">MISSING</param>
		/// <returns>A new vector.</returns>
		public static GLKVector4 RotateVector4 (GLKQuaternion quaternion, GLKVector4 vector)
		{
			GLKQuaternion rotatedQuaternion = Make (vector.x, vector.y, vector.z, 0.0f);
			rotatedQuaternion = Multiply (Multiply (quaternion, rotatedQuaternion), Invert (quaternion));
			return GLKVector4.Make (rotatedQuaternion.x, rotatedQuaternion.y, rotatedQuaternion.z, vector.w);
		}
コード例 #7
0
ファイル: GLKQuaternion.cs プロジェクト: Monobjc/monobjc
		/// <summary>
		/// <para>Returns the difference between two quaternions.</para>
		/// <para>Original signature is 'GLKQuaternion GLKQuaternionSubtract ( GLKQuaternion quaternionLeft, GLKQuaternion quaternionRight );'</para>
		/// <para>Available in OS X x0.8 and later.</para>
		/// </summary>
		/// <param name="quaternionLeft">MISSING</param>
		/// <param name="quaternionRight">MISSING</param>
		/// <returns>A new quaternion.</returns>
		public static GLKQuaternion Subtract (GLKQuaternion quaternionLeft, GLKQuaternion quaternionRight)
		{
			GLKQuaternion q = new GLKQuaternion (quaternionLeft.x - quaternionRight.x,
                        quaternionLeft.y - quaternionRight.y,
                        quaternionLeft.z - quaternionRight.z,
                        quaternionLeft.w - quaternionRight.w);
			return q;
		}
コード例 #8
0
ファイル: GLKQuaternion.cs プロジェクト: Monobjc/monobjc
		/// <summary>
		/// <para>Returns a normalized version of a quaternion.</para>
		/// <para>Original signature is 'GLKQuaternion GLKQuaternionNormalize ( GLKQuaternion quaternion );'</para>
		/// <para>Available in OS X x0.8 and later.</para>
		/// </summary>
		/// <param name="quaternion">MISSING</param>
		/// <returns>A new quaternion, normalized to have a length of 1.0.</returns>
		public static GLKQuaternion Normalize (GLKQuaternion quaternion)
		{
			float scale = 1.0f / Length (quaternion);
			GLKQuaternion q = new GLKQuaternion (quaternion.x * scale, quaternion.y * scale, quaternion.z * scale, quaternion.w * scale);
			return q;
		}
コード例 #9
0
ファイル: GLKQuaternion.cs プロジェクト: Monobjc/monobjc
		/// <summary>
		/// <para>Returns the product of two quaternions.</para>
		/// <para>Original signature is 'GLKQuaternion GLKQuaternionMultiply ( GLKQuaternion quaternionLeft, GLKQuaternion quaternionRight );'</para>
		/// <para>Available in OS X x0.8 and later.</para>
		/// </summary>
		/// <param name="quaternionLeft">MISSING</param>
		/// <param name="quaternionRight">MISSING</param>
		/// <returns>A new quaternion.</returns>
		public static GLKQuaternion Multiply (GLKQuaternion quaternionLeft, GLKQuaternion quaternionRight)
		{
			GLKQuaternion q = new GLKQuaternion (quaternionLeft.w * quaternionRight.x +
				quaternionLeft.x * quaternionRight.w +
				quaternionLeft.y * quaternionRight.z -
				quaternionLeft.z * quaternionRight.y,
        
				quaternionLeft.w * quaternionRight.y +
				quaternionLeft.y * quaternionRight.w +
				quaternionLeft.z * quaternionRight.x -
				quaternionLeft.x * quaternionRight.z,
        
				quaternionLeft.w * quaternionRight.z +
				quaternionLeft.z * quaternionRight.w +
				quaternionLeft.x * quaternionRight.y -
				quaternionLeft.y * quaternionRight.x,
        
				quaternionLeft.w * quaternionRight.w -
				quaternionLeft.x * quaternionRight.x -
				quaternionLeft.y * quaternionRight.y -
				quaternionLeft.z * quaternionRight.z);
			return q;
		}
コード例 #10
0
ファイル: GLKQuaternion.cs プロジェクト: Monobjc/monobjc
		/// <summary>
		/// <para>Returns a quaternion created from a vector and a scalar.</para>
		/// <para>Original signature is 'GLKQuaternion GLKQuaternionMakeWithVector3 ( GLKVector3 vector, float scalar );'</para>
		/// <para>Available in OS X x0.8 and later.</para>
		/// </summary>
		/// <param name="vector">MISSING</param>
		/// <param name="scalar">MISSING</param>
		/// <returns>A new quaternion.</returns>
		public static GLKQuaternion MakeWithVector3 (GLKVector3 vector, float scalar)
		{
			GLKQuaternion q = new GLKQuaternion (vector.x, vector.y, vector.z, scalar);
			return q;
		}
コード例 #11
0
ファイル: GLKQuaternion.cs プロジェクト: Monobjc/monobjc
		/// <summary>
		/// <para>Creates a quaternion that represents a rotation around an axis.</para>
		/// <para>Original signature is 'GLKQuaternion GLKQuaternionMakeWithAngleAndAxis ( float radians, float x, float y, float z );'</para>
		/// <para>Available in OS X x0.8 and later.</para>
		/// </summary>
		/// <param name="radians">MISSING</param>
		/// <param name="x">MISSING</param>
		/// <param name="y">MISSING</param>
		/// <param name="z">MISSING</param>
		/// <returns>A new quaternion.</returns>
		public static GLKQuaternion MakeWithAngleAndAxis (float radians, float x, float y, float z)
		{
			float halfAngle = radians * 0.5f;
			float scale = (float)Math.Sin (halfAngle);
			GLKQuaternion q = new GLKQuaternion (scale * x, scale * y, scale * z, (float)Math.Cos (halfAngle));
			return q;
		}
コード例 #12
0
ファイル: GLKQuaternion.cs プロジェクト: Monobjc/monobjc
		/// <summary>
		/// <para>Returns a quaternion created from its separate components.</para>
		/// <para>Original signature is 'GLKQuaternion GLKQuaternionMake ( float x, float y, float z, float w );'</para>
		/// <para>Available in OS X x0.8 and later.</para>
		/// </summary>
		/// <param name="x">MISSING</param>
		/// <param name="y">MISSING</param>
		/// <param name="z">MISSING</param>
		/// <param name="w">MISSING</param>
		/// <returns>A new quaternion.</returns>
		public static GLKQuaternion Make (float x, float y, float z, float w)
		{
			GLKQuaternion q = new GLKQuaternion (x, y, z, w);
			return q;
		}