OSDN Git Service

fix CMakeList.txt for windows
[moflib/moflib.git] / moflib-1.0 / moflib / moflib / mof / Matrix3D.hpp
1 #pragma once
2 #include "mof/Vector3D.hpp"
3 #include <mof/real.hpp>
4 #include <memory>
5
6
7 namespace mof{
8
9     class Matrix3D
10     {
11     public:
12         struct Array
13         {
14             real elements[4][4];
15         };
16     private:
17         std::shared_ptr<Array> m_pImpl;
18     public:
19         
20         Matrix3D();
21         explicit Matrix3D(const Array &);
22         ~Matrix3D();
23         real at(int row , int column) const;
24         Array getArray() const;
25
26         static Matrix3D createIdentity();
27         static Matrix3D createTransposed(const Matrix3D& matrix);
28         static Matrix3D createRotation(const mof::Vector3D& angle);
29         static Matrix3D createTranslation(const mof::Vector3D& position);
30         static Matrix3D createScaling(const mof::Vector3D& scale);
31         static Matrix3D createLookAtLH( const Vector3D& eye , const Vector3D& lookAt , const Vector3D& up );
32         static Vector3D getTranslation(const mof::Matrix3D& matrix);
33         Vector3D getDiagonal() const;
34
35
36         Matrix3D operator *(const mof::Matrix3D& matrix ) const;
37         Matrix3D operator +(const mof::Matrix3D& matrix ) const;
38         Matrix3D operator -(const mof::Matrix3D& matrix ) const;
39
40         friend Vector3D operator *(const mof::Vector3D& vec , const mof::Matrix3D& matrix);
41         friend Matrix3D operator *(const mof::Matrix3D& matrix , real f);
42         friend Matrix3D operator *(real f ,  const mof::Matrix3D & matrix);
43         friend std::ostream& operator <<(std::ostream& os , const mof::Matrix3D& mat);
44     }; // class Matrix3D
45         
46     std::ostream& operator <<(std::ostream& os , const mof::Matrix3D& mat);
47
48 } // namespace mof
49