www.pudn.com > 3DEDITOR.rar > IMPORT3DS.CPP
#include "stdafx.h" #include#include #include #include "impexp3ds.h" int import3ds::read_chunk() { int i=0; i+=fread(&chunkid,1,2,fp); i+=fread(&chunklen,1,4,fp); if (i!=6) return 0; chunklen-=6; filepos+=6; return 1; } void import3ds::jump_chunk() { fseek(fp,chunklen,SEEK_CUR); filepos+=chunklen; } void import3ds::load_chunk() { if (chunk) delete chunk; chunk=new char[chunklen]; filepos+=chunklen; fread(chunk,chunklen,1,fp); } void import3ds::load_string(char *str) { int a=0; while( str[a++]=fgetc(fp) ) ; chunklen-=a; filepos+=a; } void import3ds::load_object() { char objname[256]; load_string(objname); read_chunk(); switch(chunkid) { case 0x4600: { load_light(objname); break; } case 0x4700: { load_chunk(); camera(objname, (float *)chunk,(float *)&chunk[12], *((float *)&chunk[24]), *((float *)&chunk[28])); break; } case 0x4100: { if (object_name(objname)) load_mesh(objname); else jump_chunk(); break; } default: jump_chunk(); } } void import3ds::load_mesh(char *objname) { int nvert=0,nfaces=0,ntextcoord=0,nfacematerial=0; char *vert=0,*faces=0,*textcoord=0,*facematerial=0; float local_axis[12]={ 1,0,0, 0,1,0, 0,0,1, 0,0,0 }; int a,fpos=filepos+chunklen; while( filepos u_scale=1.0; m->v_scale=1.0; m->u_offset=0.0; m->v_offset=0.0; m->rotation=0.0; while( filepos amount=*((short int *)chunk); break; case 0xA300: load_string(m->filename); break; case 0xA351: load_chunk(); m->options=*((short int *)chunk); break; case 0xA353: load_chunk(); m->filtering=*((float *)chunk); break; case 0xA354: load_chunk(); m->u_scale=*((float *)chunk); break; case 0xA356: load_chunk(); m->v_scale=*((float *)chunk); break; case 0xA358: load_chunk(); m->u_offset=*((float *)chunk); break; case 0xA35A: load_chunk(); m->v_offset=*((float *)chunk); break; case 0xA35C: load_chunk(); m->rotation=*((float *)chunk); break; default: jump_chunk(); } } } void import3ds::load_material() { int fpos=filepos+chunklen; while( filepos