/* ** ClanLib SDK ** Copyright (c) 1997-2005 The ClanLib Team ** ** This software is provided 'as-is', without any express or implied ** warranty. In no event will the authors be held liable for any damages ** arising from the use of this software. ** ** Permission is granted to anyone to use this software for any purpose, ** including commercial applications, and to alter it and redistribute it ** freely, subject to the following restrictions: ** ** 1. The origin of this software must not be misrepresented; you must not ** claim that you wrote the original software. If you use this software ** in a product, an acknowledgment in the product documentation would be ** appreciated but is not required. ** 2. Altered source versions must be plainly marked as such, and must not be ** misrepresented as being the original software. ** 3. This notice may not be removed or altered from any source distribution. ** ** Note: Some of the libraries ClanLib may link to may have additional ** requirements or restrictions. ** ** File Author(s): ** ** Magnus Norddahl ** (if your name is missing here, please add it) */ #include "Core/precomp.h" #include "API/Core/Math/matrix4x4.h" ///////////////////////////////////////////////////////////////////////////// // CL_Matrix4x4 construction: CL_Matrix4x4::CL_Matrix4x4(bool identity) { memset(matrix, 0, sizeof(double[16])); if (identity) { matrix[0] = 1.0; matrix[5] = 1.0; matrix[10] = 1.0; matrix[15] = 1.0; } } CL_Matrix4x4::CL_Matrix4x4(const CL_Matrix4x4 ©) { for (int i=0; i<16; i++) matrix[i] = copy.matrix[i]; } CL_Matrix4x4::CL_Matrix4x4(double *init_matrix) { for (int i=0; i<16; i++) matrix[i] = init_matrix[i]; } CL_Matrix4x4::CL_Matrix4x4(float *init_matrix) { for (int i=0; i<16; i++) matrix[i] = (double) init_matrix[i]; } ///////////////////////////////////////////////////////////////////////////// // CL_Matrix4x4 attributes: double CL_Matrix4x4::get_origin_x() const { return matrix[12]; } double CL_Matrix4x4::get_origin_y() const { return matrix[13]; } double CL_Matrix4x4::get_origin_z() const { return matrix[14]; } ///////////////////////////////////////////////////////////////////////////// // CL_Matrix4x4 operations: bool CL_Matrix4x4::operator==(const CL_Matrix4x4 &other) const { for (int i=0; i<16; i++) if (matrix[i] != other.matrix[i]) return false; return true; } bool CL_Matrix4x4::operator!=(const CL_Matrix4x4 &other) const { for (int i=0; i<16; i++) if (matrix[i] != other.matrix[i]) return true; return false; } CL_Matrix4x4 &CL_Matrix4x4::operator =(const CL_Matrix4x4 ©) { for (int i=0; i<16; i++) matrix[i] = copy.matrix[i]; return *this; } CL_Matrix4x4 CL_Matrix4x4::multiply(const CL_Matrix4x4 &mult) const { CL_Matrix4x4 result; for (int x=0; x<4; x++) { for (int y=0; y<4; y++) { result.matrix[x+y*4] = matrix[x]*mult.matrix[y*4] + matrix[x+4]*mult.matrix[y*4+1] + matrix[x+8]*mult.matrix[y*4+2] + matrix[x+12]*mult.matrix[y*4+3]; } } return result; } ///////////////////////////////////////////////////////////////////////////// // CL_Matrix4x4 implementation: