Mercurial > hg > Game > Cerium
view Renderer/Engine/xml.cc @ 1379:13065ad17328 draft
collada moved but only my mac.
author | e095732 <e095732@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 26 Jan 2012 21:56:32 +0900 |
parents | f0e805c09ed6 |
children | e19296785c07 |
line wrap: on
line source
#include <iostream> #include <SDL.h> #include <SDL_opengl.h> #include <libxml/parser.h> #include "polygon.h" using namespace std; char *skip_to_number(char *cont) { if (cont == NULL) return(NULL); for (;(*cont < '+' || *cont > '9') && (*cont != '\0');cont++) {} if (*cont == '\0') { fprintf(stderr,"Content data is short\n"); return(NULL); } return(cont); } char *pickup_float(char *cont, float *index) { int sign=1,exp=1; float shift=10,val_dec=0,val_int=0; cont = skip_to_number(cont); if (cont == NULL) return(NULL); for (;*cont != ' ' && *cont != '\n' && *cont != '\t' && *cont != ',' ;cont++) { if (*cont == '-') { sign = -1; } else if (*cont == '.') { shift = 0.1; } else if (*cont >= '0' && *cont <= '9') { if (shift == 10) { val_int *= shift; val_int += *cont - 48; } else { val_dec += (*cont - 48) * shift; shift *= 0.1; } } else if (*cont == 'e' || *cont == 'E') { //cont = pickup_exponent(&exp,cont+1); if (cont == NULL) return(NULL); } else if (*cont == '+' || *cont == '/' || *cont == ' ') { // ignore } else if (*cont == '\0') { // NULL end /* ここの条件は collada の仕様に合わせたもの。 * 自前の blender script から吐き出される xml形式では、 * 文字の終わりをNULLでは判断せず、エラー処理としていた * ので必要ではなかった。よって、自前 blender script の * xml形式の時、途中で NULL が来た場合、エラー処理され * なくなる。NULL を返すので、呼び出し側で判断する */ *index = sign * (val_int + val_dec) * exp; return(NULL); } else { fprintf(stderr,"Pick up float failed : %c(%d)\n",*cont,*cont); return(NULL); } } *index = sign * (val_int + val_dec) * exp; cont++; return(cont); } /* int main(int artc, char *argv[]) { xmlDocPtr doc; xmlNodePtr cur; char *cont; doc = xmlParseFile(argv[1]); cur = xmlDocGetRootElement(doc); xmlStrcmp(cur->name,(xmlChar*)"OBJECT-3D"); for (cur=cur->children; cur; cur=cur->next) { if (!xmlStrcmp(cur->name,(xmlChar*)"surface")) { get_data(cur->children); } } xmlFreeDoc(doc); return 0; } */