inlib  1.2.0
Public Member Functions
inlib::mat4f Class Reference
Inheritance diagram for inlib::mat4f:
Inheritance graph
[legend]
Collaboration diagram for inlib::mat4f:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 mat4f ()
virtual ~mat4f ()
 mat4f (const mat4f &a_from)
mat4foperator= (const mat4f &a_from)
 mat4f (float a_00, float a_01, float a_02, float a_03, float a_10, float a_11, float a_12, float a_13, float a_20, float a_21, float a_22, float a_23, float a_30, float a_31, float a_32, float a_33)
void set_matrix (float a_00, float a_01, float a_02, float a_03, float a_10, float a_11, float a_12, float a_13, float a_20, float a_21, float a_22, float a_23, float a_30, float a_31, float a_32, float a_33)
void set_matrix (const mat4f &a_from)
void set_translate (float a_x, float a_y, float a_z)
void set_rotate (float a_x, float a_y, float a_z, float a_angle)
void set_ortho (float a_l, float a_r, float a_b, float a_t, float a_n, float a_f)
void set_frustum (float a_l, float a_r, float a_b, float a_t, float a_n, float a_f)
void mul_3f (float &a_x, float &a_y, float &a_z) const
void mul_2f (float &a_x, float &a_y) const
void mul_scale (float a_sx, float a_sy, float a_sz)
void mul_trans (float a_x, float a_y, float a_z)
void mul_mtx (const mat4f &a_from)
const float * data () const

Detailed Description

Definition at line 14 of file mat4f.


Constructor & Destructor Documentation

inlib::mat4f::mat4f ( ) [inline]

Definition at line 16 of file mat4f.

virtual inlib::mat4f::~mat4f ( ) [inline, virtual]

Definition at line 17 of file mat4f.

{}
inlib::mat4f::mat4f ( const mat4f a_from) [inline]

Definition at line 19 of file mat4f.

inlib::mat4f::mat4f ( float  a_00,
float  a_01,
float  a_02,
float  a_03,
float  a_10,
float  a_11,
float  a_12,
float  a_13,
float  a_20,
float  a_21,
float  a_22,
float  a_23,
float  a_30,
float  a_31,
float  a_32,
float  a_33 
) [inline]

Definition at line 51 of file mat4f.

  {
    //a_<R><C>
    //m_vector[R + C * 4];
    std::vector<float>& vec = inlib::array<float>::m_vector;
    vec[0] = a_00;vec[4] = a_01;vec[ 8] = a_02;vec[12] = a_03;
    vec[1] = a_10;vec[5] = a_11;vec[ 9] = a_12;vec[13] = a_13;
    vec[2] = a_20;vec[6] = a_21;vec[10] = a_22;vec[14] = a_23;
    vec[3] = a_30;vec[7] = a_31;vec[11] = a_32;vec[15] = a_33;
  }

Member Function Documentation

const float* inlib::mat4f::data ( ) const [inline]

Definition at line 286 of file mat4f.

                            { //for OpenGL.
    return inlib::vec_data<float>(m_vector);
  }
void inlib::mat4f::mul_2f ( float &  a_x,
float &  a_y 
) const [inline]

Definition at line 194 of file mat4f.

                                           {
    // a_[x,y] = this * a_[x,y]
    //m_vector[R + C * 4];
    const std::vector<float>& vec = inlib::array<float>::m_vector;
    //vec[0] = 00;vec[4] = 01;vec[ 8] = 02;vec[12] = 03;
    //vec[1] = 10;vec[5] = 11;vec[ 9] = 12;vec[13] = 13;
    //vec[2] = 20;vec[6] = 21;vec[10] = 22;vec[14] = 23;
    //vec[3] = 30;vec[7] = 31;vec[11] = 32;vec[15] = 33;
    float x = vec[0]*a_x+vec[4]*a_y+vec[12];
    float y = vec[1]*a_x+vec[5]*a_y+vec[13];
    a_x = x;
    a_y = y;
  }
void inlib::mat4f::mul_3f ( float &  a_x,
float &  a_y,
float &  a_z 
) const [inline]

