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) {