void convert3ds(FILE *outputM2, Lib3dsFile *f) { load3ds(f); createTextures(); printf("Writing M2 File\n"); initFile(outputM2,"TEMP"); printf("Writing Model Data\n"); writeModelData(outputM2, dVertices, nVertices, dTriangles, nTriangles, dSubmeshes, nSubmeshes, dTextureUnits, nTextureUnits); printf("Writing Material Data\n"); writeMaterialData(outputM2, textureNames, dTextures, nTextures, nMaterials, colorData, colorTransData, transData, renderFlags); printf("Finalizing Model Data\n"); rewriteHeader(outputM2); /*int i,j,k; char *inputData; unsigned int fileLength; fseek(inputM2,0,SEEK_END); fileLength=ftell(inputM2); inputData=new char[fileLength]; fseek(inputM2,0,SEEK_SET); fread(inputData,fileLength,1,inputM2); fwrite(inputData,fileLength,1,outputM2); header=(ModelHeader *)inputData; views=(ModelView *)(inputData+header->ofsViews); oldSubmesh=(ModelGeoset *)(inputData+views->ofsSub); load3ds(f); header->ofsVertices=ftell(outputM2); header->nVertices=nVertices*4; fwrite(dVertices,sizeof(ModelVertex),nVertices,outputM2); fwrite(dVertices,sizeof(ModelVertex),nVertices,outputM2); fwrite(dVertices,sizeof(ModelVertex),nVertices,outputM2); fwrite(dVertices,sizeof(ModelVertex),nVertices,outputM2); fillLine(outputM2); header->ofsTexLookup=ftell(outputM2); header->nTexLookup=textureNames.size(); for(i=0;i<textureNames.size();i++) fwrite(&i,sizeof(uint16),1,outputM2); fillLine(outputM2); //Write out texture data createTextures(); for(i=0;i<nTextures;i++) { dTextures[i].nameOfs=ftell(outputM2); fwrite(textureNames[i].c_str(),textureNames[i].length()+1,1,outputM2); fillLine(outputM2); } header->nTextures=nTextures; header->ofsTextures=ftell(outputM2); fwrite(dTextures,sizeof(ModelTextureDef),nTextures,outputM2); fillLine(outputM2); //Output Color data header->nColors=nMaterials; header->ofsColors=ftell(outputM2); AnimationBlock *colorBlocks; colorBlocks=new AnimationBlock[2*nMaterials]; fwrite(colorBlocks,sizeof(AnimationBlock),2*nMaterials,outputM2); fillLine(outputM2); j=0; for(i=0;i<nMaterials;i++) { writeAnimationBlockData(&colorBlocks[i*2], outputM2, 0, 0, &j, 1, &colorData[3*i], 1, 3*sizeof(float)); writeAnimationBlockData(&colorBlocks[i*2+1], outputM2, 0, 0, &j, 1, &colorTransData[i], 1, sizeof(short)); } fseek(outputM2,header->ofsColors,SEEK_SET); fwrite(colorBlocks,sizeof(AnimationBlock),2*nMaterials,outputM2); delete colorBlocks; fseek(outputM2,0,SEEK_END); //Output Transparency AnimationBlock *transBlocks; header->nTransparency=nMaterials; header->ofsTransparency=ftell(outputM2); transBlocks=new AnimationBlock[nMaterials]; fwrite(transBlocks,sizeof(AnimationBlock),nMaterials,outputM2); fillLine(outputM2); for(i=0;i<nMaterials;i++) writeAnimationBlockData(&transBlocks[i], outputM2, 0, 0, &j, 1, &transData[i], 1, sizeof(short)); fseek(outputM2,header->ofsTransparency,SEEK_SET); fwrite(transBlocks,sizeof(AnimationBlock),nMaterials,outputM2); delete transBlocks; fseek(outputM2,0,SEEK_END); header->nTransparencyLookup=nMaterials; header->ofsTransparencyLookup=ftell(outputM2); for(i=0;i<textureNames.size();i++) fwrite(&i,sizeof(uint16),1,outputM2); fillLine(outputM2); //Output Render Flags header->nTexFlags=nMaterials; header->ofsTexFlags=ftell(outputM2); fwrite(renderFlags,sizeof(uint32),nMaterials,outputM2); fillLine(outputM2); //Redo View Data for(i=0;i<header->nViews;i++) { views[i].ofsIndex=ftell(outputM2); views[i].nIndex=nVertices; for(j=0;j<nVertices;j++) { k=j+i*nVertices; fwrite(&k,sizeof(uint16),1,outputM2); } fillLine(outputM2); views[i].ofsTris=ftell(outputM2); views[i].nTris=nTriangles*3; fwrite(dTriangles,sizeof(uint16)*3,nTriangles,outputM2); fillLine(outputM2); views[i].ofsProps=ftell(outputM2); views[i].nProps=nVertices; k=0; for(j=0;j<nVertices;j++) fwrite(&k,sizeof(int),1,outputM2); fillLine(outputM2); views[i].ofsSub=ftell(outputM2); views[i].nSub=nSubmeshes; fwrite(dSubmeshes,sizeof(ModelGeoset),nSubmeshes,outputM2); fillLine(outputM2); views[i].ofsTex=ftell(outputM2); views[i].nTex=nTextureUnits; fwrite(dTextureUnits,sizeof(ModelTexUnit),nTextureUnits,outputM2); fillLine(outputM2); } fseek(outputM2,0,SEEK_SET); fwrite(header,sizeof(ModelHeader),1,outputM2); fseek(outputM2,header->ofsViews,SEEK_SET); fwrite(views,sizeof(ModelView),header->nViews,outputM2);*/ }
int main(int argc, char *argv[]) { obj3ds *object = load3ds("test.3ds"); jsonObj(object, "test.json"); }