Definition at line 179 of file mat4f.

                                                      {
    // a_[x,y,z] = this * a_[x,y,z]
    //m_vector[R + C * 4];
    const std::vector<float>& vec = inlib::array<float>::m_vector;
    //vec[0] = 00;vec[4] = 01;vec[ 8] = 02;vec[12] = 03;
    //vec[1] = 10;vec[5] = 11;vec[ 9] = 12;vec[13] = 13;
    //vec[2] = 20;vec[6] = 21;vec[10] = 22;vec[14] = 23;
    //vec[3] = 30;vec[7] = 31;vec[11] = 32;vec[15] = 33;
    float x = vec[0]*a_x+vec[4]*a_y+vec[ 8]*a_z+vec[12];
    float y = vec[1]*a_x+vec[5]*a_y+vec[ 9]*a_z+vec[13];
    float z = vec[2]*a_x+vec[6]*a_y+vec[10]*a_z+vec[14];
    a_x = x;
    a_y = y;
    a_z = z;
  }
void inlib::mat4f::mul_mtx ( const mat4f a_from) [inline]

Definition at line 250 of file mat4f.

                                    {
    // this = this * a_from
    //m_vector[R + C * 4];
    const std::vector<float>& fv = a_from.m_vector;
    std::vector<float>& tv = inlib::array<float>::m_vector;
    //vec[0] = 00;vec[4] = 01;vec[ 8] = 02;vec[12] = 03;
    //vec[1] = 10;vec[5] = 11;vec[ 9] = 12;vec[13] = 13;
    //vec[2] = 20;vec[6] = 21;vec[10] = 22;vec[14] = 23;
    //vec[3] = 30;vec[7] = 31;vec[11] = 32;vec[15] = 33;
    
    float v00 = tv[0]*fv[0]+tv[4]*fv[1]+tv[ 8]*fv[2]+tv[12]*fv[3];
    float v10 = tv[1]*fv[0]+tv[5]*fv[1]+tv[ 9]*fv[2]+tv[13]*fv[3];
    float v20 = tv[2]*fv[0]+tv[6]*fv[1]+tv[10]*fv[2]+tv[14]*fv[3];
    float v30 = tv[3]*fv[0]+tv[7]*fv[1]+tv[11]*fv[2]+tv[15]*fv[3];

    float v01 = tv[0]*fv[4]+tv[4]*fv[5]+tv[ 8]*fv[6]+tv[12]*fv[7];
    float v11 = tv[1]*fv[4]+tv[5]*fv[5]+tv[ 9]*fv[6]+tv[13]*fv[7];
    float v21 = tv[2]*fv[4]+tv[6]*fv[5]+tv[10]*fv[6]+tv[14]*fv[7];
    float v31 = tv[3]*fv[4]+tv[7]*fv[5]+tv[11]*fv[6]+tv[15]*fv[7];

    float v02 = tv[0]*fv[8]+tv[4]*fv[9]+tv[ 8]*fv[10]+tv[12]*fv[11];
    float v12 = tv[1]*fv[8]+tv[5]*fv[9]+tv[ 9]*fv[10]+tv[13]*fv[11];
    float v22 = tv[2]*fv[8]+tv[6]*fv[9]+tv[10]*fv[10]+tv[14]*fv[11];
    float v32 = tv[3]*fv[8]+tv[7]*fv[9]+tv[11]*fv[10]+tv[15]*fv[11];

    float v03 = tv[0]*fv[12]+tv[4]*fv[13]+tv[ 8]*fv[14]+tv[12]*fv[15];
    float v13 = tv[1]*fv[12]+tv[5]*fv[13]+tv[ 9]*fv[14]+tv[13]*fv[15];
    float v23 = tv[2]*fv[12]+tv[6]*fv[13]+tv[10]*fv[14]+tv[14]*fv[15];
    float v33 = tv[3]*fv[12]+tv[7]*fv[13]+tv[11]*fv[14]+tv[15]*fv[15];

    tv[0] = v00;tv[4] = v01;tv[ 8] = v02;tv[12] = v03;
    tv[1] = v10;tv[5] = v11;tv[ 9] = v12;tv[13] = v13;
    tv[2] = v20;tv[6] = v21;tv[10] = v22;tv[14] = v23;
    tv[3] = v30;tv[7] = v31;tv[11] = v32;tv[15] = v33;
  }
void inlib::mat4f::mul_scale ( float  a_sx,
float  a_sy,
float  a_sz 
) [inline]

