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;