Mercurial > hg > old > magoroku_racing
comparison ps2util.cc @ 124:6ef3b0efdeaf
test
author | e085768 |
---|---|
date | Thu, 30 Jun 2011 12:43:18 +0900 |
parents | 5219bf3d5e71 |
children | c62fec1dd2f8 |
comparison
equal
deleted
inserted
replaced
123:78665470f9f9 | 124:6ef3b0efdeaf |
---|---|
6 #include <math.h> | 6 #include <math.h> |
7 #include "libps2.h" | 7 #include "libps2.h" |
8 #include "ps2util.h" | 8 #include "ps2util.h" |
9 #include "name_dictionary.h" | 9 #include "name_dictionary.h" |
10 | 10 |
11 #include "matrix_calc.h" | |
11 /* | 12 /* |
12 たぶん、本当は読み込んだ xml file から情報を取得するとかそんなんだと思う | 13 たぶん、本当は読み込んだ xml file から情報を取得するとかそんなんだと思う |
13 どんな処理か分からないので、とりあえず、初期化している。 | 14 どんな処理か分からないので、とりあえず、初期化している。 |
14 */ | 15 */ |
15 | 16 |
16 OBJECT *ps2util_obj_Create_fromXML(const char *filename) | 17 OBJECT *ps2util_obj_Create_fromXML(const char *filename) |
17 { | 18 { |
18 OBJECT *body; | 19 OBJECT *body; |
19 | 20 |
21 // これで良いのかな? | |
22 body = (OBJECT*)malloc(sizeof(OBJECT)); | |
23 | |
24 // たぶん、コンストラクタに通ってないから容量確保されてない | |
25 // から、自分で確保しなきゃアカンのかなぁ?? 違かったらゴメン | |
26 body->matrix = (float*)malloc(sizeof(float)*16); | |
27 | |
28 for( int i = 0; i < 16; i ++ ){ | |
29 body->matrix[i] = 0.0f; | |
30 } | |
31 | |
20 for( int i = 0; i < 4; i ++ ){ | 32 for( int i = 0; i < 4; i ++ ){ |
21 body->xyz[i] = 0.0f; | 33 body->xyz[i] = 0.0f; |
22 body->angle[i] = 0.0f; | 34 body->angle[i] = 0.0f; |
23 } | 35 } |
24 | 36 |
25 | 37 |
38 //body->matrix = { {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0} }; | |
39 | |
26 /* | 40 /* |
27 body->xyz = {0,0,0,0}; | 41 body->xyz = {0,0,0,0}; |
28 body->angle = {0,0,0,0}; | 42 body->angle = {0,0,0,0}; |
29 body->transfer = { {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0} }; | 43 body->transfer = { {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0} }; |
30 body->*name = filename; | 44 body->*name = filename; |
102 X 軸だけでなく Y 軸、Z 軸を中心とした関数もある。また3ついっんに回転させる関数もある。 | 116 X 軸だけでなく Y 軸、Z 軸を中心とした関数もある。また3ついっんに回転させる関数もある。 |
103 */ | 117 */ |
104 void ps2_vu0_rot_matrix_y(FMATRIX result, FMATRIX m, float radian) | 118 void ps2_vu0_rot_matrix_y(FMATRIX result, FMATRIX m, float radian) |
105 //void ps2_vu0_rot_matrix_y(float *result, float *mm, float radian) | 119 //void ps2_vu0_rot_matrix_y(float *result, float *mm, float radian) |
106 { | 120 { |
121 float m2[4][4]; | |
122 | |
123 memcpy(&m2, m, sizeof(FMATRIX)); | |
124 | |
107 // 回転行列を作ってかけてやれば良い | 125 // 回転行列を作ってかけてやれば良い |
108 | 126 |
109 m[0][1] = m[0][2] = m[0][3] = 0; | 127 m[0][1] = m[0][2] = m[0][3] = 0; |
110 m[1][0] = m[1][2] = m[1][3] = 0; | 128 m[1][0] = m[1][2] = m[1][3] = 0; |
111 m[2][0] = m[2][1] = m[2][3] = 0; | 129 m[2][0] = m[2][1] = m[2][3] = 0; |
123 | 141 |
124 ps2_vu0_mul_matrix(result, m1, m); | 142 ps2_vu0_mul_matrix(result, m1, m); |
125 } | 143 } |
126 | 144 |
127 // ベクトルの計算 | 145 // ベクトルの計算 |
128 // マトリックス m にベクトル を右から乗算して result に与える | 146 // マトリックス m にベクトルを右から乗算して result に与える |
129 void ps2_vu0_apply_matrix(FVECTOR result, FMATRIX m, FVECTOR v) | 147 void ps2_vu0_apply_matrix(FVECTOR result, FMATRIX m, FVECTOR v) |
130 { | 148 { |
131 result[0] = m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3] * v[3] ; | 149 result[0] = m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3] * v[3] ; |
132 result[1] = m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3] * v[3] ; | 150 result[1] = m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3] * v[3] ; |
133 result[2] = m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3] * v[3] ; | 151 result[2] = m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3] * v[3] ; |
229 | 247 |
230 | 248 |
231 void xml_free(PolygonInfo xml) | 249 void xml_free(PolygonInfo xml) |
232 { | 250 { |
233 //none | 251 //none |
252 printf("xml_free\n"); | |
234 } | 253 } |
235 | 254 |
236 extern SceneGraphPtr root; | 255 extern SceneGraphPtr root; |
237 | 256 |
238 //scenegra | 257 //scenegra |
239 void ps2util_obj_Draw(OBJECT *object) | 258 void ps2util_obj_Draw(OBJECT *object) |
240 { | 259 { |
260 object->xyz[0] = 100; | |
261 object->xyz[1] = 100; | |
262 object->xyz[2] = -500; | |
263 | |
241 root->addChild(object); // 画像の数数えとく | 264 root->addChild(object); // 画像の数数えとく |
265 | |
266 static float my_scale = 5; | |
267 | |
268 float scale[] = {my_scale,my_scale,1}; | |
269 | |
270 /*親の回転、座標から、子の回転、座標を算出*/ | |
271 get_matrix_scale(object->matrix, object->angle, object->xyz, scale, root->matrix); | |
272 | |
273 /*法線用の行列。Cameraの行列を抜いている(Cameraのコンストラクタで、単位行列にしている)*/ | |
274 get_matrix(object->real_matrix, object->angle, object->xyz, root->real_matrix); | |
242 //get_matrix( | 275 //get_matrix( |
243 //treeDandy のputSprite を持ってくればいいか? | 276 //treeDandy のputSprite を持ってくればいいか? |
244 } | 277 } |
245 | 278 |
246 | 279 |
319 cerium にある。 | 352 cerium にある。 |
320 */ | 353 */ |
321 int malloc_align16(void *free, void *aligned, int size) | 354 int malloc_align16(void *free, void *aligned, int size) |
322 { | 355 { |
323 char *index; | 356 char *index; |
324 unsigned int *f=(unsigned int *)free,*a=(unsigned int *)aligned; | 357 unsigned int *f=(unsigned int *)free, *a=(unsigned int *)aligned; |
325 | 358 |
326 if (free == NULL || aligned == NULL || size <= 0) return(-1); | 359 if (free == NULL || aligned == NULL || size <= 0) return(-1); |
327 | 360 |
328 index = (char *)malloc(size + ALIGN_16BYTE); | 361 index = (char *)malloc(size + ALIGN_16BYTE); |
329 if (index == NULL) { | 362 if (index == NULL) { |