Definition at line 207 of file mat4f.

                                                   {
    // this = this * mat4f_scale(a_s[x,y,z]
    //m_vector[R + C * 4];
    std::vector<float>& vec = inlib::array<float>::m_vector;
    //vec[0] = 00;vec[4] = 01;vec[ 8] = 02;vec[12] = 03;
    //vec[1] = 10;vec[5] = 11;vec[ 9] = 12;vec[13] = 13;
    //vec[2] = 20;vec[6] = 21;vec[10] = 22;vec[14] = 23;
    //vec[3] = 30;vec[7] = 31;vec[11] = 32;vec[15] = 33;
    vec[0] *= a_sx;
    vec[1] *= a_sx;
    vec[2] *= a_sx;
    vec[3] *= a_sx;

    vec[4] *= a_sy;
    vec[5] *= a_sy;
    vec[6] *= a_sy;
    vec[7] *= a_sy;

    vec[ 8] *= a_sz;
    vec[ 9] *= a_sz;
    vec[10] *= a_sz;
    vec[11] *= a_sz;
  }
void inlib::mat4f::mul_trans ( float  a_x,
float  a_y,
float  a_z 
) [inline]

Definition at line 230 of file mat4f.

                                                {
    // this = this * mat4f_trans(a_[x,y,z]
    //m_vector[R + C * 4];
    std::vector<float>& vec = inlib::array<float>::m_vector;
    //vec[0] = 00;vec[4] = 01;vec[ 8] = 02;vec[12] = 03;
    //vec[1] = 10;vec[5] = 11;vec[ 9] = 12;vec[13] = 13;
    //vec[2] = 20;vec[6] = 21;vec[10] = 22;vec[14] = 23;
    //vec[3] = 30;vec[7] = 31;vec[11] = 32;vec[15] = 33;
    
    float v12 = vec[0]*a_x+vec[4]*a_y+vec[ 8]*a_z+vec[12];
    float v13 = vec[1]*a_x+vec[5]*a_y+vec[ 9]*a_z+vec[13];
    float v14 = vec[2]*a_x+vec[6]*a_y+vec[10]*a_z+vec[14];
    float v15 = vec[3]*a_x+vec[7]*a_y+vec[11]*a_z+vec[15];

    vec[12] = v12;
    vec[13] = v13;
    vec[14] = v14;
    vec[15] = v15;
  }
mat4f& inlib::mat4f::operator= ( const mat4f a_from) [inline]

Definition at line 20 of file mat4f.

                                       {
    inlib::a4::sqm<float>::operator=(a_from);
    return *this;
  }
void inlib::mat4f::set_frustum ( float  a_l,
float  a_r,
float  a_b,
float  a_t,
float  a_n,
float  a_f 
) [inline]

Definition at line 156 of file mat4f.

                                               { //znear,zfar
    // from man glFrustum.
    float A = (a_r+a_l)/(a_r-a_l);
    float B = (a_t+a_b)/(a_t-a_b);
    float C = -(a_f+a_n)/(a_f-a_n);
    float D = -(2*a_f*a_n)/(a_f-a_n);

    float a_00,a_01,a_02,a_03;
    float a_10,a_11,a_12,a_13;
    float a_20,a_21,a_22,a_23;
    float a_30,a_31,a_32,a_33;
    a_00 = (2*a_n)/(a_r-a_l);a_01 =                 0;a_02 =  A;a_03 = 0;
    a_10 =                 0;a_11 = (2*a_n)/(a_t-a_b);a_12 =  B;a_13 = 0;
    a_20 =                 0;a_21 =                 0;a_22 =  C;a_23 = D;
    a_30 =                 0;a_31 =                 0;a_32 = -1;a_33 = 0;
    set_matrix(a_00,a_01,a_02,a_03,  //1 row
               a_10,a_11,a_12,a_13,  //2 row
               a_20,a_21,a_22,a_23,  //3 row
               a_30,a_31,a_32,a_33); //4 row
  }
void inlib::mat4f::set_matrix ( float  a_00,
float  a_01,
float  a_02,
float  a_03,
float  a_10,
float  a_11,
float  a_12,
float  a_13,
float  a_20,
float  a_21,
float  a_22,
float  a_23,
float  a_30,
float  a_31,
float  a_32,
float  a_33 
) [inline]

