Mercurial > hg > Game > Cerium
diff Renderer/Engine/matrix_calc.cc @ 1165:ab8ed4d1d211 draft
get_matrix_scale
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 21 May 2011 21:32:57 +0900 |
parents | 1ef561eb1ef5 |
children | 636dfdc30176 |
line wrap: on
line diff
--- a/Renderer/Engine/matrix_calc.cc Mon May 09 16:29:30 2011 +0900 +++ b/Renderer/Engine/matrix_calc.cc Sat May 21 21:32:57 2011 +0900 @@ -224,6 +224,49 @@ } +void +get_matrix_scale( float *matrix, float *rxyz, float *txyz, float *scale, float *stack) +{ + float radx,rady,radz; + radx = rxyz[0]*3.14/180; + rady = rxyz[1]*3.14/180; + radz = rxyz[2]*3.14/180; + + float sinx = sin(radx)*scale[0]; + float cosx = cos(radx)*scale[0]; + float siny = sin(rady)*scale[1]; + float cosy = cos(rady)*scale[1]; + float sinz = sin(radz)*scale[2]; + float cosz = cos(radz)*scale[2]; + + float m1[16]; + float *m = stack? m1 : matrix; + + /* View Transform */ + m[0] = cosz*cosy+sinz*sinx*siny; + m[1] = sinz*cosx; + m[2] = -cosz*siny+sinz*sinx*cosy; + m[3] = 0; + m[4] = -sinz*cosy+cosz*sinx*siny; + m[5] = cosz*cosx; + m[6] = sinz*siny+cosz*sinx*cosy; + m[7] = 0; + m[8] = cosx*siny; + m[9] = -sinx; + m[10] = cosx*cosy; + m[11] = 0; + m[12] = txyz[0]; + m[13] = txyz[1]; + m[14] = txyz[2]; + m[15] = 1; + + if(stack) + { + matrix4x4(matrix, m, stack); + } + +} + void rotate_x(float *xyz, float r) { float rad = r*3.14/180;