|
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;
}
1.7.5.1