+++ /dev/null
-#include "stdafx.h"\r
-/*\r
-* Copyright (c) 2007-2010 SlimDX Group\r
-* \r
-* Permission is hereby granted, free of charge, to any person obtaining a copy\r
-* of this software and associated documentation files (the "Software"), to deal\r
-* in the Software without restriction, including without limitation the rights\r
-* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
-* copies of the Software, and to permit persons to whom the Software is\r
-* furnished to do so, subject to the following conditions:\r
-* \r
-* The above copyright notice and this permission notice shall be included in\r
-* all copies or substantial portions of the Software.\r
-* \r
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
-* THE SOFTWARE.\r
-*/\r
-\r
-#include <d3dx9.h>\r
-#include "../Utilities.h"\r
-\r
-#include "Matrix.h"\r
-#include "Plane.h"\r
-#include "Quaternion.h"\r
-#include "Vector2.h"\r
-#include "Vector3.h"\r
-\r
-using namespace System;\r
-using namespace System::Globalization;\r
-\r
-namespace SlimDX\r
-{\r
- D3DXMATRIX Matrix::ToD3DXMATRIX( Matrix matrix )\r
- {\r
- D3DXMATRIX result;\r
- result._11 = matrix.M11;\r
- result._12 = matrix.M12;\r
- result._13 = matrix.M13;\r
- result._14 = matrix.M14;\r
- result._21 = matrix.M21;\r
- result._22 = matrix.M22;\r
- result._23 = matrix.M23;\r
- result._24 = matrix.M24;\r
- result._31 = matrix.M31;\r
- result._32 = matrix.M32;\r
- result._33 = matrix.M33;\r
- result._34 = matrix.M34;\r
- result._41 = matrix.M41;\r
- result._42 = matrix.M42;\r
- result._43 = matrix.M43;\r
- result._44 = matrix.M44;\r
-\r
- return result;\r
- }\r
-\r
- Matrix Matrix::FromD3DXMATRIX( const D3DXMATRIX &matrix )\r
- {\r
- Matrix result;\r
- result.M11 = matrix._11;\r
- result.M12 = matrix._12;\r
- result.M13 = matrix._13;\r
- result.M14 = matrix._14;\r
- result.M21 = matrix._21;\r
- result.M22 = matrix._22;\r
- result.M23 = matrix._23;\r
- result.M24 = matrix._24;\r
- result.M31 = matrix._31;\r
- result.M32 = matrix._32;\r
- result.M33 = matrix._33;\r
- result.M34 = matrix._34;\r
- result.M41 = matrix._41;\r
- result.M42 = matrix._42;\r
- result.M43 = matrix._43;\r
- result.M44 = matrix._44;\r
-\r
- return result;\r
- }\r
-\r
- float Matrix::default::get( int row, int column )\r
- {\r
- if( row < 0 || row > 3 )\r
- throw gcnew ArgumentOutOfRangeException( "row", "Rows and columns for matrices run from 0 to 3, inclusive." );\r
-\r
- if( column < 0 || column > 3 )\r
- throw gcnew ArgumentOutOfRangeException( "column", "Rows and columns for matrices run from 0 to 3, inclusive." );\r
-\r
- int index = row * 4 + column;\r
- switch( index )\r
- {\r
- case 0: return M11;\r
- case 1: return M12;\r
- case 2: return M13;\r
- case 3: return M14;\r
- case 4: return M21;\r
- case 5: return M22;\r
- case 6: return M23;\r
- case 7: return M24;\r
- case 8: return M31;\r
- case 9: return M32;\r
- case 10: return M33;\r
- case 11: return M34;\r
- case 12: return M41;\r
- case 13: return M42;\r
- case 14: return M43;\r
- case 15: return M44;\r
- }\r
-\r
- return 0.0f;\r
- }\r
- \r
- void Matrix::default::set( int row, int column, float value ) \r
- {\r
- if( row < 0 || row > 3 )\r
- throw gcnew ArgumentOutOfRangeException( "row", "Rows and columns for matrices run from 0 to 3, inclusive." );\r
-\r
- if( column < 0 || column > 3 )\r
- throw gcnew ArgumentOutOfRangeException( "column", "Rows and columns for matrices run from 0 to 3, inclusive." );\r
-\r
- int index = row * 4 + column;\r
- switch( index )\r
- {\r
- case 0: M11 = value; break;\r
- case 1: M12 = value; break;\r
- case 2: M13 = value; break;\r
- case 3: M14 = value; break;\r
- case 4: M21 = value; break;\r
- case 5: M22 = value; break;\r
- case 6: M23 = value; break;\r
- case 7: M24 = value; break;\r
- case 8: M31 = value; break;\r
- case 9: M32 = value; break;\r
- case 10: M33 = value; break;\r
- case 11: M34 = value; break;\r
- case 12: M41 = value; break;\r
- case 13: M42 = value; break;\r
- case 14: M43 = value; break;\r
- case 15: M44 = value; break;\r
- }\r
- }\r
-\r
- Vector4 Matrix::Rows::get( int row )\r
- {\r
- return Vector4( default[row, 0], default[row, 1], default[row, 2], default[row, 3] );\r
- }\r
-\r
- void Matrix::Rows::set( int row, Vector4 value )\r
- {\r
- default[row, 0] = value.X;\r
- default[row, 1] = value.Y;\r
- default[row, 2] = value.Z;\r
- default[row, 3] = value.W;\r
- }\r
-\r
- Vector4 Matrix::Columns::get( int column )\r
- {\r
- return Vector4( default[0, column], default[1, column], default[2, column], default[3, column] );\r
- }\r
-\r
- void Matrix::Columns::set( int column, Vector4 value )\r
- {\r
- default[0, column] = value.X;\r
- default[1, column] = value.Y;\r
- default[2, column] = value.Z;\r
- default[3, column] = value.W;\r
- }\r
-\r
- Matrix Matrix::Identity::get()\r
- {\r
- Matrix result;\r
- result.M11 = 1.0f;\r
- result.M22 = 1.0f;\r
- result.M33 = 1.0f;\r
- result.M44 = 1.0f;\r
-\r
- return result;\r
- }\r
-\r
- bool Matrix::IsIdentity::get()\r
- {\r
- if( M11 != 1.0f|| M22 != 1.0f || M33 != 1.0f || M44 != 1.0f )\r
- return false;\r
-\r
- if( M12 != 0.0f || M13 != 0.0f || M14 != 0.0f ||\r
- M21 != 0.0f || M23 != 0.0f || M24 != 0.0f ||\r
- M31 != 0.0f || M32 != 0.0f || M34 != 0.0f ||\r
- M41 != 0.0f || M42 != 0.0f || M43 != 0.0f )\r
- return false;\r
-\r
- return true;\r
- }\r
-\r
- array<float>^ Matrix::ToArray()\r
- {\r
- array<float>^ result = gcnew array<float>( 16 );\r
- result[0] = M11;\r
- result[1] = M12;\r
- result[2] = M13;\r
- result[3] = M14;\r
- result[4] = M21;\r
- result[5] = M22;\r
- result[6] = M23;\r
- result[7] = M24;\r
- result[8] = M31;\r
- result[9] = M32;\r
- result[10] = M33;\r
- result[11] = M34;\r
- result[12] = M41;\r
- result[13] = M42;\r
- result[14] = M43;\r
- result[15] = M44;\r
-\r
- return result;\r
- }\r
-\r
- void Matrix::Invert()\r
- {\r
- pin_ptr<Matrix> pinnedThis = this;\r
- D3DXMatrixInverse( (D3DXMATRIX*) pinnedThis, NULL, (D3DXMATRIX*) pinnedThis );\r
- }\r
-\r
- bool Matrix::Decompose( [Out] Vector3% scale, [Out] Quaternion% rotation, [Out] Vector3% translation )\r
- {\r
- Vector3 localScale, localTrans;\r
- Quaternion localRot;\r
- pin_ptr<Matrix> pinnedThis = this;\r
-\r
- HRESULT hr = D3DXMatrixDecompose( (D3DXVECTOR3*) &localScale, (D3DXQUATERNION*) &localRot,\r
- (D3DXVECTOR3*) &localTrans, (D3DXMATRIX*) pinnedThis );\r
-\r
- scale = localScale;\r
- rotation = localRot;\r
- translation = localTrans;\r
-\r
- return hr == S_OK;\r
- }\r
- \r
- float Matrix::Determinant()\r
- {\r
- float temp1 = (M33 * M44) - (M34 * M43);\r
- float temp2 = (M32 * M44) - (M34 * M42);\r
- float temp3 = (M32 * M43) - (M33 * M42);\r
- float temp4 = (M31 * M44) - (M34 * M41);\r
- float temp5 = (M31 * M43) - (M33 * M41);\r
- float temp6 = (M31 * M42) - (M32 * M41);\r
- \r
- return ((((M11 * (((M22 * temp1) - (M23 * temp2)) + (M24 * temp3))) - (M12 * (((M21 * temp1) - \r
- (M23 * temp4)) + (M24 * temp5)))) + (M13 * (((M21 * temp2) - (M22 * temp4)) + (M24 * temp6)))) - \r
- (M14 * (((M21 * temp3) - (M22 * temp5)) + (M23 * temp6))));\r
- }\r
-\r
- Matrix Matrix::Add( Matrix left, Matrix right )\r
- {\r
- Matrix result;\r
- result.M11 = left.M11 + right.M11;\r
- result.M12 = left.M12 + right.M12;\r
- result.M13 = left.M13 + right.M13;\r
- result.M14 = left.M14 + right.M14;\r
- result.M21 = left.M21 + right.M21;\r
- result.M22 = left.M22 + right.M22;\r
- result.M23 = left.M23 + right.M23;\r
- result.M24 = left.M24 + right.M24;\r
- result.M31 = left.M31 + right.M31;\r
- result.M32 = left.M32 + right.M32;\r
- result.M33 = left.M33 + right.M33;\r
- result.M34 = left.M34 + right.M34;\r
- result.M41 = left.M41 + right.M41;\r
- result.M42 = left.M42 + right.M42;\r
- result.M43 = left.M43 + right.M43;\r
- result.M44 = left.M44 + right.M44;\r
- return result;\r
- }\r
-\r
- void Matrix::Add( Matrix% left, Matrix% right, [Out] Matrix% result )\r
- {\r
- Matrix r;\r
- r.M11 = left.M11 + right.M11;\r
- r.M12 = left.M12 + right.M12;\r
- r.M13 = left.M13 + right.M13;\r
- r.M14 = left.M14 + right.M14;\r
- r.M21 = left.M21 + right.M21;\r
- r.M22 = left.M22 + right.M22;\r
- r.M23 = left.M23 + right.M23;\r
- r.M24 = left.M24 + right.M24;\r
- r.M31 = left.M31 + right.M31;\r
- r.M32 = left.M32 + right.M32;\r
- r.M33 = left.M33 + right.M33;\r
- r.M34 = left.M34 + right.M34;\r
- r.M41 = left.M41 + right.M41;\r
- r.M42 = left.M42 + right.M42;\r
- r.M43 = left.M43 + right.M43;\r
- r.M44 = left.M44 + right.M44;\r
-\r
- result = r;\r
- }\r
-\r
- Matrix Matrix::Subtract( Matrix left, Matrix right )\r
- {\r
- Matrix result;\r
- result.M11 = left.M11 - right.M11;\r
- result.M12 = left.M12 - right.M12;\r
- result.M13 = left.M13 - right.M13;\r
- result.M14 = left.M14 - right.M14;\r
- result.M21 = left.M21 - right.M21;\r
- result.M22 = left.M22 - right.M22;\r
- result.M23 = left.M23 - right.M23;\r
- result.M24 = left.M24 - right.M24;\r
- result.M31 = left.M31 - right.M31;\r
- result.M32 = left.M32 - right.M32;\r
- result.M33 = left.M33 - right.M33;\r
- result.M34 = left.M34 - right.M34;\r
- result.M41 = left.M41 - right.M41;\r
- result.M42 = left.M42 - right.M42;\r
- result.M43 = left.M43 - right.M43;\r
- result.M44 = left.M44 - right.M44;\r
- return result;\r
- }\r
-\r
- void Matrix::Subtract( Matrix% left, Matrix% right, [Out] Matrix% result )\r
- {\r
- Matrix r;\r
- r.M11 = left.M11 - right.M11;\r
- r.M12 = left.M12 - right.M12;\r
- r.M13 = left.M13 - right.M13;\r
- r.M14 = left.M14 - right.M14;\r
- r.M21 = left.M21 - right.M21;\r
- r.M22 = left.M22 - right.M22;\r
- r.M23 = left.M23 - right.M23;\r
- r.M24 = left.M24 - right.M24;\r
- r.M31 = left.M31 - right.M31;\r
- r.M32 = left.M32 - right.M32;\r
- r.M33 = left.M33 - right.M33;\r
- r.M34 = left.M34 - right.M34;\r
- r.M41 = left.M41 - right.M41;\r
- r.M42 = left.M42 - right.M42;\r
- r.M43 = left.M43 - right.M43;\r
- r.M44 = left.M44 - right.M44;\r
-\r
- result = r;\r
- }\r
-\r
- Matrix Matrix::Negate( Matrix matrix )\r
- {\r
- Matrix result;\r
- result.M11 = -matrix.M11;\r
- result.M12 = -matrix.M12;\r
- result.M13 = -matrix.M13;\r
- result.M14 = -matrix.M14;\r
- result.M21 = -matrix.M21;\r
- result.M22 = -matrix.M22;\r
- result.M23 = -matrix.M23;\r
- result.M24 = -matrix.M24;\r
- result.M31 = -matrix.M31;\r
- result.M32 = -matrix.M32;\r
- result.M33 = -matrix.M33;\r
- result.M34 = -matrix.M34;\r
- result.M41 = -matrix.M41;\r
- result.M42 = -matrix.M42;\r
- result.M43 = -matrix.M43;\r
- result.M44 = -matrix.M44;\r
- return result;\r
- }\r
-\r
- void Matrix::Negate( Matrix% matrix, [Out] Matrix% result )\r
- {\r
- Matrix r;\r
- r.M11 = -matrix.M11;\r
- r.M12 = -matrix.M12;\r
- r.M13 = -matrix.M13;\r
- r.M14 = -matrix.M14;\r
- r.M21 = -matrix.M21;\r
- r.M22 = -matrix.M22;\r
- r.M23 = -matrix.M23;\r
- r.M24 = -matrix.M24;\r
- r.M31 = -matrix.M31;\r
- r.M32 = -matrix.M32;\r
- r.M33 = -matrix.M33;\r
- r.M34 = -matrix.M34;\r
- r.M41 = -matrix.M41;\r
- r.M42 = -matrix.M42;\r
- r.M43 = -matrix.M43;\r
- r.M44 = -matrix.M44;\r
-\r
- result = r;\r
- }\r
-\r
- Matrix Matrix::Multiply( Matrix left, Matrix right )\r
- {\r
- Matrix result;\r
- result.M11 = (left.M11 * right.M11) + (left.M12 * right.M21) + (left.M13 * right.M31) + (left.M14 * right.M41);\r
- result.M12 = (left.M11 * right.M12) + (left.M12 * right.M22) + (left.M13 * right.M32) + (left.M14 * right.M42);\r
- result.M13 = (left.M11 * right.M13) + (left.M12 * right.M23) + (left.M13 * right.M33) + (left.M14 * right.M43);\r
- result.M14 = (left.M11 * right.M14) + (left.M12 * right.M24) + (left.M13 * right.M34) + (left.M14 * right.M44);\r
- result.M21 = (left.M21 * right.M11) + (left.M22 * right.M21) + (left.M23 * right.M31) + (left.M24 * right.M41);\r
- result.M22 = (left.M21 * right.M12) + (left.M22 * right.M22) + (left.M23 * right.M32) + (left.M24 * right.M42);\r
- result.M23 = (left.M21 * right.M13) + (left.M22 * right.M23) + (left.M23 * right.M33) + (left.M24 * right.M43);\r
- result.M24 = (left.M21 * right.M14) + (left.M22 * right.M24) + (left.M23 * right.M34) + (left.M24 * right.M44);\r
- result.M31 = (left.M31 * right.M11) + (left.M32 * right.M21) + (left.M33 * right.M31) + (left.M34 * right.M41);\r
- result.M32 = (left.M31 * right.M12) + (left.M32 * right.M22) + (left.M33 * right.M32) + (left.M34 * right.M42);\r
- result.M33 = (left.M31 * right.M13) + (left.M32 * right.M23) + (left.M33 * right.M33) + (left.M34 * right.M43);\r
- result.M34 = (left.M31 * right.M14) + (left.M32 * right.M24) + (left.M33 * right.M34) + (left.M34 * right.M44);\r
- result.M41 = (left.M41 * right.M11) + (left.M42 * right.M21) + (left.M43 * right.M31) + (left.M44 * right.M41);\r
- result.M42 = (left.M41 * right.M12) + (left.M42 * right.M22) + (left.M43 * right.M32) + (left.M44 * right.M42);\r
- result.M43 = (left.M41 * right.M13) + (left.M42 * right.M23) + (left.M43 * right.M33) + (left.M44 * right.M43);\r
- result.M44 = (left.M41 * right.M14) + (left.M42 * right.M24) + (left.M43 * right.M34) + (left.M44 * right.M44);\r
- return result;\r
- }\r
-\r
- void Matrix::Multiply( Matrix% left, Matrix% right, [Out] Matrix% result )\r
- {\r
- Matrix r;\r
- r.M11 = (left.M11 * right.M11) + (left.M12 * right.M21) + (left.M13 * right.M31) + (left.M14 * right.M41);\r
- r.M12 = (left.M11 * right.M12) + (left.M12 * right.M22) + (left.M13 * right.M32) + (left.M14 * right.M42);\r
- r.M13 = (left.M11 * right.M13) + (left.M12 * right.M23) + (left.M13 * right.M33) + (left.M14 * right.M43);\r
- r.M14 = (left.M11 * right.M14) + (left.M12 * right.M24) + (left.M13 * right.M34) + (left.M14 * right.M44);\r
- r.M21 = (left.M21 * right.M11) + (left.M22 * right.M21) + (left.M23 * right.M31) + (left.M24 * right.M41);\r
- r.M22 = (left.M21 * right.M12) + (left.M22 * right.M22) + (left.M23 * right.M32) + (left.M24 * right.M42);\r
- r.M23 = (left.M21 * right.M13) + (left.M22 * right.M23) + (left.M23 * right.M33) + (left.M24 * right.M43);\r
- r.M24 = (left.M21 * right.M14) + (left.M22 * right.M24) + (left.M23 * right.M34) + (left.M24 * right.M44);\r
- r.M31 = (left.M31 * right.M11) + (left.M32 * right.M21) + (left.M33 * right.M31) + (left.M34 * right.M41);\r
- r.M32 = (left.M31 * right.M12) + (left.M32 * right.M22) + (left.M33 * right.M32) + (left.M34 * right.M42);\r
- r.M33 = (left.M31 * right.M13) + (left.M32 * right.M23) + (left.M33 * right.M33) + (left.M34 * right.M43);\r
- r.M34 = (left.M31 * right.M14) + (left.M32 * right.M24) + (left.M33 * right.M34) + (left.M34 * right.M44);\r
- r.M41 = (left.M41 * right.M11) + (left.M42 * right.M21) + (left.M43 * right.M31) + (left.M44 * right.M41);\r
- r.M42 = (left.M41 * right.M12) + (left.M42 * right.M22) + (left.M43 * right.M32) + (left.M44 * right.M42);\r
- r.M43 = (left.M41 * right.M13) + (left.M42 * right.M23) + (left.M43 * right.M33) + (left.M44 * right.M43);\r
- r.M44 = (left.M41 * right.M14) + (left.M42 * right.M24) + (left.M43 * right.M34) + (left.M44 * right.M44);\r
- \r
- result = r;\r
- }\r
-\r
- void Matrix::Multiply( Matrix* left, Matrix* right, Matrix* result, int count )\r
- {\r
- for( int i = 0; i < count; ++i )\r
- {\r
- D3DXMatrixMultiply( reinterpret_cast<D3DXMATRIX*>( &left[i] ),\r
- reinterpret_cast<const D3DXMATRIX*>( &right[i] ),\r
- reinterpret_cast<const D3DXMATRIX*>( &result[i] ) );\r
- }\r
- }\r
-\r
- void Matrix::Multiply( array<Matrix>^ left, array<Matrix>^ right, array<Matrix>^ result, int offset, int count )\r
- {\r
- if( left->Length != right->Length )\r
- throw gcnew ArgumentException( "Left and right arrays must be the same size.", "right" );\r
- if( right->Length != result->Length )\r
- throw gcnew ArgumentException( "Result array must be the same size as input arrays.", "result" );\r
- Utilities::CheckArrayBounds( left, offset, count );\r
-\r
- pin_ptr<Matrix> pinnedLeft = &left[offset];\r
- pin_ptr<Matrix> pinnedRight = &right[offset];\r
- pin_ptr<Matrix> pinnedResult = &result[offset];\r
-\r
- Multiply( pinnedLeft, pinnedRight, pinnedResult, count );\r
- }\r
-\r
- void Matrix::Multiply( array<Matrix>^ left, Matrix right, array<Matrix>^ result, int offset, int count )\r
- {\r
- if( left->Length != result->Length )\r
- throw gcnew ArgumentException( "Result array must be the same size as the input array.", "result" );\r
- Utilities::CheckArrayBounds( left, offset, count );\r
-\r
- pin_ptr<Matrix> pinnedLeft = &left[offset];\r
- pin_ptr<Matrix> pinnedResult = &result[offset];\r
- for( int i = 0; i < count; ++i )\r
- {\r
- D3DXMatrixMultiply( reinterpret_cast<D3DXMATRIX*>( &pinnedLeft[i] ),\r
- reinterpret_cast<const D3DXMATRIX*>( &right ),\r
- reinterpret_cast<const D3DXMATRIX*>( &pinnedResult[i] ) );\r
- }\r
- }\r
-\r
- Matrix Matrix::Multiply( Matrix left, float right )\r
- {\r
- Matrix result;\r
- result.M11 = left.M11 * right;\r
- result.M12 = left.M12 * right;\r
- result.M13 = left.M13 * right;\r
- result.M14 = left.M14 * right;\r
- result.M21 = left.M21 * right;\r
- result.M22 = left.M22 * right;\r
- result.M23 = left.M23 * right;\r
- result.M24 = left.M24 * right;\r
- result.M31 = left.M31 * right;\r
- result.M32 = left.M32 * right;\r
- result.M33 = left.M33 * right;\r
- result.M34 = left.M34 * right;\r
- result.M41 = left.M41 * right;\r
- result.M42 = left.M42 * right;\r
- result.M43 = left.M43 * right;\r
- result.M44 = left.M44 * right;\r
- return result;\r
- }\r
-\r
- void Matrix::Multiply( Matrix% left, float right, [Out] Matrix% result )\r
- {\r
- Matrix r;\r
- r.M11 = left.M11 * right;\r
- r.M12 = left.M12 * right;\r
- r.M13 = left.M13 * right;\r
- r.M14 = left.M14 * right;\r
- r.M21 = left.M21 * right;\r
- r.M22 = left.M22 * right;\r
- r.M23 = left.M23 * right;\r
- r.M24 = left.M24 * right;\r
- r.M31 = left.M31 * right;\r
- r.M32 = left.M32 * right;\r
- r.M33 = left.M33 * right;\r
- r.M34 = left.M34 * right;\r
- r.M41 = left.M41 * right;\r
- r.M42 = left.M42 * right;\r
- r.M43 = left.M43 * right;\r
- r.M44 = left.M44 * right;\r
-\r
- result = r;\r
- }\r
-\r
- Matrix Matrix::Divide( Matrix left, Matrix right )\r
- {\r
- Matrix result;\r
- result.M11 = left.M11 / right.M11;\r
- result.M12 = left.M12 / right.M12;\r
- result.M13 = left.M13 / right.M13;\r
- result.M14 = left.M14 / right.M14;\r
- result.M21 = left.M21 / right.M21;\r
- result.M22 = left.M22 / right.M22;\r
- result.M23 = left.M23 / right.M23;\r
- result.M24 = left.M24 / right.M24;\r
- result.M31 = left.M31 / right.M31;\r
- result.M32 = left.M32 / right.M32;\r
- result.M33 = left.M33 / right.M33;\r
- result.M34 = left.M34 / right.M34;\r
- result.M41 = left.M41 / right.M41;\r
- result.M42 = left.M42 / right.M42;\r
- result.M43 = left.M43 / right.M43;\r
- result.M44 = left.M44 / right.M44;\r
- return result;\r
- }\r
-\r
- void Matrix::Divide( Matrix% left, Matrix% right, [Out] Matrix% result )\r
- {\r
- Matrix r;\r
- r.M11 = left.M11 / right.M11;\r
- r.M12 = left.M12 / right.M12;\r
- r.M13 = left.M13 / right.M13;\r
- r.M14 = left.M14 / right.M14;\r
- r.M21 = left.M21 / right.M21;\r
- r.M22 = left.M22 / right.M22;\r
- r.M23 = left.M23 / right.M23;\r
- r.M24 = left.M24 / right.M24;\r
- r.M31 = left.M31 / right.M31;\r
- r.M32 = left.M32 / right.M32;\r
- r.M33 = left.M33 / right.M33;\r
- r.M34 = left.M34 / right.M34;\r
- r.M41 = left.M41 / right.M41;\r
- r.M42 = left.M42 / right.M42;\r
- r.M43 = left.M43 / right.M43;\r
- r.M44 = left.M44 / right.M44;\r
-\r
- result = r;\r
- }\r
-\r
- Matrix Matrix::Divide( Matrix left, float right )\r
- {\r
- Matrix result;\r
- float inv = 1.0f / right;\r
-\r
- result.M11 = left.M11 * inv;\r
- result.M12 = left.M12 * inv;\r
- result.M13 = left.M13 * inv;\r
- result.M14 = left.M14 * inv;\r
- result.M21 = left.M21 * inv;\r
- result.M22 = left.M22 * inv;\r
- result.M23 = left.M23 * inv;\r
- result.M24 = left.M24 * inv;\r
- result.M31 = left.M31 * inv;\r
- result.M32 = left.M32 * inv;\r
- result.M33 = left.M33 * inv;\r
- result.M34 = left.M34 * inv;\r
- result.M41 = left.M41 * inv;\r
- result.M42 = left.M42 * inv;\r
- result.M43 = left.M43 * inv;\r
- result.M44 = left.M44 * inv;\r
- return result;\r
- }\r
-\r
- void Matrix::Divide( Matrix% left, float right, [Out] Matrix% result )\r
- {\r
- float inv = 1.0f / right;\r
-\r
- Matrix r;\r
- r.M11 = left.M11 * inv;\r
- r.M12 = left.M12 * inv;\r
- r.M13 = left.M13 * inv;\r
- r.M14 = left.M14 * inv;\r
- r.M21 = left.M21 * inv;\r
- r.M22 = left.M22 * inv;\r
- r.M23 = left.M23 * inv;\r
- r.M24 = left.M24 * inv;\r
- r.M31 = left.M31 * inv;\r
- r.M32 = left.M32 * inv;\r
- r.M33 = left.M33 * inv;\r
- r.M34 = left.M34 * inv;\r
- r.M41 = left.M41 * inv;\r
- r.M42 = left.M42 * inv;\r
- r.M43 = left.M43 * inv;\r
- r.M44 = left.M44 * inv;\r
-\r
- result = r;\r
- }\r
-\r
- Matrix Matrix::Lerp( Matrix value1, Matrix value2, float amount )\r
- {\r
- Matrix result;\r
- result.M11 = value1.M11 + ((value2.M11 - value1.M11) * amount);\r
- result.M12 = value1.M12 + ((value2.M12 - value1.M12) * amount);\r
- result.M13 = value1.M13 + ((value2.M13 - value1.M13) * amount);\r
- result.M14 = value1.M14 + ((value2.M14 - value1.M14) * amount);\r
- result.M21 = value1.M21 + ((value2.M21 - value1.M21) * amount);\r
- result.M22 = value1.M22 + ((value2.M22 - value1.M22) * amount);\r
- result.M23 = value1.M23 + ((value2.M23 - value1.M23) * amount);\r
- result.M24 = value1.M24 + ((value2.M24 - value1.M24) * amount);\r
- result.M31 = value1.M31 + ((value2.M31 - value1.M31) * amount);\r
- result.M32 = value1.M32 + ((value2.M32 - value1.M32) * amount);\r
- result.M33 = value1.M33 + ((value2.M33 - value1.M33) * amount);\r
- result.M34 = value1.M34 + ((value2.M34 - value1.M34) * amount);\r
- result.M41 = value1.M41 + ((value2.M41 - value1.M41) * amount);\r
- result.M42 = value1.M42 + ((value2.M42 - value1.M42) * amount);\r
- result.M43 = value1.M43 + ((value2.M43 - value1.M43) * amount);\r
- result.M44 = value1.M44 + ((value2.M44 - value1.M44) * amount);\r
- return result;\r
- }\r
-\r
- void Matrix::Lerp( Matrix% value1, Matrix% value2, float amount, [Out] Matrix% result )\r
- {\r
- Matrix r;\r
- r.M11 = value1.M11 + ((value2.M11 - value1.M11) * amount);\r
- r.M12 = value1.M12 + ((value2.M12 - value1.M12) * amount);\r
- r.M13 = value1.M13 + ((value2.M13 - value1.M13) * amount);\r
- r.M14 = value1.M14 + ((value2.M14 - value1.M14) * amount);\r
- r.M21 = value1.M21 + ((value2.M21 - value1.M21) * amount);\r
- r.M22 = value1.M22 + ((value2.M22 - value1.M22) * amount);\r
- r.M23 = value1.M23 + ((value2.M23 - value1.M23) * amount);\r
- r.M24 = value1.M24 + ((value2.M24 - value1.M24) * amount);\r
- r.M31 = value1.M31 + ((value2.M31 - value1.M31) * amount);\r
- r.M32 = value1.M32 + ((value2.M32 - value1.M32) * amount);\r
- r.M33 = value1.M33 + ((value2.M33 - value1.M33) * amount);\r
- r.M34 = value1.M34 + ((value2.M34 - value1.M34) * amount);\r
- r.M41 = value1.M41 + ((value2.M41 - value1.M41) * amount);\r
- r.M42 = value1.M42 + ((value2.M42 - value1.M42) * amount);\r
- r.M43 = value1.M43 + ((value2.M43 - value1.M43) * amount);\r
- r.M44 = value1.M44 + ((value2.M44 - value1.M44) * amount);\r
-\r
- result = r;\r
- }\r
-\r
- Matrix Matrix::Billboard( Vector3 objectPosition, Vector3 cameraPosition, Vector3 cameraUpVector, Vector3 cameraForwardVector )\r
- {\r
- Matrix result;\r
- Vector3 difference = objectPosition - cameraPosition;\r
- Vector3 crossed;\r
- Vector3 final;\r
-\r
- float lengthSq = difference.LengthSquared();\r
- if (lengthSq < 0.0001f)\r
- difference = -cameraForwardVector;\r
- else\r
- difference *= static_cast<float>( 1.0f / Math::Sqrt( lengthSq ) );\r
-\r
- Vector3::Cross( cameraUpVector, difference, crossed );\r
- crossed.Normalize();\r
- Vector3::Cross( difference, crossed, final );\r
-\r
- result.M11 = final.X;\r
- result.M12 = final.Y;\r
- result.M13 = final.Z;\r
- result.M14 = 0.0f;\r
- result.M21 = crossed.X;\r
- result.M22 = crossed.Y;\r
- result.M23 = crossed.Z;\r
- result.M24 = 0.0f;\r
- result.M31 = difference.X;\r
- result.M32 = difference.Y;\r
- result.M33 = difference.Z;\r
- result.M34 = 0.0f;\r
- result.M41 = objectPosition.X;\r
- result.M42 = objectPosition.Y;\r
- result.M43 = objectPosition.Z;\r
- result.M44 = 1.0f;\r
-\r
- return result;\r
- }\r
-\r
- void Matrix::Billboard( Vector3% objectPosition, Vector3% cameraPosition, Vector3% cameraUpVector, Vector3% cameraForwardVector, [Out] Matrix% result )\r
- {\r
- Vector3 difference = objectPosition - cameraPosition;\r
- Vector3 crossed;\r
- Vector3 final;\r
-\r
- float lengthSq = difference.LengthSquared();\r
- if (lengthSq < 0.0001f)\r
- difference = -cameraForwardVector;\r
- else\r
- difference *= static_cast<float>( 1.0f / Math::Sqrt( lengthSq ) );\r
-\r
- Vector3::Cross( cameraUpVector, difference, crossed );\r
- crossed.Normalize();\r
- Vector3::Cross( difference, crossed, final );\r
-\r
- result.M11 = final.X;\r
- result.M12 = final.Y;\r
- result.M13 = final.Z;\r
- result.M14 = 0.0f;\r
- result.M21 = crossed.X;\r
- result.M22 = crossed.Y;\r
- result.M23 = crossed.Z;\r
- result.M24 = 0.0f;\r
- result.M31 = difference.X;\r
- result.M32 = difference.Y;\r
- result.M33 = difference.Z;\r
- result.M34 = 0.0f;\r
- result.M41 = objectPosition.X;\r
- result.M42 = objectPosition.Y;\r
- result.M43 = objectPosition.Z;\r
- result.M44 = 1.0f;\r
- }\r
-\r
- Matrix Matrix::RotationX( float angle )\r
- {\r
- Matrix result;\r
- float cos = static_cast<float>( Math::Cos( static_cast<double>( angle ) ) );\r
- float sin = static_cast<float>( Math::Sin( static_cast<double>( angle ) ) );\r
-\r
- result.M11 = 1.0f;\r
- result.M12 = 0.0f;\r
- result.M13 = 0.0f;\r
- result.M14 = 0.0f;\r
- result.M21 = 0.0f;\r
- result.M22 = cos;\r
- result.M23 = sin;\r
- result.M24 = 0.0f;\r
- result.M31 = 0.0f;\r
- result.M32 = -sin;\r
- result.M33 = cos;\r
- result.M34 = 0.0f;\r
- result.M41 = 0.0f;\r
- result.M42 = 0.0f;\r
- result.M43 = 0.0f;\r
- result.M44 = 1.0f;\r
-\r
- return result;\r
- }\r
-\r
- void Matrix::RotationX( float angle, [Out] Matrix% result )\r
- {\r
- float cos = static_cast<float>( Math::Cos( static_cast<double>( angle ) ) );\r
- float sin = static_cast<float>( Math::Sin( static_cast<double>( angle ) ) );\r
-\r
- result.M11 = 1.0f;\r
- result.M12 = 0.0f;\r
- result.M13 = 0.0f;\r
- result.M14 = 0.0f;\r
- result.M21 = 0.0f;\r
- result.M22 = cos;\r
- result.M23 = sin;\r
- result.M24 = 0.0f;\r
- result.M31 = 0.0f;\r
- result.M32 = -sin;\r
- result.M33 = cos;\r
- result.M34 = 0.0f;\r
- result.M41 = 0.0f;\r
- result.M42 = 0.0f;\r
- result.M43 = 0.0f;\r
- result.M44 = 1.0f;\r
- }\r
- \r
- Matrix Matrix::RotationY( float angle )\r
- {\r
- Matrix result;\r
- float cos = static_cast<float>( Math::Cos( static_cast<double>( angle ) ) );\r
- float sin = static_cast<float>( Math::Sin( static_cast<double>( angle ) ) );\r
-\r
- result.M11 = cos;\r
- result.M12 = 0.0f;\r
- result.M13 = -sin;\r
- result.M14 = 0.0f;\r
- result.M21 = 0.0f;\r
- result.M22 = 1.0f;\r
- result.M23 = 0.0f;\r
- result.M24 = 0.0f;\r
- result.M31 = sin;\r
- result.M32 = 0.0f;\r
- result.M33 = cos;\r
- result.M34 = 0.0f;\r
- result.M41 = 0.0f;\r
- result.M42 = 0.0f;\r
- result.M43 = 0.0f;\r
- result.M44 = 1.0f;\r
-\r
- return result;\r
- }\r
-\r
- void Matrix::RotationY( float angle, [Out] Matrix% result )\r
- {\r
- float cos = static_cast<float>( Math::Cos( static_cast<double>( angle ) ) );\r
- float sin = static_cast<float>( Math::Sin( static_cast<double>( angle ) ) );\r
-\r
- result.M11 = cos;\r
- result.M12 = 0.0f;\r
- result.M13 = -sin;\r
- result.M14 = 0.0f;\r
- result.M21 = 0.0f;\r
- result.M22 = 1.0f;\r
- result.M23 = 0.0f;\r
- result.M24 = 0.0f;\r
- result.M31 = sin;\r
- result.M32 = 0.0f;\r
- result.M33 = cos;\r
- result.M34 = 0.0f;\r
- result.M41 = 0.0f;\r
- result.M42 = 0.0f;\r
- result.M43 = 0.0f;\r
- result.M44 = 1.0f;\r
- }\r
- \r
- Matrix Matrix::RotationZ( float angle )\r
- {\r
- Matrix result;\r
- float cos = static_cast<float>( Math::Cos( static_cast<double>( angle ) ) );\r
- float sin = static_cast<float>( Math::Sin( static_cast<double>( angle ) ) );\r
-\r
- result.M11 = cos;\r
- result.M12 = sin;\r
- result.M13 = 0.0f;\r
- result.M14 = 0.0f;\r
- result.M21 = -sin;\r
- result.M22 = cos;\r
- result.M23 = 0.0f;\r
- result.M24 = 0.0f;\r
- result.M31 = 0.0f;\r
- result.M32 = 0.0f;\r
- result.M33 = 1.0f;\r
- result.M34 = 0.0f;\r
- result.M41 = 0.0f;\r
- result.M42 = 0.0f;\r
- result.M43 = 0.0f;\r
- result.M44 = 1.0f;\r
-\r
- return result;\r
- }\r
-\r
- void Matrix::RotationZ( float angle, [Out] Matrix% result )\r
- {\r
- float cos = static_cast<float>( Math::Cos( static_cast<double>( angle ) ) );\r
- float sin = static_cast<float>( Math::Sin( static_cast<double>( angle ) ) );\r
-\r
- result.M11 = cos;\r
- result.M12 = sin;\r
- result.M13 = 0.0f;\r
- result.M14 = 0.0f;\r
- result.M21 = -sin;\r
- result.M22 = cos;\r
- result.M23 = 0.0f;\r
- result.M24 = 0.0f;\r
- result.M31 = 0.0f;\r
- result.M32 = 0.0f;\r
- result.M33 = 1.0f;\r
- result.M34 = 0.0f;\r
- result.M41 = 0.0f;\r
- result.M42 = 0.0f;\r
- result.M43 = 0.0f;\r
- result.M44 = 1.0f;\r
- }\r
-\r
- Matrix Matrix::RotationQuaternion( Quaternion quaternion )\r
- {\r
- Matrix result;\r
-\r
- float xx = quaternion.X * quaternion.X;\r
- float yy = quaternion.Y * quaternion.Y;\r
- float zz = quaternion.Z * quaternion.Z;\r
- float xy = quaternion.X * quaternion.Y;\r
- float zw = quaternion.Z * quaternion.W;\r
- float zx = quaternion.Z * quaternion.X;\r
- float yw = quaternion.Y * quaternion.W;\r
- float yz = quaternion.Y * quaternion.Z;\r
- float xw = quaternion.X * quaternion.W;\r
- result.M11 = 1.0f - (2.0f * (yy + zz));\r
- result.M12 = 2.0f * (xy + zw);\r
- result.M13 = 2.0f * (zx - yw);\r
- result.M14 = 0.0f;\r
- result.M21 = 2.0f * (xy - zw);\r
- result.M22 = 1.0f - (2.0f * (zz + xx));\r
- result.M23 = 2.0f * (yz + xw);\r
- result.M24 = 0.0f;\r
- result.M31 = 2.0f * (zx + yw);\r
- result.M32 = 2.0f * (yz - xw);\r
- result.M33 = 1.0f - (2.0f * (yy + xx));\r
- result.M34 = 0.0f;\r
- result.M41 = 0.0f;\r
- result.M42 = 0.0f;\r
- result.M43 = 0.0f;\r
- result.M44 = 1.0f;\r
-\r
- return result;\r
- }\r
-\r
- void Matrix::RotationQuaternion( Quaternion% rotation, [Out] Matrix% result )\r
- {\r
- float xx = rotation.X * rotation.X;\r
- float yy = rotation.Y * rotation.Y;\r
- float zz = rotation.Z * rotation.Z;\r
- float xy = rotation.X * rotation.Y;\r
- float zw = rotation.Z * rotation.W;\r
- float zx = rotation.Z * rotation.X;\r
- float yw = rotation.Y * rotation.W;\r
- float yz = rotation.Y * rotation.Z;\r
- float xw = rotation.X * rotation.W;\r
- result.M11 = 1.0f - (2.0f * (yy + zz));\r
- result.M12 = 2.0f * (xy + zw);\r
- result.M13 = 2.0f * (zx - yw);\r
- result.M14 = 0.0f;\r
- result.M21 = 2.0f * (xy - zw);\r
- result.M22 = 1.0f - (2.0f * (zz + xx));\r
- result.M23 = 2.0f * (yz + xw);\r
- result.M24 = 0.0f;\r
- result.M31 = 2.0f * (zx + yw);\r
- result.M32 = 2.0f * (yz - xw);\r
- result.M33 = 1.0f - (2.0f * (yy + xx));\r
- result.M34 = 0.0f;\r
- result.M41 = 0.0f;\r
- result.M42 = 0.0f;\r
- result.M43 = 0.0f;\r
- result.M44 = 1.0f;\r
- }\r
-\r
- Matrix Matrix::RotationAxis( Vector3 axis, float angle )\r
- {\r
- if( axis.LengthSquared() != 1.0f )\r
- axis.Normalize();\r
-\r
- Matrix result;\r
- float x = axis.X;\r
- float y = axis.Y;\r
- float z = axis.Z;\r
- float cos = static_cast<float>( Math::Cos( static_cast<double>( angle ) ) );\r
- float sin = static_cast<float>( Math::Sin( static_cast<double>( angle ) ) );\r
- float xx = x * x;\r
- float yy = y * y;\r
- float zz = z * z;\r
- float xy = x * y;\r
- float xz = x * z;\r
- float yz = y * z;\r
-\r
- result.M11 = xx + (cos * (1.0f - xx));\r
- result.M12 = (xy - (cos * xy)) + (sin * z);\r
- result.M13 = (xz - (cos * xz)) - (sin * y);\r
- result.M14 = 0.0f;\r
- result.M21 = (xy - (cos * xy)) - (sin * z);\r
- result.M22 = yy + (cos * (1.0f - yy));\r
- result.M23 = (yz - (cos * yz)) + (sin * x);\r
- result.M24 = 0.0f;\r
- result.M31 = (xz - (cos * xz)) + (sin * y);\r
- result.M32 = (yz - (cos * yz)) - (sin * x);\r
- result.M33 = zz + (cos * (1.0f - zz));\r
- result.M34 = 0.0f;\r
- result.M41 = 0.0f;\r
- result.M42 = 0.0f;\r
- result.M43 = 0.0f;\r
- result.M44 = 1.0f;\r
-\r
- return result;\r
- }\r
-\r
- void Matrix::RotationAxis( Vector3% axis, float angle, [Out] Matrix% result )\r
- {\r
- if( axis.LengthSquared() != 1.0f )\r
- axis.Normalize();\r
-\r
- float x = axis.X;\r
- float y = axis.Y;\r
- float z = axis.Z;\r
- float cos = static_cast<float>( Math::Cos( static_cast<double>( angle ) ) );\r
- float sin = static_cast<float>( Math::Sin( static_cast<double>( angle ) ) );\r
- float xx = x * x;\r
- float yy = y * y;\r
- float zz = z * z;\r
- float xy = x * y;\r
- float xz = x * z;\r
- float yz = y * z;\r
-\r
- result.M11 = xx + (cos * (1.0f - xx));\r
- result.M12 = (xy - (cos * xy)) + (sin * z);\r
- result.M13 = (xz - (cos * xz)) - (sin * y);\r
- result.M14 = 0.0f;\r
- result.M21 = (xy - (cos * xy)) - (sin * z);\r
- result.M22 = yy + (cos * (1.0f - yy));\r
- result.M23 = (yz - (cos * yz)) + (sin * x);\r
- result.M24 = 0.0f;\r
- result.M31 = (xz - (cos * xz)) + (sin * y);\r
- result.M32 = (yz - (cos * yz)) - (sin * x);\r
- result.M33 = zz + (cos * (1.0f - zz));\r
- result.M34 = 0.0f;\r
- result.M41 = 0.0f;\r
- result.M42 = 0.0f;\r
- result.M43 = 0.0f;\r
- result.M44 = 1.0f;\r
- }\r
-\r
- Matrix Matrix::RotationYawPitchRoll( float yaw, float pitch, float roll )\r
- {\r
- Matrix result;\r
- Quaternion quaternion;\r
- Quaternion::RotationYawPitchRoll( yaw, pitch, roll, quaternion );\r
- RotationQuaternion( quaternion, result );\r
- return result;\r
- }\r
-\r
- void Matrix::RotationYawPitchRoll( float yaw, float pitch, float roll, [Out] Matrix% result )\r
- {\r
- Quaternion quaternion;\r
- Quaternion::RotationYawPitchRoll( yaw, pitch, roll, quaternion );\r
- RotationQuaternion( quaternion, result );\r
- }\r
-\r
- Matrix Matrix::Translation( float x, float y, float z )\r
- {\r
- Matrix result;\r
- result.M11 = 1.0f;\r
- result.M12 = 0.0f;\r
- result.M13 = 0.0f;\r
- result.M14 = 0.0f;\r
- result.M21 = 0.0f;\r
- result.M22 = 1.0f;\r
- result.M23 = 0.0f;\r
- result.M24 = 0.0f;\r
- result.M31 = 0.0f;\r
- result.M32 = 0.0f;\r
- result.M33 = 1.0f;\r
- result.M34 = 0.0f;\r
- result.M41 = x;\r
- result.M42 = y;\r
- result.M43 = z;\r
- result.M44 = 1.0f;\r
- return result;\r
- }\r
-\r
- void Matrix::Translation( float x, float y, float z, [Out] Matrix% result )\r
- {\r
- result.M11 = 1.0f;\r
- result.M12 = 0.0f;\r
- result.M13 = 0.0f;\r
- result.M14 = 0.0f;\r
- result.M21 = 0.0f;\r
- result.M22 = 1.0f;\r
- result.M23 = 0.0f;\r
- result.M24 = 0.0f;\r
- result.M31 = 0.0f;\r
- result.M32 = 0.0f;\r
- result.M33 = 1.0f;\r
- result.M34 = 0.0f;\r
- result.M41 = x;\r
- result.M42 = y;\r
- result.M43 = z;\r
- result.M44 = 1.0f;\r
- }\r
-\r
- Matrix Matrix::Translation( Vector3 translation )\r
- {\r
- Matrix result;\r
- result.M11 = 1.0f;\r
- result.M12 = 0.0f;\r
- result.M13 = 0.0f;\r
- result.M14 = 0.0f;\r
- result.M21 = 0.0f;\r
- result.M22 = 1.0f;\r
- result.M23 = 0.0f;\r
- result.M24 = 0.0f;\r
- result.M31 = 0.0f;\r
- result.M32 = 0.0f;\r
- result.M33 = 1.0f;\r
- result.M34 = 0.0f;\r
- result.M41 = translation.X;\r
- result.M42 = translation.Y;\r
- result.M43 = translation.Z;\r
- result.M44 = 1.0f;\r
- return result;\r
- }\r
-\r
- void Matrix::Translation( Vector3% translation, [Out] Matrix% result )\r
- {\r
- result.M11 = 1.0f;\r
- result.M12 = 0.0f;\r
- result.M13 = 0.0f;\r
- result.M14 = 0.0f;\r
- result.M21 = 0.0f;\r
- result.M22 = 1.0f;\r
- result.M23 = 0.0f;\r
- result.M24 = 0.0f;\r
- result.M31 = 0.0f;\r
- result.M32 = 0.0f;\r
- result.M33 = 1.0f;\r
- result.M34 = 0.0f;\r
- result.M41 = translation.X;\r
- result.M42 = translation.Y;\r
- result.M43 = translation.Z;\r
- result.M44 = 1.0f;\r
- }\r
-\r
- Matrix Matrix::Scaling ( float x, float y, float z )\r
- {\r
- Matrix result;\r
- result.M11 = x;\r
- result.M12 = 0.0f;\r
- result.M13 = 0.0f;\r
- result.M14 = 0.0f;\r
- result.M21 = 0.0f;\r
- result.M22 = y;\r
- result.M23 = 0.0f;\r
- result.M24 = 0.0f;\r
- result.M31 = 0.0f;\r
- result.M32 = 0.0f;\r
- result.M33 = z;\r
- result.M34 = 0.0f;\r
- result.M41 = 0.0f;\r
- result.M42 = 0.0f;\r
- result.M43 = 0.0f;\r
- result.M44 = 1.0f;\r
- return result;\r
- }\r
-\r
- void Matrix::Scaling( float x, float y, float z, [Out] Matrix% result )\r
- {\r
- result.M11 = x;\r
- result.M12 = 0.0f;\r
- result.M13 = 0.0f;\r
- result.M14 = 0.0f;\r
- result.M21 = 0.0f;\r
- result.M22 = y;\r
- result.M23 = 0.0f;\r
- result.M24 = 0.0f;\r
- result.M31 = 0.0f;\r
- result.M32 = 0.0f;\r
- result.M33 = z;\r
- result.M34 = 0.0f;\r
- result.M41 = 0.0f;\r
- result.M42 = 0.0f;\r
- result.M43 = 0.0f;\r
- result.M44 = 1.0f;\r
- }\r
-\r
- Matrix Matrix::Scaling ( Vector3 scaling )\r
- {\r
- Matrix result;\r
- result.M11 = scaling.X;\r
- result.M12 = 0.0f;\r
- result.M13 = 0.0f;\r
- result.M14 = 0.0f;\r
- result.M21 = 0.0f;\r
- result.M22 = scaling.Y;\r
- result.M23 = 0.0f;\r
- result.M24 = 0.0f;\r
- result.M31 = 0.0f;\r
- result.M32 = 0.0f;\r
- result.M33 = scaling.Z;\r
- result.M34 = 0.0f;\r
- result.M41 = 0.0f;\r
- result.M42 = 0.0f;\r
- result.M43 = 0.0f;\r
- result.M44 = 1.0f;\r
- return result;\r
- }\r
-\r
- void Matrix::Scaling( Vector3% scaling, [Out] Matrix% result )\r
- {\r
- result.M11 = scaling.X;\r
- result.M12 = 0.0f;\r
- result.M13 = 0.0f;\r
- result.M14 = 0.0f;\r
- result.M21 = 0.0f;\r
- result.M22 = scaling.Y;\r
- result.M23 = 0.0f;\r
- result.M24 = 0.0f;\r
- result.M31 = 0.0f;\r
- result.M32 = 0.0f;\r
- result.M33 = scaling.Z;\r
- result.M34 = 0.0f;\r
- result.M41 = 0.0f;\r
- result.M42 = 0.0f;\r
- result.M43 = 0.0f;\r
- result.M44 = 1.0f;\r
- }\r
-\r
- Matrix Matrix::AffineTransformation( float scaling, Vector3 rotationCenter, Quaternion rotation, Vector3 translation )\r
- {\r
- Matrix result;\r
- D3DXMatrixAffineTransformation( (D3DXMATRIX*) &result, scaling, (D3DXVECTOR3*) &rotationCenter, (D3DXQUATERNION*) &rotation, (D3DXVECTOR3*) &translation );\r
- return result;\r
- }\r
-\r
- void Matrix::AffineTransformation( float scaling, Vector3% rotationCenter, Quaternion% rotation, Vector3% translation, [Out] Matrix% result )\r
- {\r
- pin_ptr<Vector3> pinRotationCenter = &rotationCenter;\r
- pin_ptr<Quaternion> pinRotation = &rotation;\r
- pin_ptr<Vector3> pinTranslation = &translation;\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixAffineTransformation( (D3DXMATRIX*) pinResult, scaling, (D3DXVECTOR3*) pinRotationCenter, (D3DXQUATERNION*) pinRotation, (D3DXVECTOR3*) pinTranslation );\r
- }\r
- \r
- Matrix Matrix::AffineTransformation2D( float scaling, Vector2 rotationCenter, float rotation, Vector2 translation )\r
- {\r
- Matrix result;\r
- D3DXMatrixAffineTransformation2D( (D3DXMATRIX*) &result, scaling, (D3DXVECTOR2*) &rotationCenter, rotation, (D3DXVECTOR2*) &translation );\r
- return result;\r
- }\r
-\r
- void Matrix::AffineTransformation2D( float scaling, Vector2% rotationCenter, float rotation, Vector2% translation, [Out] Matrix% result )\r
- {\r
- pin_ptr<Vector2> pinRotationCenter = &rotationCenter;\r
- pin_ptr<Vector2> pinTranslation = &translation;\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixAffineTransformation2D( (D3DXMATRIX*) pinResult, scaling, (D3DXVECTOR2*) pinRotationCenter, rotation, (D3DXVECTOR2*) pinTranslation );\r
- }\r
- \r
- Matrix Matrix::Transformation( Vector3 scalingCenter, Quaternion scalingRotation, Vector3 scaling, Vector3 rotationCenter, Quaternion rotation, Vector3 translation )\r
- {\r
- Matrix result;\r
- D3DXMatrixTransformation( (D3DXMATRIX*) &result, (D3DXVECTOR3*) &scalingCenter, (D3DXQUATERNION*) &scalingRotation, (D3DXVECTOR3*) &scaling, (D3DXVECTOR3*) &rotationCenter, (D3DXQUATERNION*) &rotation, (D3DXVECTOR3*) &translation );\r
- return result;\r
- }\r
-\r
- void Matrix::Transformation( Vector3% scalingCenter, Quaternion% scalingRotation, Vector3% scaling, Vector3% rotationCenter, Quaternion% rotation, Vector3% translation, [Out] Matrix% result )\r
- {\r
- pin_ptr<Vector3> pinScalingCenter = &scalingCenter;\r
- pin_ptr<Quaternion> pinScalingRotation = &scalingRotation;\r
- pin_ptr<Vector3> pinScaling = &scaling;\r
- pin_ptr<Vector3> pinRotationCenter = &rotationCenter;\r
- pin_ptr<Quaternion> pinRotation = &rotation;\r
- pin_ptr<Vector3> pinTranslation = &translation;\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixTransformation( (D3DXMATRIX*) pinResult, (D3DXVECTOR3*) pinScalingCenter, (D3DXQUATERNION*) pinScalingRotation, \r
- (D3DXVECTOR3*) pinScaling, (D3DXVECTOR3*) pinRotationCenter, (D3DXQUATERNION*) pinRotation, (D3DXVECTOR3*) pinTranslation );\r
- }\r
- \r
- Matrix Matrix::Transformation2D( Vector2 scalingCenter, float scalingRotation, Vector2 scaling, Vector2 rotationCenter, float rotation, Vector2 translation )\r
- {\r
- Matrix result;\r
- D3DXMatrixTransformation2D( (D3DXMATRIX*) &result, (D3DXVECTOR2*) &scalingCenter, scalingRotation, (D3DXVECTOR2*) &scaling, (D3DXVECTOR2*) &rotationCenter, rotation, (D3DXVECTOR2*) &translation );\r
- return result;\r
- }\r
-\r
- void Matrix::Transformation2D( Vector2% scalingCenter, float scalingRotation, Vector2% scaling, Vector2% rotationCenter, float rotation, Vector2% translation, [Out] Matrix% result )\r
- {\r
- pin_ptr<Vector2> pinScalingCenter = &scalingCenter;\r
- pin_ptr<Vector2> pinScaling = &scaling;\r
- pin_ptr<Vector2> pinRotationCenter = &rotationCenter;\r
- pin_ptr<Vector2> pinTranslation = &translation;\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixTransformation2D( (D3DXMATRIX*) pinResult, (D3DXVECTOR2*) pinScalingCenter, scalingRotation, \r
- (D3DXVECTOR2*) pinScaling, (D3DXVECTOR2*) pinRotationCenter, rotation, (D3DXVECTOR2*) pinTranslation );\r
- }\r
- \r
- Matrix Matrix::LookAtLH(Vector3 eye, Vector3 target, Vector3 up )\r
- {\r
- Matrix result;\r
- D3DXMatrixLookAtLH( (D3DXMATRIX*) &result, (D3DXVECTOR3*) &eye, (D3DXVECTOR3*) &target, (D3DXVECTOR3*) &up );\r
- return result;\r
- }\r
-\r
- void Matrix::LookAtLH(Vector3% eye, Vector3% target, Vector3% up, [Out] Matrix% result )\r
- {\r
- pin_ptr<Vector3> pinEye = &eye;\r
- pin_ptr<Vector3> pinTarget = ⌖\r
- pin_ptr<Vector3> pinUp = &up;\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixLookAtLH( (D3DXMATRIX*) pinResult, (D3DXVECTOR3*) pinEye, (D3DXVECTOR3*) pinTarget, (D3DXVECTOR3*) pinUp );\r
- }\r
- \r
- Matrix Matrix::LookAtRH(Vector3 eye, Vector3 target, Vector3 up )\r
- {\r
- Matrix result;\r
- D3DXMatrixLookAtRH( (D3DXMATRIX*) &result, (D3DXVECTOR3*) &eye, (D3DXVECTOR3*) &target, (D3DXVECTOR3*) &up );\r
- return result;\r
- }\r
-\r
- void Matrix::LookAtRH(Vector3% eye, Vector3% target, Vector3% up, [Out] Matrix% result )\r
- {\r
- pin_ptr<Vector3> pinEye = &eye;\r
- pin_ptr<Vector3> pinTarget = ⌖\r
- pin_ptr<Vector3> pinUp = &up;\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixLookAtRH( (D3DXMATRIX*) pinResult, (D3DXVECTOR3*) pinEye, (D3DXVECTOR3*) pinTarget, (D3DXVECTOR3*) pinUp );\r
- }\r
- \r
- Matrix Matrix::OrthoLH( float width, float height, float znear, float zfar )\r
- {\r
- Matrix result;\r
- D3DXMatrixOrthoLH( (D3DXMATRIX*) &result, width, height, znear, zfar );\r
- return result;\r
- }\r
-\r
- void Matrix::OrthoLH( float width, float height, float znear, float zfar, [Out] Matrix% result )\r
- {\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixOrthoLH( (D3DXMATRIX*) pinResult, width, height, znear, zfar );\r
- }\r
- \r
- Matrix Matrix::OrthoRH( float width, float height, float znear, float zfar )\r
- {\r
- Matrix result;\r
- D3DXMatrixOrthoRH( (D3DXMATRIX*) &result, width, height, znear, zfar );\r
- return result;\r
- }\r
-\r
- void Matrix::OrthoRH( float width, float height, float znear, float zfar, [Out] Matrix% result )\r
- {\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixOrthoRH( (D3DXMATRIX*) pinResult, width, height, znear, zfar );\r
- }\r
- \r
- Matrix Matrix::OrthoOffCenterLH( float left, float right, float bottom, float top, float znear, float zfar )\r
- {\r
- Matrix result;\r
- D3DXMatrixOrthoOffCenterLH( (D3DXMATRIX*) &result, left, right, bottom, top, znear, zfar );\r
- return result;\r
- }\r
-\r
- void Matrix::OrthoOffCenterLH( float left, float right, float bottom, float top, float znear, float zfar, [Out] Matrix% result )\r
- {\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixOrthoOffCenterLH( (D3DXMATRIX*) pinResult, left, right, bottom, top, znear, zfar );\r
- }\r
- \r
- Matrix Matrix::OrthoOffCenterRH( float left, float right, float bottom, float top, float znear, float zfar )\r
- {\r
- Matrix result;\r
- D3DXMatrixOrthoOffCenterRH( (D3DXMATRIX*) &result, left, right, bottom, top, znear, zfar );\r
- return result;\r
- }\r
-\r
- void Matrix::OrthoOffCenterRH( float left, float right, float bottom, float top, float znear, float zfar, [Out] Matrix% result )\r
- {\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixOrthoOffCenterRH( (D3DXMATRIX*) pinResult, left, right, bottom, top, znear, zfar );\r
- }\r
- \r
- Matrix Matrix::PerspectiveLH( float width, float height, float znear, float zfar )\r
- {\r
- Matrix result;\r
- D3DXMatrixPerspectiveLH( (D3DXMATRIX*) &result, width, height, znear, zfar );\r
- return result;\r
- }\r
-\r
- void Matrix::PerspectiveLH( float width, float height, float znear, float zfar, [Out] Matrix% result )\r
- {\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixPerspectiveLH( (D3DXMATRIX*) pinResult, width, height, znear, zfar );\r
- }\r
- \r
- Matrix Matrix::PerspectiveRH( float width, float height, float znear, float zfar )\r
- {\r
- Matrix result;\r
- D3DXMatrixPerspectiveRH( (D3DXMATRIX*) &result, width, height, znear, zfar );\r
- return result;\r
- }\r
-\r
- void Matrix::PerspectiveRH( float width, float height, float znear, float zfar, [Out] Matrix% result )\r
- {\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixPerspectiveRH( (D3DXMATRIX*) pinResult, width, height, znear, zfar );\r
- }\r
-\r
- Matrix Matrix::PerspectiveFovLH( float fov, float aspect, float znear, float zfar )\r
- {\r
- Matrix result;\r
- D3DXMatrixPerspectiveFovLH( (D3DXMATRIX*) &result, fov, aspect, znear, zfar );\r
- return result;\r
- }\r
-\r
- void Matrix::PerspectiveFovLH( float fov, float aspect, float znear, float zfar, [Out] Matrix% result )\r
- {\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixPerspectiveFovLH( (D3DXMATRIX*) pinResult, fov, aspect, znear, zfar );\r
- }\r
- \r
- Matrix Matrix::PerspectiveFovRH( float fov, float aspect, float znear, float zfar )\r
- {\r
- Matrix result;\r
- D3DXMatrixPerspectiveFovRH( (D3DXMATRIX*) &result, fov, aspect, znear, zfar );\r
- return result;\r
- }\r
-\r
- void Matrix::PerspectiveFovRH( float fov, float aspect, float znear, float zfar, [Out] Matrix% result )\r
- {\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixPerspectiveFovRH( (D3DXMATRIX*) pinResult, fov, aspect, znear, zfar );\r
- }\r
- \r
- Matrix Matrix::PerspectiveOffCenterLH( float left, float right, float bottom, float top, float znear, float zfar )\r
- {\r
- Matrix result;\r
- D3DXMatrixPerspectiveOffCenterLH( (D3DXMATRIX*) &result, left, right, bottom, top, znear, zfar );\r
- return result;\r
- }\r
-\r
- void Matrix::PerspectiveOffCenterLH( float left, float right, float bottom, float top, float znear, float zfar, [Out] Matrix% result )\r
- {\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixPerspectiveOffCenterLH( (D3DXMATRIX*) pinResult, left, right, bottom, top, znear, zfar );\r
- }\r
- \r
- Matrix Matrix::PerspectiveOffCenterRH( float left, float right, float bottom, float top, float znear, float zfar )\r
- {\r
- Matrix result;\r
- D3DXMatrixPerspectiveOffCenterRH( (D3DXMATRIX*) &result, left, right, bottom, top, znear, zfar );\r
- return result;\r
- }\r
-\r
- void Matrix::PerspectiveOffCenterRH( float left, float right, float bottom, float top, float znear, float zfar, [Out] Matrix% result )\r
- {\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixPerspectiveOffCenterRH( (D3DXMATRIX*) pinResult, left, right, bottom, top, znear, zfar );\r
- }\r
-\r
- Matrix Matrix::Reflection( Plane plane )\r
- {\r
- Matrix result;\r
- plane.Normalize();\r
- float x = plane.Normal.X;\r
- float y = plane.Normal.Y;\r
- float z = plane.Normal.Z;\r
- float x2 = -2.0f * x;\r
- float y2 = -2.0f * y;\r
- float z2 = -2.0f * z;\r
- result.M11 = (x2 * x) + 1.0f;\r
- result.M12 = y2 * x;\r
- result.M13 = z2 * x;\r
- result.M14 = 0.0f;\r
- result.M21 = x2 * y;\r
- result.M22 = (y2 * y) + 1.0f;\r
- result.M23 = z2 * y;\r
- result.M24 = 0.0f;\r
- result.M31 = x2 * z;\r
- result.M32 = y2 * z;\r
- result.M33 = (z2 * z) + 1.0f;\r
- result.M34 = 0.0f;\r
- result.M41 = x2 * plane.D;\r
- result.M42 = y2 * plane.D;\r
- result.M43 = z2 * plane.D;\r
- result.M44 = 1.0f;\r
- return result;\r
- }\r
-\r
- void Matrix::Reflection( Plane% plane, [Out] Matrix% result )\r
- {\r
- plane.Normalize();\r
- float x = plane.Normal.X;\r
- float y = plane.Normal.Y;\r
- float z = plane.Normal.Z;\r
- float x2 = -2.0f * x;\r
- float y2 = -2.0f * y;\r
- float z2 = -2.0f * z;\r
- result.M11 = (x2 * x) + 1.0f;\r
- result.M12 = y2 * x;\r
- result.M13 = z2 * x;\r
- result.M14 = 0.0f;\r
- result.M21 = x2 * y;\r
- result.M22 = (y2 * y) + 1.0f;\r
- result.M23 = z2 * y;\r
- result.M24 = 0.0f;\r
- result.M31 = x2 * z;\r
- result.M32 = y2 * z;\r
- result.M33 = (z2 * z) + 1.0f;\r
- result.M34 = 0.0f;\r
- result.M41 = x2 * plane.D;\r
- result.M42 = y2 * plane.D;\r
- result.M43 = z2 * plane.D;\r
- result.M44 = 1.0f;\r
- }\r
- \r
- Matrix Matrix::Shadow( Vector4 light, Plane plane )\r
- {\r
- Matrix result;\r
- plane.Normalize();\r
- float dot = ((plane.Normal.X * light.X) + (plane.Normal.Y * light.Y)) + (plane.Normal.Z * light.Z);\r
- float x = -plane.Normal.X;\r
- float y = -plane.Normal.Y;\r
- float z = -plane.Normal.Z;\r
- float d = -plane.D;\r
- result.M11 = (x * light.X) + dot;\r
- result.M21 = y * light.X;\r
- result.M31 = z * light.X;\r
- result.M41 = d * light.X;\r
- result.M12 = x * light.Y;\r
- result.M22 = (y * light.Y) + dot;\r
- result.M32 = z * light.Y;\r
- result.M42 = d * light.Y;\r
- result.M13 = x * light.Z;\r
- result.M23 = y * light.Z;\r
- result.M33 = (z * light.Z) + dot;\r
- result.M43 = d * light.Z;\r
- result.M14 = 0.0f;\r
- result.M24 = 0.0f;\r
- result.M34 = 0.0f;\r
- result.M44 = dot;\r
- return result;\r
- }\r
-\r
- void Matrix::Shadow( Vector4% light, Plane% plane, [Out] Matrix% result )\r
- {\r
- plane.Normalize();\r
- float dot = ((plane.Normal.X * light.X) + (plane.Normal.Y * light.Y)) + (plane.Normal.Z * light.Z);\r
- float x = -plane.Normal.X;\r
- float y = -plane.Normal.Y;\r
- float z = -plane.Normal.Z;\r
- float d = -plane.D;\r
- result.M11 = (x * light.X) + dot;\r
- result.M21 = y * light.X;\r
- result.M31 = z * light.X;\r
- result.M41 = d * light.X;\r
- result.M12 = x * light.Y;\r
- result.M22 = (y * light.Y) + dot;\r
- result.M32 = z * light.Y;\r
- result.M42 = d * light.Y;\r
- result.M13 = x * light.Z;\r
- result.M23 = y * light.Z;\r
- result.M33 = (z * light.Z) + dot;\r
- result.M43 = d * light.Z;\r
- result.M14 = 0.0f;\r
- result.M24 = 0.0f;\r
- result.M34 = 0.0f;\r
- result.M44 = dot;\r
- }\r
-\r
- Matrix Matrix::Invert( Matrix mat )\r
- {\r
- Matrix result;\r
- D3DXMatrixInverse( (D3DXMATRIX*) &result, NULL, (D3DXMATRIX*) &mat );\r
- return result;\r
- }\r
-\r
- void Matrix::Invert( Matrix% mat, [Out] Matrix% result )\r
- {\r
- pin_ptr<Matrix> pinMatrix = &mat;\r
- pin_ptr<Matrix> pinResult = &result;\r
- D3DXMatrixInverse( (D3DXMATRIX*) pinResult, NULL, (D3DXMATRIX*) pinMatrix );\r
- }\r
-\r
- Matrix Matrix::Transpose( Matrix mat )\r
- {\r
- Matrix result;\r
- result.M11 = mat.M11;\r
- result.M12 = mat.M21;\r
- result.M13 = mat.M31;\r
- result.M14 = mat.M41;\r
- result.M21 = mat.M12;\r
- result.M22 = mat.M22;\r
- result.M23 = mat.M32;\r
- result.M24 = mat.M42;\r
- result.M31 = mat.M13;\r
- result.M32 = mat.M23;\r
- result.M33 = mat.M33;\r
- result.M34 = mat.M43;\r
- result.M41 = mat.M14;\r
- result.M42 = mat.M24;\r
- result.M43 = mat.M34;\r
- result.M44 = mat.M44;\r
- return result;\r
- }\r
-\r
- void Matrix::Transpose( Matrix% mat, [Out] Matrix% result )\r
- {\r
- Matrix r;\r
- r.M11 = mat.M11;\r
- r.M12 = mat.M21;\r
- r.M13 = mat.M31;\r
- r.M14 = mat.M41;\r
- r.M21 = mat.M12;\r
- r.M22 = mat.M22;\r
- r.M23 = mat.M32;\r
- r.M24 = mat.M42;\r
- r.M31 = mat.M13;\r
- r.M32 = mat.M23;\r
- r.M33 = mat.M33;\r
- r.M34 = mat.M43;\r
- r.M41 = mat.M14;\r
- r.M42 = mat.M24;\r
- r.M43 = mat.M34;\r
- r.M44 = mat.M44;\r
-\r
- result = r;\r
- }\r
-\r
- Matrix Matrix::operator * ( Matrix left, Matrix right )\r
- {\r
- Matrix result;\r
- result.M11 = (left.M11 * right.M11) + (left.M12 * right.M21) + (left.M13 * right.M31) + (left.M14 * right.M41);\r
- result.M12 = (left.M11 * right.M12) + (left.M12 * right.M22) + (left.M13 * right.M32) + (left.M14 * right.M42);\r
- result.M13 = (left.M11 * right.M13) + (left.M12 * right.M23) + (left.M13 * right.M33) + (left.M14 * right.M43);\r
- result.M14 = (left.M11 * right.M14) + (left.M12 * right.M24) + (left.M13 * right.M34) + (left.M14 * right.M44);\r
- result.M21 = (left.M21 * right.M11) + (left.M22 * right.M21) + (left.M23 * right.M31) + (left.M24 * right.M41);\r
- result.M22 = (left.M21 * right.M12) + (left.M22 * right.M22) + (left.M23 * right.M32) + (left.M24 * right.M42);\r
- result.M23 = (left.M21 * right.M13) + (left.M22 * right.M23) + (left.M23 * right.M33) + (left.M24 * right.M43);\r
- result.M24 = (left.M21 * right.M14) + (left.M22 * right.M24) + (left.M23 * right.M34) + (left.M24 * right.M44);\r
- result.M31 = (left.M31 * right.M11) + (left.M32 * right.M21) + (left.M33 * right.M31) + (left.M34 * right.M41);\r
- result.M32 = (left.M31 * right.M12) + (left.M32 * right.M22) + (left.M33 * right.M32) + (left.M34 * right.M42);\r
- result.M33 = (left.M31 * right.M13) + (left.M32 * right.M23) + (left.M33 * right.M33) + (left.M34 * right.M43);\r
- result.M34 = (left.M31 * right.M14) + (left.M32 * right.M24) + (left.M33 * right.M34) + (left.M34 * right.M44);\r
- result.M41 = (left.M41 * right.M11) + (left.M42 * right.M21) + (left.M43 * right.M31) + (left.M44 * right.M41);\r
- result.M42 = (left.M41 * right.M12) + (left.M42 * right.M22) + (left.M43 * right.M32) + (left.M44 * right.M42);\r
- result.M43 = (left.M41 * right.M13) + (left.M42 * right.M23) + (left.M43 * right.M33) + (left.M44 * right.M43);\r
- result.M44 = (left.M41 * right.M14) + (left.M42 * right.M24) + (left.M43 * right.M34) + (left.M44 * right.M44);\r
- return result;\r
- }\r
-\r
- Matrix Matrix::operator * ( Matrix left, float right )\r
- {\r
- Matrix result;\r
- result.M11 = left.M11 * right;\r
- result.M12 = left.M12 * right;\r
- result.M13 = left.M13 * right;\r
- result.M14 = left.M14 * right;\r
- result.M21 = left.M21 * right;\r
- result.M22 = left.M22 * right;\r
- result.M23 = left.M23 * right;\r
- result.M24 = left.M24 * right;\r
- result.M31 = left.M31 * right;\r
- result.M32 = left.M32 * right;\r
- result.M33 = left.M33 * right;\r
- result.M34 = left.M34 * right;\r
- result.M41 = left.M41 * right;\r
- result.M42 = left.M42 * right;\r
- result.M43 = left.M43 * right;\r
- result.M44 = left.M44 * right;\r
- return result;\r
- }\r
-\r
- Matrix Matrix::operator * ( float right, Matrix left )\r
- {\r
- return left * right;\r
- }\r
-\r
- Matrix Matrix::operator / ( Matrix left, Matrix right )\r
- {\r
- Matrix result;\r
- result.M11 = left.M11 / right.M11;\r
- result.M12 = left.M12 / right.M12;\r
- result.M13 = left.M13 / right.M13;\r
- result.M14 = left.M14 / right.M14;\r
- result.M21 = left.M21 / right.M21;\r
- result.M22 = left.M22 / right.M22;\r
- result.M23 = left.M23 / right.M23;\r
- result.M24 = left.M24 / right.M24;\r
- result.M31 = left.M31 / right.M31;\r
- result.M32 = left.M32 / right.M32;\r
- result.M33 = left.M33 / right.M33;\r
- result.M34 = left.M34 / right.M34;\r
- result.M41 = left.M41 / right.M41;\r
- result.M42 = left.M42 / right.M42;\r
- result.M43 = left.M43 / right.M43;\r
- result.M44 = left.M44 / right.M44;\r
- return result;\r
- }\r
-\r
- Matrix Matrix::operator / ( Matrix left, float right )\r
- {\r
- Matrix result;\r
- result.M11 = left.M11 / right;\r
- result.M12 = left.M12 / right;\r
- result.M13 = left.M13 / right;\r
- result.M14 = left.M14 / right;\r
- result.M21 = left.M21 / right;\r
- result.M22 = left.M22 / right;\r
- result.M23 = left.M23 / right;\r
- result.M24 = left.M24 / right;\r
- result.M31 = left.M31 / right;\r
- result.M32 = left.M32 / right;\r
- result.M33 = left.M33 / right;\r
- result.M34 = left.M34 / right;\r
- result.M41 = left.M41 / right;\r
- result.M42 = left.M42 / right;\r
- result.M43 = left.M43 / right;\r
- result.M44 = left.M44 / right;\r
- return result;\r
- }\r
-\r
- Matrix Matrix::operator + ( Matrix left, Matrix right )\r
- {\r
- Matrix result;\r
- result.M11 = left.M11 + right.M11;\r
- result.M12 = left.M12 + right.M12;\r
- result.M13 = left.M13 + right.M13;\r
- result.M14 = left.M14 + right.M14;\r
- result.M21 = left.M21 + right.M21;\r
- result.M22 = left.M22 + right.M22;\r
- result.M23 = left.M23 + right.M23;\r
- result.M24 = left.M24 + right.M24;\r
- result.M31 = left.M31 + right.M31;\r
- result.M32 = left.M32 + right.M32;\r
- result.M33 = left.M33 + right.M33;\r
- result.M34 = left.M34 + right.M34;\r
- result.M41 = left.M41 + right.M41;\r
- result.M42 = left.M42 + right.M42;\r
- result.M43 = left.M43 + right.M43;\r
- result.M44 = left.M44 + right.M44;\r
- return result;\r
- }\r
-\r
- Matrix Matrix::operator - ( Matrix left, Matrix right )\r
- {\r
- Matrix result;\r
- result.M11 = left.M11 - right.M11;\r
- result.M12 = left.M12 - right.M12;\r
- result.M13 = left.M13 - right.M13;\r
- result.M14 = left.M14 - right.M14;\r
- result.M21 = left.M21 - right.M21;\r
- result.M22 = left.M22 - right.M22;\r
- result.M23 = left.M23 - right.M23;\r
- result.M24 = left.M24 - right.M24;\r
- result.M31 = left.M31 - right.M31;\r
- result.M32 = left.M32 - right.M32;\r
- result.M33 = left.M33 - right.M33;\r
- result.M34 = left.M34 - right.M34;\r
- result.M41 = left.M41 - right.M41;\r
- result.M42 = left.M42 - right.M42;\r
- result.M43 = left.M43 - right.M43;\r
- result.M44 = left.M44 - right.M44;\r
- return result;\r
- }\r
-\r
- Matrix Matrix::operator - ( Matrix matrix )\r
- {\r
- Matrix result;\r
- result.M11 = -matrix.M11;\r
- result.M12 = -matrix.M12;\r
- result.M13 = -matrix.M13;\r
- result.M14 = -matrix.M14;\r
- result.M21 = -matrix.M21;\r
- result.M22 = -matrix.M22;\r
- result.M23 = -matrix.M23;\r
- result.M24 = -matrix.M24;\r
- result.M31 = -matrix.M31;\r
- result.M32 = -matrix.M32;\r
- result.M33 = -matrix.M33;\r
- result.M34 = -matrix.M34;\r
- result.M41 = -matrix.M41;\r
- result.M42 = -matrix.M42;\r
- result.M43 = -matrix.M43;\r
- result.M44 = -matrix.M44;\r
- return result;\r
- }\r
-\r
- bool Matrix::operator == ( Matrix left, Matrix right )\r
- {\r
- return Matrix::Equals( left, right );\r
- }\r
-\r
- bool Matrix::operator != ( Matrix left, Matrix right )\r
- {\r
- return !Matrix::Equals( left, right );\r
- }\r
-\r
- String^ Matrix::ToString()\r
- {\r
- return String::Format( CultureInfo::CurrentCulture, "[[M11:{0} M12:{1} M13:{2} M14:{3}] [M21:{4} M22:{5} M23:{6} M24:{7}] [M31:{8} M32:{9} M33:{10} M34:{11}] [M41:{12} M42:{13} M43:{14} M44:{15}]]",\r
- M11.ToString(CultureInfo::CurrentCulture), M12.ToString(CultureInfo::CurrentCulture), M13.ToString(CultureInfo::CurrentCulture), M14.ToString(CultureInfo::CurrentCulture),\r
- M21.ToString(CultureInfo::CurrentCulture), M22.ToString(CultureInfo::CurrentCulture), M23.ToString(CultureInfo::CurrentCulture), M24.ToString(CultureInfo::CurrentCulture),\r
- M31.ToString(CultureInfo::CurrentCulture), M32.ToString(CultureInfo::CurrentCulture), M33.ToString(CultureInfo::CurrentCulture), M34.ToString(CultureInfo::CurrentCulture),\r
- M41.ToString(CultureInfo::CurrentCulture), M42.ToString(CultureInfo::CurrentCulture), M43.ToString(CultureInfo::CurrentCulture), M44.ToString(CultureInfo::CurrentCulture) );\r
- }\r
-\r
- int Matrix::GetHashCode()\r
- {\r
- return M11.GetHashCode() + M12.GetHashCode() + M13.GetHashCode() + M14.GetHashCode() +\r
- M21.GetHashCode() + M22.GetHashCode() + M23.GetHashCode() + M24.GetHashCode() +\r
- M31.GetHashCode() + M32.GetHashCode() + M33.GetHashCode() + M34.GetHashCode() +\r
- M41.GetHashCode() + M42.GetHashCode() + M43.GetHashCode() + M44.GetHashCode();\r
- }\r
-\r
- bool Matrix::Equals( Object^ value )\r
- {\r
- if( value == nullptr )\r
- return false;\r
-\r
- if( value->GetType() != GetType() )\r
- return false;\r
-\r
- return Equals( safe_cast<Matrix>( value ) );\r
- }\r
-\r
- bool Matrix::Equals( Matrix value )\r
- {\r
- return ( M11 == value.M11 && M12 == value.M12 && M13 == value.M13 && M14 == value.M14 &&\r
- M21 == value.M21 && M22 == value.M22 && M23 == value.M23 && M24 == value.M24 &&\r
- M31 == value.M31 && M32 == value.M32 && M33 == value.M33 && M34 == value.M34 &&\r
- M41 == value.M41 && M42 == value.M42 && M43 == value.M43 && M44 == value.M44 );\r
- }\r
-\r
- bool Matrix::Equals( Matrix% value1, Matrix% value2 )\r
- {\r
- return ( value1.M11 == value2.M11 && value1.M12 == value2.M12 && value1.M13 == value2.M13 && value1.M14 == value2.M14 &&\r
- value1.M21 == value2.M21 && value1.M22 == value2.M22 && value1.M23 == value2.M23 && value1.M24 == value2.M24 &&\r
- value1.M31 == value2.M31 && value1.M32 == value2.M32 && value1.M33 == value2.M33 && value1.M34 == value2.M34 &&\r
- value1.M41 == value2.M41 && value1.M42 == value2.M42 && value1.M43 == value2.M43 && value1.M44 == value2.M44 );\r
- }\r
-}\r