Definition at line 65 of file mat4f.

  {
    //a_<R><C>
    //m_vector[R + C * 4];
    std::vector<float>& vec = inlib::array<float>::m_vector;
    vec[0] = a_00;vec[4] = a_01;vec[ 8] = a_02;vec[12] = a_03;
    vec[1] = a_10;vec[5] = a_11;vec[ 9] = a_12;vec[13] = a_13;
    vec[2] = a_20;vec[6] = a_21;vec[10] = a_22;vec[14] = a_23;
    vec[3] = a_30;vec[7] = a_31;vec[11] = a_32;vec[15] = a_33;
  }
void inlib::mat4f::set_matrix ( const mat4f a_from) [inline]

Definition at line 79 of file mat4f.

                                      { //optimization.
    const std::vector<float>& fv = a_from.m_vector;
    std::vector<float>::const_iterator fvi = fv.begin();
    std::vector<float>& tv = inlib::array<float>::m_vector; //this vector.
    std::vector<float>::iterator tvi = tv.begin();
    for(;tvi!=tv.end();++tvi,++fvi) *tvi = *fvi;
  }
void inlib::mat4f::set_ortho ( float  a_l,
float  a_r,
float  a_b,
float  a_t,
float  a_n,
float  a_f 
) [inline]

Definition at line 135 of file mat4f.

                                             { //znear,zfar
    // from man glOrtho.
    float tx = -(a_r+a_l)/(a_r-a_l);
    float ty = -(a_t+a_b)/(a_t-a_b);
    float tz = -(a_f+a_n)/(a_f-a_n);

    float a_00,a_01,a_02,a_03;
    float a_10,a_11,a_12,a_13;
    float a_20,a_21,a_22,a_23;
    float a_30,a_31,a_32,a_33;
    a_00 = 2/(a_r-a_l);a_01 =           0;a_02 =            0;a_03 = tx;
    a_10 =           0;a_11 = 2/(a_t-a_b);a_12 =            0;a_13 = ty;
    a_20 =           0;a_21 =           0;a_22 = -2/(a_f-a_n);a_23 = tz;
    a_30 =           0;a_31 =           0;a_32 =            0;a_33 =  1;
    set_matrix(a_00,a_01,a_02,a_03,  //1 row
               a_10,a_11,a_12,a_13,  //2 row
               a_20,a_21,a_22,a_23,  //3 row
               a_30,a_31,a_32,a_33); //4 row
  }
void inlib::mat4f::set_rotate ( float  a_x,
float  a_y,
float  a_z,
float  a_angle 
) [inline]

Definition at line 110 of file mat4f.

                                                               {
    //WARNING : (a_x,a_y,a_z) must be a normalized vector.
    float c = fcos(a_angle);    
    float s = fsin(a_angle);    
    float x = a_x;
    float y = a_y;
    float z = a_z;
    float x2 = x*x;
    float y2 = y*y;
    float z2 = z*z;
    float xy = x*y;
    float xz = x*z;
    float yz = y*z;
    std::vector<float>& v = inlib::array<float>::m_vector;
    v[0] =  x2+(1-x2)*c;v[4] = xy*(1-c)-z*s;v[ 8] = xz*(1-c)+y*s;v[12] = 0;
    v[1] = xy*(1-c)+z*s;v[5] =  y2+(1-y2)*c;v[ 9] = yz*(1-c)-x*s;v[13] = 0;
    v[2] = xz*(1-c)-y*s;v[6] = yz*(1-c)+x*s;v[10] =  z2+(1-z2)*c;v[14] = 0;
    v[3] =            0;v[7] =            0;v[11] =            0;v[15] = 1;
  }
void inlib::mat4f::set_translate ( float  a_x,
float  a_y,
float  a_z 
) [inline]

Definition at line 103 of file mat4f.

                                                    {
    std::vector<float>& vec = inlib::array<float>::m_vector;
    vec[0] = 1;vec[4] = 0;vec[ 8] = 0;vec[12] = a_x;
    vec[1] = 0;vec[5] = 1;vec[ 9] = 0;vec[13] = a_y;
    vec[2] = 0;vec[6] = 0;vec[10] = 1;vec[14] = a_z;
    vec[3] = 0;vec[7] = 0;vec[11] = 0;vec[15] = 1;
  }

The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines