inlib
1.2.0
|
Public Member Functions | |
mat4f () | |
virtual | ~mat4f () |
mat4f (const mat4f &a_from) | |
mat4f & | operator= (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 |
inlib::mat4f::mat4f | ( | ) | [inline] |
Definition at line 16 of file mat4f.
: inlib::a4::sqm<float>() {}
inlib::mat4f::mat4f | ( | const mat4f & | a_from | ) | [inline] |
Definition at line 19 of file mat4f.
: inlib::a4::sqm<float>(a_from){}
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; }
const float* inlib::mat4f::data | ( | ) | const [inline] |
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; }
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; }