26
|
1 #include <iostream>
|
|
2 #include <math.h>
|
|
3 #include "scene_graph_pack.h"
|
|
4 #include "sys.h"
|
|
5 using namespace std;
|
|
6
|
|
7 /*
|
|
8 void matrix4x4(float *xyz, float *xyz1, float *xyz2) //xyz[16]
|
|
9 {
|
|
10 for(int t=0; t<16; t+=4)
|
|
11 {
|
|
12 for(int i=0; i<4; i++)
|
|
13 {
|
|
14 xyz[t+i] = xyz1[t]*xyz2[i] + xyz1[t+1]*xyz2[4+i] + xyz1[t+2]*xyz2[8+i] + xyz1[t+3]*xyz2[12+i];
|
|
15 }
|
|
16 }
|
|
17 }
|
|
18
|
|
19 void get_matrix( float *matrix, float *rxyz, float *txyz, float *stack)
|
|
20 {
|
|
21 float radx,rady,radz;
|
|
22 radx = rxyz[0]*3.14/180;
|
|
23 rady = rxyz[1]*3.14/180;
|
|
24 radz = rxyz[2]*3.14/180;
|
|
25
|
|
26 float sinx = sin(radx);
|
|
27 float cosx = cos(radx);
|
|
28 float siny = sin(rady);
|
|
29 float cosy = cos(rady);
|
|
30 float sinz = sin(radz);
|
|
31 float cosz = cos(radz);
|
|
32
|
|
33 matrix[0] = cosz*cosy+sinz*sinx*siny;
|
|
34 matrix[1] =sinz*cosx;
|
|
35 matrix[2] = -cosz*siny+sinz*sinx*cosy;
|
|
36 matrix[3] = 0;
|
|
37 matrix[4] = -sinz*cosy+cosz*sinx*siny;
|
|
38 matrix[5] = cosz*cosx;
|
|
39 matrix[6] = sinz*siny+cosz*sinx*cosy;
|
|
40 matrix[7] = 0;
|
|
41 matrix[8] = cosx*siny;
|
|
42 matrix[9] = -sinx;
|
|
43 matrix[10] = cosx*cosy;
|
|
44 matrix[11] = 0;
|
|
45 matrix[12] = txyz[0];
|
|
46 matrix[13] = txyz[1];
|
|
47 matrix[14] = txyz[2];
|
|
48 matrix[15] = 1;
|
|
49
|
|
50 float m[16];
|
|
51
|
|
52 for(int i=0; i<16; i++)
|
|
53 {
|
|
54 m[i] = matrix[i];
|
|
55 }
|
|
56
|
|
57 if(stack)
|
|
58 {
|
|
59 matrix4x4(matrix, m, stack);
|
|
60 }
|
|
61 }
|
|
62 */
|
|
63
|
28
|
64 int
|
|
65 update_sgp(SceneGraphPack *_sgp, SceneGraphPack *sgp)
|
26
|
66 {
|
28
|
67 for (int i = 0; i < sgp->info.size; i++) {
|
|
68 //(*my_func[node->move])(node);
|
|
69 //(*my_func[node->interaction])(node, sgp);
|
|
70
|
|
71 if (sgp->node[i].pn != -1) {
|
|
72 get_matrix(sgp->node[i].translation,
|
|
73 sgp->node[i].angle, sgp->node[i].obj_pos,
|
|
74 sgp->node[sgp->node[i].pn].translation);
|
|
75 } else {
|
|
76 get_matrix(sgp->node[i].translation,
|
|
77 sgp->node[i].angle, sgp->node[i].obj_pos,
|
|
78 NULL);
|
|
79 }
|
|
80 }
|
26
|
81
|
28
|
82 // まあこれは多分駄目なんだけど。
|
|
83 // in/out と update は分ける必要ある?
|
|
84 // それはユーザ側で in/out になるように書かせるもの?
|
|
85 memcpy(_sgp, sgp, sizeof(SceneGraphPack));
|
|
86
|
|
87 return sizeof(SceneGraphPack);
|
26
|
88 }
|