From a4b36e6d1e20b5036d1ed7cf9f61a48dbbf77812 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 27 Apr 2008 13:08:12 +0000 Subject: 3D flight --- src/math/matrix4f.cc | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/math/matrix4f.cc (limited to 'src/math/matrix4f.cc') diff --git a/src/math/matrix4f.cc b/src/math/matrix4f.cc new file mode 100644 index 0000000..d73b12e --- /dev/null +++ b/src/math/matrix4f.cc @@ -0,0 +1,79 @@ +/* + math/matrix4f.cc + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +// project headers +#include "math/matrix4f.h" + +// C++ headers +#include + +namespace math +{ + +Matrix4f::Matrix4f() +{ + clear(); +} + +Matrix4f::Matrix4f(const Matrix4f & other) +{ + assign(other); +} + +Matrix4f::Matrix4f(const Axis & axis) +{ + assign(axis); +} + +void Matrix4f::clear() +{ + memset(matrix, 0, sizeof(matrix)); +} + +void Matrix4f::unity() +{ + memset(matrix, 0, sizeof(matrix)); + for (int i=0; i <4; i++) + matrix[i][i] = 1; +} + +void Matrix4f::assign(const Matrix4f & other) +{ + memcpy(matrix, other.matrix, sizeof(matrix)); +} + +void Matrix4f::assign(const Axis & axis) +{ + memset(matrix, 0, sizeof(matrix)); + for (int i=0; i < 3; i++) { + memcpy(&matrix[i][0], axis[i].ptr(), sizeof(float) * 3); + } + matrix[3][3] = 1; +} + +Matrix4f & Matrix4f::operator=(const Matrix4f &other) +{ + assign(other); + return(*this); +} + +Matrix4f & Matrix4f::operator=(const Axis & axis) +{ + assign(axis); + return(*this); +} + +Matrix4f const Matrix4f::transpose() +{ + Matrix4f t; + + for (size_t i = 0; i < 4; i++) + for (size_t j = 0; j < 4; j++) + t.matrix[j][i] = matrix[i][j]; + return t; +} + +} -- cgit v1.2.3