[AE Engine logo] Public API Reference
Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

matrix4.h

00001 /*
00002  *  AE Engine
00003  *
00004  *  Copyright (C) 2003 Riku "Rakkis" Nurminen
00005  *
00006  *  This program is free software; you can redistribute it and/or modify
00007  *  it under the terms of the GNU General Public License as published by
00008  *  the Free Software Foundation; either version 2 of the License, or
00009  *  (at your option) any later version.
00010  *
00011  *  This program is distributed in the hope that it will be useful,
00012  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  *  GNU General Public License for more details.
00015  *
00016  *  You should have received a copy of the GNU General Public License
00017  *  along with this program; if not, write to the Free Software
00018  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019  *
00020  */
00021 
00022 #ifndef __AELIB_AEGEOM_MATRIX4_H__
00023 #define __AELIB_AEGEOM_MATRIX4_H__
00024 
00025 #include <aegeom/matrix3.h>
00026 #include <aegeom/vector4.h>
00027 
00031 class aeMatrix4 {
00032  public:
00036         inline aeMatrix4() {}
00037 
00058         inline aeMatrix4(float nm11, float nm12, float nm13, float nm14,
00059                                          float nm21, float nm22, float nm23, float nm24,
00060                                          float nm31, float nm32, float nm33, float nm34,
00061                                          float nm41, float nm42, float nm43, float nm44) :
00062                 m11(nm11), m12(nm12), m13(nm13), m14(nm14),
00063                 m21(nm21), m22(nm22), m23(nm23), m24(nm24),
00064                 m31(nm31), m32(nm32), m33(nm33), m34(nm34),
00065                 m41(nm41), m42(nm42), m43(nm43), m44(nm44) {}
00066 
00072         inline aeMatrix4(const aeMatrix4 &m) :
00073                 m11(m.m11), m12(m.m12), m13(m.m13), m14(m.m14),
00074                 m21(m.m21), m22(m.m22), m23(m.m23), m24(m.m24),
00075                 m31(m.m31), m32(m.m32), m33(m.m33), m34(m.m34),
00076                 m41(m.m41), m42(m.m42), m43(m.m43), m44(m.m44) {}
00077 
00084         inline aeMatrix4(const aeMatrix3 &m) :
00085                 m11(m.m11), m12(m.m12), m13(m.m13), m14(0.0),
00086                 m21(m.m21), m22(m.m22), m23(m.m23), m24(0.0),
00087                 m31(m.m31), m32(m.m32), m33(m.m33), m34(0.0),
00088                 m41(0.0), m42(0.0), m43(0.0), m44(1.0) {}
00089 
00090         inline ~aeMatrix4() {}
00091 
00093         float m11;
00095         float m12;
00097         float m13;
00099         float m14;
00101         float m21;
00103         float m22;
00105         float m23;
00107         float m24;
00109         float m31;
00111         float m32;
00113         float m33;
00115         float m34;
00117         float m41;
00119         float m42;
00121         float m43;
00123         float m44;
00124 
00132         aeMatrix4 & operator+=(const aeMatrix4 &m);
00133 
00141         aeMatrix4 & operator-=(const aeMatrix4 &m);
00142 
00150         aeMatrix4 & operator*=(const aeMatrix4 &m);
00151 
00159         aeMatrix4 & operator*=(float s);
00160 
00168         aeMatrix4 & operator/=(float s);
00169 
00175         inline aeMatrix4 operator+() const { return *this; }
00176 
00182         inline aeMatrix4 operator-() const {
00183                 return aeMatrix4(-m11, -m12, -m13, -m14,
00184                                                  -m21, -m22, -m23, -m24,
00185                                                  -m31, -m32, -m33, -m34,
00186                                                  -m41, -m42, -m43, -m44);
00187         }
00188 
00197         friend aeMatrix4 operator+(const aeMatrix4 &m1, const aeMatrix4 &m2);
00198 
00207         friend aeMatrix4 operator-(const aeMatrix4 &m1, const aeMatrix4 &m2);
00208 
00217         friend aeMatrix4 operator*(const aeMatrix4 &m1, const aeMatrix4 &m2);
00218 
00227         inline friend aeVector3 operator*(const aeMatrix4 &m, const aeVector3 &v) {
00228                 return aeVector3(m.m11 * v.x + m.m12 * v.y + m.m13 * v.z,
00229                                                  m.m21 * v.x + m.m22 * v.y + m.m23 * v.z,
00230                                                  m.m31 * v.x + m.m32 * v.y + m.m33 * v.z);
00231         }
00232 
00241         friend aeMatrix4 operator*(const aeMatrix4 &m, float f);
00242 
00251         friend aeMatrix4 operator*(float f, const aeMatrix4 &m);
00252 
00261         friend aeMatrix4 operator/(const aeMatrix4 &m, float f);
00262 
00271         friend bool operator==(const aeMatrix4 &m1, const aeMatrix4 &m2);
00272 
00281         friend bool operator!=(const aeMatrix4 &m1, const aeMatrix4 &m2);
00282 
00288         inline aeVector4 getFirstRow() const { return aeVector4(m11, m12, m13, m14); }
00289 
00295         inline aeVector4 getSecondRow() const { return aeVector4(m21, m22, m23, m24); }
00296 
00302         inline aeVector4 getThirdRow() const { return aeVector4(m31, m32, m33, m34); }
00303 
00309         inline aeVector4 getFourthRow() const { return aeVector4(m41, m42, m43, m44); }
00310 
00316         inline aeVector4 getFirstColumn() const { return aeVector4(m11, m21, m31, m41); }
00317 
00323         inline aeVector4 getSecondColumn() const { return aeVector4(m12, m22, m32, m42); }
00324 
00330         inline aeVector4 getThirdColumn() const { return aeVector4(m13, m23, m33, m43); }
00331 
00337         inline aeVector4 getFourthColumn() const { return aeVector4(m14, m24, m34, m44); }
00338 
00359         inline void set(float nm11, float nm12, float nm13, float nm14,
00360                                         float nm21, float nm22, float nm23, float nm24,
00361                                         float nm31, float nm32, float nm33, float nm34,
00362                                         float nm41, float nm42, float nm43, float nm44) {
00363                 m11 = nm11; m12 = nm12; m13 = nm13; m14 = nm14;
00364                 m21 = nm21; m22 = nm22; m23 = nm23; m24 = nm24;
00365                 m31 = nm31; m32 = nm32; m33 = nm33; m34 = nm34;
00366                 m41 = nm41; m42 = nm42; m43 = nm43; m44 = nm44;
00367         }
00368 
00374         inline void set(const aeMatrix4 &m) {
00375                 m11 = m.m11; m12 = m.m12; m13 = m.m13; m14 = m.m14;
00376                 m21 = m.m21; m22 = m.m22; m23 = m.m23; m24 = m.m24;
00377                 m31 = m.m31; m32 = m.m32; m33 = m.m33; m34 = m.m34;
00378                 m41 = m.m41; m42 = m.m42; m43 = m.m43; m44 = m.m44;
00379         }
00380 
00386         inline void set(const aeMatrix3 &m) {
00387                 m11 = m.m11; m12 = m.m12; m13 = m.m13;
00388                 m21 = m.m21; m22 = m.m22; m23 = m.m23;
00389                 m31 = m.m31; m32 = m.m32; m33 = m.m33;
00390         }
00391 
00395         void setToIdentity();
00396 
00402         bool isIdentity() const;
00403 
00407         void transpose();
00408 
00414         aeMatrix4 getTranspose() const;
00415 
00421         inline void extract3x3(aeMatrix3 &m3x3) const {
00422                 m3x3.m11 = m11; m3x3.m12 = m12; m3x3.m13 = m13;
00423                 m3x3.m21 = m21; m3x3.m22 = m22; m3x3.m23 = m23;
00424                 m3x3.m31 = m31; m3x3.m32 = m32; m3x3.m33 = m33;
00425         }
00426 };
00427 
00428 #endif // __AELIB_AEENGINE_MATRIX4_H__

AE Engine Public API Reference
Generated on Wed Apr 9 09:43:39 2003 by Doxygen.