annotate Renderer/Engine/Collada.cc @ 1398:e19296785c07 draft

collada can move
author e095732 <e095732@ie.u-ryukyu.ac.jp>
date Sun, 05 Feb 2012 23:34:16 +0900
parents ad841dcdbe67
children d6170e1200a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #include "polygon.h"
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 #include "SceneGraph.h"
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 #include "SceneGraph.cc"
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 #include "TextureHash.h"
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 #include "xml.h"
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 #include "SceneGraphRoot.h"
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 #include <iostream>
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 #include <SDL_image.h>
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 using namespace std;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 static TextureHash sgid_hash;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 extern int is_bmp(const char* name);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 extern void make_black_alpha(SDL_Surface *texture_image);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
16 typedef struct p_info {
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
17 p_info(){
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
18 x = 0;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
19 y = 0;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
20 z = 0;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
21 }
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
22 float x;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
23 float y;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
24 float z;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
25 };
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
26
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 typedef struct source {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 char *id;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 union {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 float *array;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 char *alias;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 }u;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 int count;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 struct source *next;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 } SOURCE;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 typedef SOURCE *SOURCE_P;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 typedef struct list {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 SOURCE_P first;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 SOURCE_P end;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 } LIST;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 typedef LIST *LIST_P;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 struct collada_state {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 collada_state(){
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 polylist = 0;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 vertex_offset = -1;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 vertex_count = 0;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 normal_offset = -1;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 normal_count = 0;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 texcoord_offset = -1;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 texcoord_count = 0;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 polylist_count = 0;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 vcsum = 0;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 limit = 0;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 vmember = 0;
1390
b4f6539fecf6 delete vertexp.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1385
diff changeset
62 vtable_size =0;
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
64 images_flag=0;
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 int polylist;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 int library_images;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 xmlChar *vertices_id;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 char *vertex_src;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 int vertex_offset;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 int vertex_count;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 char *normal_src;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 int normal_offset;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 int normal_count;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 char *texcoord_src;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 int texcoord_offset;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 int texcoord_count;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 float *vcount;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 float *pcount;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 SOURCE_P normal_float;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 SOURCE_P vertex_float;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 SOURCE_P texcoord_float;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 char *vertices_src;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 int polylist_count;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 char *name;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 char *tex_picname;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 int images_flag;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 int vcsum;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 int limit;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 int vmember;
1390
b4f6539fecf6 delete vertexp.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1385
diff changeset
100 int vtable_size;
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 };
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 /*static const char*
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 get_property(const char *name, xmlNodePtr cur){
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 xmlAttr *p=cur->properties;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 if (p==0) return "";
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 for ( ;p; p=p->next) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 if ( xmlStrcmp(p->name, (xmlChar*)name) !=0 ) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 xmlNode* n=p->children;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 if ( n==NULL ) return "";
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 const char * v=(const char*)n->content;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 if ( v==NULL ) return "";
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 return v;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 return "";
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 }*/
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 SDL_Surface*
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 load_image(const char *file_name, const char *image_name)
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 int alpha_black = is_bmp(file_name);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 /**
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 * image を 32bit(RGBA) に変換する
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 */
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 SDL_Surface *texture_image = IMG_Load(file_name);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 if (!texture_image) return 0;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 SDL_Surface *tmpImage
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 = SDL_CreateRGBSurface(SDL_HWSURFACE, texture_image->w,
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 texture_image->h, 32, redMask,
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 greenMask, blueMask, alphaMask);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 //= SDL_CreateRGBSurface(SDL_HWSURFACE, 0,
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 // 0, 32, redMask,
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 // greenMask, blueMask, alphaMask);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 SDL_Surface *converted;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 converted = SDL_ConvertSurface(texture_image, tmpImage->format,
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 SDL_HWSURFACE);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 //SDL_SetAlpha(converted, 0, 0);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 if (converted != NULL) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 SDL_FreeSurface(texture_image);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 texture_image = converted;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 if (alpha_black) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 make_black_alpha(texture_image);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 // this->gl_tex = SDL_GL_LoadTexture(texture_image);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 return texture_image;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 /* add source list */
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 static void
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 addSource(LIST_P list, SOURCE_P src) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 if (list->first == NULL && list->end == NULL) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 list->first = list->end = src;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 return;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 list->end->next = src;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 list->end = src;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 /* compare a with b. Using to compare id */
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 /*
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 static int
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 strcmp_a(const char *a, const char *b)
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 while (*a && *a++ == *b++);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 if (*a) return 0;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 return a[-1] > b[-1] ? 1:-1;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 static float
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 get_point(char *id, int position, LIST_P list)
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 SOURCE_P cur = list->first;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 for (;cur ; cur=cur->next) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 if (!strcmp_a(id, cur->id)) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 if (cur->count == 0) //alias
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 return get_point(cur->u.alias, position, list);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 float *a = cur->u.array;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 if (position <= cur->count) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 return a[position];
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
185 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 */
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
187
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 static SOURCE_P
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 most_match(const char *id , LIST_P list)
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 SOURCE_P src = NULL;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 SOURCE_P cur = NULL;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 int tmplength = 0;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 int strlength;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
195
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 for (cur=list->first ;cur!=list->end ;cur=cur->next) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 for (strlength=0;id[strlength]==cur->id[strlength];strlength++);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 if (tmplength < strlength) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 tmplength = strlength;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 src = cur;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 }
1378
38c7e8b47c4b minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1376
diff changeset
203 if (src == NULL){
38c7e8b47c4b minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1376
diff changeset
204 fprintf(stderr,"not match");
38c7e8b47c4b minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1376
diff changeset
205 }
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 return src;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
208
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 void get_texture_image(char *filename, SceneGraphPtr sg, xmlNodePtr cur, TaskManager *manager)
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 char image_name[20] = "/tmp/image_XXXXXX";
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 if (filename == NULL || filename[0] == 0) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 return;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 /**
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 * image_name を既に Load していれば何もしない
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 */
1391
1ea6e4eb2b0a remove error.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1390
diff changeset
218 int tex_id;
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 /* ball test */
1382
de990f3e0a21 minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1379
diff changeset
220 if (sgid_hash.sg_hash_regist(filename, tex_id) == -1) {
de990f3e0a21 minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1379
diff changeset
221 SDL_Surface *texture_image = load_image(filename, image_name);
de990f3e0a21 minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1379
diff changeset
222 if (texture_image==0) {
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 printf("Can't load image %s\n",filename);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 exit(0);
1382
de990f3e0a21 minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1379
diff changeset
225 }
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 sg->texture_info->texture_id = sg->makeTapestries(manager, texture_image, tex_id);
1382
de990f3e0a21 minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1379
diff changeset
227 tex_id = sg->texture_info->texture_id;
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 if (unlink(image_name)) {
1382
de990f3e0a21 minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1379
diff changeset
229 printf("unlink error\n");
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 } else {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 /**
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 * 以前に Load されている Texture を共用
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 */
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 sg->texture_info->texture_id = tex_id;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 }
1382
de990f3e0a21 minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1379
diff changeset
237 // 微妙に思う、自分で書き換えた感想 by gongo
de990f3e0a21 minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1379
diff changeset
238 sg->texture_info->t_w = list[tex_id].t_w;
de990f3e0a21 minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1379
diff changeset
239 sg->texture_info->t_h = list[tex_id].t_h;;
de990f3e0a21 minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1379
diff changeset
240 sg->texture_info->pixels_orig = list[tex_id].pixels_orig;
de990f3e0a21 minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1379
diff changeset
241 sg->texture_info->pixels = list[tex_id].pixels;
de990f3e0a21 minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1379
diff changeset
242 sg->texture_info->scale_max = list[tex_id].scale_max;
de990f3e0a21 minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1379
diff changeset
243 sg->texture_info->texture_image = list[tex_id].texture_image;
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
245
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 void decode_float_array(xmlNodePtr cur,LIST_P list){
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 SOURCE_P src = (SOURCE_P)malloc(sizeof(SOURCE));
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 src->id = (char*)xmlGetProp(cur, (xmlChar*)"id");
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
249
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 src->count = atoi((char*)xmlGetProp(cur, (xmlChar*)"count"));
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 src->u.array = new float[src->count];
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 char *cont =(char*)xmlNodeGetContent(cur);
1384
207e0ed76cf1 minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1382
diff changeset
253
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 /* store float inpoint list */
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 for (int i = 0; cont != NULL; i++) {
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
256 cont = pickup_float(cont, src->u.array+i);
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
258
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 src->next = NULL;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 addSource(list, src);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
262
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
263
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 void
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
265 get_points(xmlNodePtr cur, collada_state *s, TaskManager *manager){
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 char *pcont = (char*)xmlNodeGetContent(cur);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
267 for (int i = 0;i < s->polylist_count;i++){
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
268 s->vcsum += s->vcount[i];
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
269 s->vmember = i;
1390
b4f6539fecf6 delete vertexp.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1385
diff changeset
270 if (s->vcount[i]==4){
b4f6539fecf6 delete vertexp.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1385
diff changeset
271 s->vtable_size +=6;
b4f6539fecf6 delete vertexp.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1385
diff changeset
272 } else {
b4f6539fecf6 delete vertexp.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1385
diff changeset
273 s->vtable_size +=3;
b4f6539fecf6 delete vertexp.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1385
diff changeset
274 }
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
275 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
276 s->limit = s->vcsum * 2;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
277 if (s->texcoord_offset == 2){
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
278 s->limit = s->vcsum * 3;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
279 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
280 s->pcount = new float[s->limit];
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
281 for (int i=0;i<s->limit;i++){
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
282 s->pcount[i] = 0;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 for (int i=0; pcont != NULL; i++) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
285 pcont = pickup_float(pcont, s->pcount+i);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
286 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
287 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
288 SceneGraph*
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 decode_points(collada_state *s, TaskManager *manager, SceneGraphPtr sg){
1390
b4f6539fecf6 delete vertexp.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1385
diff changeset
290
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
291 /*
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 * vertex_tableだけはpolygonを作る際にvcountが4の場合重複する点が
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 * 出てくるのでサイズを2倍用意しておく
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
294 */
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
295 /*
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
296 float *vertex_table;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
297 float *normal_table;
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
298 float *texcoord_table;
1390
b4f6539fecf6 delete vertexp.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1385
diff changeset
299 vertex_table = new float[s->vtable_size*3];
b4f6539fecf6 delete vertexp.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1385
diff changeset
300 normal_table = new float[s->vtable_size*3];
b4f6539fecf6 delete vertexp.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1385
diff changeset
301 texcoord_table = new float[s->vtable_size*2];
b4f6539fecf6 delete vertexp.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1385
diff changeset
302 bzero(vertex_table,sizeof(float)*s->vtable_size*3);
b4f6539fecf6 delete vertexp.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1385
diff changeset
303 bzero(normal_table,sizeof(float)*s->vtable_size*3);
b4f6539fecf6 delete vertexp.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1385
diff changeset
304 bzero(texcoord_table,sizeof(float)*s->vtable_size*2);
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
305 */
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
306 p_info *vertex_p;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
307 p_info *normal_p;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
308 p_info *texcoord_p;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
309 vertex_p = new p_info[s->vtable_size];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
310 normal_p = new p_info[s->vtable_size];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
311 texcoord_p = new p_info[s->vtable_size];
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
312
1392
555d2a31cf0c collada moved
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1391
diff changeset
313 /* p separate vertex position and nomal position. */
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
314 /* make triangle */
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
315 int k=0,j=0,l=0,count=0;
1392
555d2a31cf0c collada moved
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1391
diff changeset
316 if (s->texcoord_offset == 2){
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
317 for (int i=0;i<s->polylist_count;i++) {
1392
555d2a31cf0c collada moved
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1391
diff changeset
318 if (s->vcount[i] == 4) {
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
319 vertex_p[k].x = s->vertex_float->u.array[(int)s->pcount[l]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
320 vertex_p[k].y = s->vertex_float->u.array[(int)s->pcount[l]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
321 vertex_p[k].z = s->vertex_float->u.array[(int)s->pcount[l]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
322 vertex_p[k+1].x = s->vertex_float->u.array[(int)s->pcount[l+3]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
323 vertex_p[k+1].y = s->vertex_float->u.array[(int)s->pcount[l+3]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
324 vertex_p[k+1].z = s->vertex_float->u.array[(int)s->pcount[l+3]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
325 vertex_p[k+2].x = s->vertex_float->u.array[(int)s->pcount[l+6]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
326 vertex_p[k+2].y = s->vertex_float->u.array[(int)s->pcount[l+6]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
327 vertex_p[k+2].z = s->vertex_float->u.array[(int)s->pcount[l+6]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
328
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
329 vertex_p[k+3].x = s->vertex_float->u.array[(int)s->pcount[l+6]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
330 vertex_p[k+3].y = s->vertex_float->u.array[(int)s->pcount[l+6]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
331 vertex_p[k+3].z = s->vertex_float->u.array[(int)s->pcount[l+6]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
332 vertex_p[k+4].x = s->vertex_float->u.array[(int)s->pcount[l+9]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
333 vertex_p[k+4].y = s->vertex_float->u.array[(int)s->pcount[l+9]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
334 vertex_p[k+4].z = s->vertex_float->u.array[(int)s->pcount[l+9]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
335 vertex_p[k+5].x = s->vertex_float->u.array[(int)s->pcount[l]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
336 vertex_p[k+5].y = s->vertex_float->u.array[(int)s->pcount[l]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
337 vertex_p[k+5].z = s->vertex_float->u.array[(int)s->pcount[l]*3+2];
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
338
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
339 normal_p[k].x = s->normal_float->u.array[(int)s->pcount[l+1]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
340 normal_p[k].y = s->normal_float->u.array[(int)s->pcount[l+1]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
341 normal_p[k].z = s->normal_float->u.array[(int)s->pcount[l+1]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
342 normal_p[k+1].x = s->normal_float->u.array[(int)s->pcount[l+4]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
343 normal_p[k+1].y = s->normal_float->u.array[(int)s->pcount[l+4]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
344 normal_p[k+1].z = s->normal_float->u.array[(int)s->pcount[l+4]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
345 normal_p[k+2].x = s->normal_float->u.array[(int)s->pcount[l+7]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
346 normal_p[k+2].y = s->normal_float->u.array[(int)s->pcount[l+7]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
347 normal_p[k+2].z = s->normal_float->u.array[(int)s->pcount[l+7]*3+2];
1392
555d2a31cf0c collada moved
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1391
diff changeset
348
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
349 normal_p[k+3].x = s->normal_float->u.array[(int)s->pcount[l+7]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
350 normal_p[k+3].y = s->normal_float->u.array[(int)s->pcount[l+7]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
351 normal_p[k+3].z = s->normal_float->u.array[(int)s->pcount[l+7]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
352 normal_p[k+4].x = s->normal_float->u.array[(int)s->pcount[l+10]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
353 normal_p[k+4].y = s->normal_float->u.array[(int)s->pcount[l+10]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
354 normal_p[k+4].z = s->normal_float->u.array[(int)s->pcount[l+10]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
355 normal_p[k+5].x = s->normal_float->u.array[(int)s->pcount[l+1]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
356 normal_p[k+5].y = s->normal_float->u.array[(int)s->pcount[l+1]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
357 normal_p[k+5].z = s->normal_float->u.array[(int)s->pcount[l+1]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
358
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
359 texcoord_p[j].x = s->texcoord_float->u.array[(int)s->pcount[l+2]*2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
360 texcoord_p[j].y = s->texcoord_float->u.array[(int)s->pcount[l+2]*2]+1;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
361 texcoord_p[j+1].x = s->texcoord_float->u.array[(int)s->pcount[l+5]*2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
362 texcoord_p[j+1].y = s->texcoord_float->u.array[(int)s->pcount[l+5]*2]+1;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
363 texcoord_p[j+2].x = s->texcoord_float->u.array[(int)s->pcount[l+8]*2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
364 texcoord_p[j+2].y = s->texcoord_float->u.array[(int)s->pcount[l+8]*2]+1;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
365 texcoord_p[j+3].x = s->texcoord_float->u.array[(int)s->pcount[l+11]*2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
366 texcoord_p[j+3].y = s->texcoord_float->u.array[(int)s->pcount[l+11]*2]+1;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
367
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
368 l+=12;j+=4;k+=6;
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
369 count +=2;
1392
555d2a31cf0c collada moved
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1391
diff changeset
370 } else if (s->vcount[i]==3) {
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
371 vertex_p[k].x = s->vertex_float->u.array[(int)s->pcount[l]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
372 vertex_p[k].y = s->vertex_float->u.array[(int)s->pcount[l]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
373 vertex_p[k].z = s->vertex_float->u.array[(int)s->pcount[l]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
374 vertex_p[k+1].x = s->vertex_float->u.array[(int)s->pcount[l+3]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
375 vertex_p[k+1].y = s->vertex_float->u.array[(int)s->pcount[l+3]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
376 vertex_p[k+1].z = s->vertex_float->u.array[(int)s->pcount[l+3]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
377 vertex_p[k+2].x = s->vertex_float->u.array[(int)s->pcount[l+6]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
378 vertex_p[k+2].y = s->vertex_float->u.array[(int)s->pcount[l+6]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
379 vertex_p[k+2].z = s->vertex_float->u.array[(int)s->pcount[l+6]*3+2];
1392
555d2a31cf0c collada moved
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1391
diff changeset
380
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
381 normal_p[k].x = s->normal_float->u.array[(int)s->pcount[l+1]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
382 normal_p[k].y = s->normal_float->u.array[(int)s->pcount[l+1]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
383 normal_p[k].z = s->normal_float->u.array[(int)s->pcount[l+1]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
384 normal_p[k+1].x = s->normal_float->u.array[(int)s->pcount[l+4]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
385 normal_p[k+1].y = s->normal_float->u.array[(int)s->pcount[l+4]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
386 normal_p[k+1].z = s->normal_float->u.array[(int)s->pcount[l+4]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
387 normal_p[k+2].x = s->normal_float->u.array[(int)s->pcount[l+7]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
388 normal_p[k+2].y = s->normal_float->u.array[(int)s->pcount[l+7]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
389 normal_p[k+2].z = s->normal_float->u.array[(int)s->pcount[l+7]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
390
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
391 texcoord_p[j].x = s->texcoord_float->u.array[(int)s->pcount[l+2]*2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
392 texcoord_p[j].y = s->texcoord_float->u.array[(int)s->pcount[l+2]*2]+1;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
393 texcoord_p[j+1].x = s->texcoord_float->u.array[(int)s->pcount[l+5]*2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
394 texcoord_p[j+1].y = s->texcoord_float->u.array[(int)s->pcount[l+5]*2]+1;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
395 texcoord_p[j+2].x = s->texcoord_float->u.array[(int)s->pcount[l+8]*2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
396 texcoord_p[j+2].y = s->texcoord_float->u.array[(int)s->pcount[l+8]*2]+1;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
397
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
398 l+=9;j+=3;k+=3;
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
399 count++;
1392
555d2a31cf0c collada moved
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1391
diff changeset
400 }
555d2a31cf0c collada moved
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1391
diff changeset
401 }
555d2a31cf0c collada moved
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1391
diff changeset
402 }else{
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
403 for (int i=0;i<s->polylist_count;i++) {
1392
555d2a31cf0c collada moved
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1391
diff changeset
404 if (s->vcount[i] == 4) {
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
405 vertex_p[k].x = s->vertex_float->u.array[(int)s->pcount[l]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
406 vertex_p[k].y = s->vertex_float->u.array[(int)s->pcount[l]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
407 vertex_p[k].z = s->vertex_float->u.array[(int)s->pcount[l]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
408 vertex_p[k+1].x = s->vertex_float->u.array[(int)s->pcount[l+2]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
409 vertex_p[k+1].y = s->vertex_float->u.array[(int)s->pcount[l+2]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
410 vertex_p[k+1].z = s->vertex_float->u.array[(int)s->pcount[l+2]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
411 vertex_p[k+2].x = s->vertex_float->u.array[(int)s->pcount[l+4]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
412 vertex_p[k+2].y = s->vertex_float->u.array[(int)s->pcount[l+4]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
413 vertex_p[k+2].z = s->vertex_float->u.array[(int)s->pcount[l+4]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
414
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
415 vertex_p[k+3].x = s->vertex_float->u.array[(int)s->pcount[l+4]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
416 vertex_p[k+3].y = s->vertex_float->u.array[(int)s->pcount[l+4]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
417 vertex_p[k+3].z = s->vertex_float->u.array[(int)s->pcount[l+4]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
418 vertex_p[k+4].x = s->vertex_float->u.array[(int)s->pcount[l+6]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
419 vertex_p[k+4].y = s->vertex_float->u.array[(int)s->pcount[l+6]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
420 vertex_p[k+4].z = s->vertex_float->u.array[(int)s->pcount[l+6]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
421 vertex_p[k+5].x = s->vertex_float->u.array[(int)s->pcount[l]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
422 vertex_p[k+5].y = s->vertex_float->u.array[(int)s->pcount[l]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
423 vertex_p[k+5].z = s->vertex_float->u.array[(int)s->pcount[l]*3+2];
1392
555d2a31cf0c collada moved
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1391
diff changeset
424
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
425 normal_p[k].x = s->normal_float->u.array[(int)s->pcount[l+1]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
426 normal_p[k].y = s->normal_float->u.array[(int)s->pcount[l+1]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
427 normal_p[k].z = s->normal_float->u.array[(int)s->pcount[l+1]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
428 normal_p[k+1].x = s->normal_float->u.array[(int)s->pcount[l+3]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
429 normal_p[k+1].y = s->normal_float->u.array[(int)s->pcount[l+3]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
430 normal_p[k+1].z = s->normal_float->u.array[(int)s->pcount[l+3]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
431 normal_p[k+2].x = s->normal_float->u.array[(int)s->pcount[l+5]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
432 normal_p[k+2].y = s->normal_float->u.array[(int)s->pcount[l+5]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
433 normal_p[k+2].z = s->normal_float->u.array[(int)s->pcount[l+5]*3+2];
1392
555d2a31cf0c collada moved
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1391
diff changeset
434
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
435 normal_p[k+3].x = s->normal_float->u.array[(int)s->pcount[l+5]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
436 normal_p[k+3].y = s->normal_float->u.array[(int)s->pcount[l+5]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
437 normal_p[k+3].z = s->normal_float->u.array[(int)s->pcount[l+5]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
438 normal_p[k+4].x = s->normal_float->u.array[(int)s->pcount[l+7]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
439 normal_p[k+4].y = s->normal_float->u.array[(int)s->pcount[l+7]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
440 normal_p[k+4].z = s->normal_float->u.array[(int)s->pcount[l+7]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
441 normal_p[k+5].x = s->normal_float->u.array[(int)s->pcount[l+1]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
442 normal_p[k+5].y = s->normal_float->u.array[(int)s->pcount[l+1]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
443 normal_p[k+5].z = s->normal_float->u.array[(int)s->pcount[l+1]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
444
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
445 l+=8;k+=6;
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
446 count +=2;
1392
555d2a31cf0c collada moved
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1391
diff changeset
447 } else if (s->vcount[i]==3) {
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
448 vertex_p[k].x = s->vertex_float->u.array[(int)s->pcount[l]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
449 vertex_p[k].y = s->vertex_float->u.array[(int)s->pcount[l]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
450 vertex_p[k].z = s->vertex_float->u.array[(int)s->pcount[l]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
451 vertex_p[k+1].x = s->vertex_float->u.array[(int)s->pcount[l+2]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
452 vertex_p[k+1].y = s->vertex_float->u.array[(int)s->pcount[l+2]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
453 vertex_p[k+1].z = s->vertex_float->u.array[(int)s->pcount[l+2]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
454 vertex_p[k+2].x = s->vertex_float->u.array[(int)s->pcount[l+4]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
455 vertex_p[k+2].y = s->vertex_float->u.array[(int)s->pcount[l+4]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
456 vertex_p[k+2].z = s->vertex_float->u.array[(int)s->pcount[l+4]*3+2];
1392
555d2a31cf0c collada moved
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1391
diff changeset
457
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
458 normal_p[k].x = s->normal_float->u.array[(int)s->pcount[l+1]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
459 normal_p[k].y = s->normal_float->u.array[(int)s->pcount[l+1]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
460 normal_p[k].z = s->normal_float->u.array[(int)s->pcount[l+1]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
461 normal_p[k+1].x = s->normal_float->u.array[(int)s->pcount[l+3]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
462 normal_p[k+1].y = s->normal_float->u.array[(int)s->pcount[l+3]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
463 normal_p[k+1].z = s->normal_float->u.array[(int)s->pcount[l+3]*3+2];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
464 normal_p[k+2].x = s->normal_float->u.array[(int)s->pcount[l+5]*3];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
465 normal_p[k+2].y = s->normal_float->u.array[(int)s->pcount[l+5]*3+1];
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
466 normal_p[k+2].z = s->normal_float->u.array[(int)s->pcount[l+5]*3+2];
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
467
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
468 l+=6;k+=3;
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
469 count++;
1392
555d2a31cf0c collada moved
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1391
diff changeset
470 }
555d2a31cf0c collada moved
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1391
diff changeset
471 }
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
472 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
473
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
474
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
475 /**
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
476 * (SceneGraph.cc)
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
477 * pickup_normal,pickup_coordinate,pickup_textureの処理
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
478 * sg->sizeは頂点の数,countは面の数
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
479 */
1384
207e0ed76cf1 minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1382
diff changeset
480
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
481 //polygonの作成
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
482 sg->pp_num = (count + MAX_SIZE_TRIANGLE - 1) / MAX_SIZE_TRIANGLE;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
483 sg->pp = new PolygonPack[sg->pp_num];
1379
13065ad17328 collada moved but only my mac.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1378
diff changeset
484 sg->name = s->name;
13065ad17328 collada moved but only my mac.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1378
diff changeset
485 sg->parent_name = "NULL";
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
486 sg->size = count*3;
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
487 k = 0;
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
488 for (int i = 0;i < sg->pp_num; i++ ){
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
489 PolygonPackPtr pp = sg->pp;
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
490 TrianglePackPtr tri = pp[i].tri;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
491 // TrianglePack の size のチェック
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
492 int tri_size = (count < MAX_SIZE_TRIANGLE) ? count : MAX_SIZE_TRIANGLE ;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
493 pp[i].info.size = tri_size;
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
494 /* default texture peste */
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
495 if (s->images_flag==0) {
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
496 char *default_image = "../Test/xml_file/blend/images/ball.jpg";
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
497 get_texture_image(default_image, sg, (xmlNodePtr)NULL, manager);
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
498 }
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
499 for (int j = 0; j < tri_size; j++,k+=3) {
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
500 tri[j].ver1.x = vertex_p[k].x;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
501 tri[j].ver1.y = vertex_p[k].y;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
502 tri[j].ver1.z = vertex_p[k].z;
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
503
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
504 tri[j].ver2.x = vertex_p[k+1].x;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
505 tri[j].ver2.y = vertex_p[k+1].y;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
506 tri[j].ver2.z = vertex_p[k+1].z;
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
507
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
508 tri[j].ver3.x = vertex_p[k+2].x;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
509 tri[j].ver3.y = vertex_p[k+2].y;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
510 tri[j].ver3.z = vertex_p[k+2].z;
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
511
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
512 tri[j].normal1.x = normal_p[k].x;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
513 tri[j].normal1.y = normal_p[k].y;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
514 tri[j].normal1.z = normal_p[k].z;
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
515
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
516 tri[j].normal2.x = normal_p[k+1].x;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
517 tri[j].normal2.y = normal_p[k+1].y;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
518 tri[j].normal2.z = normal_p[k+1].z;
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
519
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
520 tri[j].normal3.x = normal_p[k+2].x;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
521 tri[j].normal3.y = normal_p[k+2].y;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
522 tri[j].normal3.z = normal_p[k+2].z;
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
523 /*
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
524 tri[j].ver1.tex_x = texcoord_table[m];
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
525 tri[j].ver1.tex_y = texcoord_table[m+1];
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
526
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
527 tri[j].ver2.tex_x = texcoord_table[m+2];
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
528 tri[j].ver2.tex_y = texcoord_table[m+3];
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
529
1396
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
530 tri[j].ver3.tex_x = texcoord_table[m+4];
ad841dcdbe67 collada moved. But only cube.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1392
diff changeset
531 tri[j].ver3.tex_y = texcoord_table[m+5];
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
532 */
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
533 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
534
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
535 }
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
536
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
537 sg->c_xyz[0] = sg->c_xyz[1] = sg->c_xyz[2] = 0;
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
538 /*
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
539 delete []vertex_table;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
540 delete []normal_table;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
541 delete []texcoord_table;
1398
e19296785c07 collada can move
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1396
diff changeset
542 */
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
543 /* got out of polylist */
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
544 s->polylist = 0;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
545 return sg;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
546 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
547
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
548 static void
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
549 xml_walk(xmlNodePtr cur, struct collada_state *s, LIST_P list,SceneGraphPtr sg, SceneGraphRoot *root)
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
550 {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
551 int in_polylist=0;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
552 if (!xmlStrcmp(cur->name, (xmlChar*)"polylist")) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
553 s->polylist_count = atoi((char*)xmlGetProp(cur, (xmlChar*)"count"));
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
554 s->polylist=1;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
555 in_polylist=1;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
556 } else if (!xmlStrcmp(cur->name, (xmlChar*)"vertices")) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
557 s->vertices_id = xmlGetProp(cur, (xmlChar*)"id");
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
558 } else if (!xmlStrcmp(cur->name, (xmlChar*)"library_images")) {
1378
38c7e8b47c4b minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1376
diff changeset
559 s->library_images=1;
38c7e8b47c4b minor changes.
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 1376
diff changeset
560 //library_images is wrote at texture image name. only use one image file
1376
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
561 } else if (s->library_images && !xmlStrcmp(cur->name, (xmlChar*)"init_from")) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
562 s->tex_picname = (char*)xmlGetProp(cur, (xmlChar*)"init_from");
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
563 get_texture_image(s->tex_picname, sg, cur , root->tmanager);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
564 s->library_images=0;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
565 s->images_flag=1;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
566 } else if (!s->polylist && !xmlStrcmp(cur->name, (xmlChar*)"input")) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
567 char *semantic = (char*)xmlGetProp(cur, (xmlChar*)"semantic");
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
568 if (!xmlStrcmp((xmlChar*)semantic, (xmlChar*)"POSITION")) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
569 s->vertices_src = (char*)xmlGetProp(cur, (xmlChar*)"source");
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
570 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
571 } else if (s->polylist && !xmlStrcmp(cur->name, (xmlChar*)"input")) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
572 char *semantic = (char*)xmlGetProp(cur, (xmlChar*)"semantic");
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
573 if (!xmlStrcmp((xmlChar*)semantic, (xmlChar*)"VERTEX")) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
574 s->vertex_src = (char*)xmlGetProp(cur, (xmlChar*)"source");
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
575 s->vertex_float = most_match(s->vertices_src+1, list);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
576 } else if (!xmlStrcmp((xmlChar*)semantic, (xmlChar*)"NORMAL")) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
577 s->normal_src = (char*)xmlGetProp(cur, (xmlChar*)"source");
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
578 s->normal_offset = atoi((char*)xmlGetProp(cur, (xmlChar*)"offset"));
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
579 s->normal_float = most_match(s->normal_src+1, list);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
580 } else if (!xmlStrcmp((xmlChar*)semantic, (xmlChar*)"TEXCOORD")) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
581 s->texcoord_src = (char*)xmlGetProp(cur, (xmlChar*)"source");
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
582 s->texcoord_offset = atoi((char*)xmlGetProp(cur, (xmlChar*)"offset"));
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
583 s->texcoord_float = most_match(s->texcoord_src+1, list);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
584 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
585 } else if (!xmlStrcmp(cur->name, (xmlChar*)"vcount")) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
586 char *vcont = (char*)xmlNodeGetContent(cur);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
587 s->vcount = new float[s->polylist_count];
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
588 for (int i=0; vcont!=NULL; i++) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
589 /* store vcount list */
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
590 vcont = pickup_float(vcont, s->vcount+i);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
591 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
592 } else if (!xmlStrcmp(cur->name, (xmlChar*)"p")) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
593 get_points(cur,s,root->tmanager);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
594 in_polylist = 0;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
595 } else if (!xmlStrcmp(cur->name, (xmlChar*)"float_array")) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
596 decode_float_array(cur,list);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
597 } else if (!xmlStrcmp(cur->name, (xmlChar*)"node" )) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
598 s->name = (char*)xmlGetProp(cur, (xmlChar*)"id");
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
599 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
600 for (cur=cur->children; cur; cur=cur->next){
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
601 xml_walk(cur,s,list,sg,root);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
602 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
603 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
604 void
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
605 init_list(LIST_P list) {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
606 list->first = NULL;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
607 list->end = NULL;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
608 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
609
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
610
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
611 void
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
612 SceneGraphRoot::createFromCOLLADAfile(TaskManager *manager, const char *xmlColladafile)
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
613 {
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
614 /*make parse dom*/
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
615 xmlDocPtr doc;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
616 xmlNodePtr cur;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
617
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
618 doc = xmlParseFile(xmlColladafile);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
619 cur = xmlDocGetRootElement(doc);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
620
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
621 if (xmlStrcmp(cur->name, (xmlChar*)"COLLADA")){
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
622 return ;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
623 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
624
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
625 /* node analyze */
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
626 struct collada_state s;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
627 SceneGraphPtr sg = new SceneGraph(manager);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
628 for (cur=cur->children; cur; cur=cur->next){
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
629 LIST list;
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
630 init_list(&list);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
631 xml_walk(cur,&s,&list,sg,this);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
632 }
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
633 registSceneGraph(decode_points(&s,manager,sg));
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
634 xmlFreeDoc(doc);
ae0398dd61d2 add Collada.cc
Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp>
parents:
diff changeset
635 }