Beispiel #1
0
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);*/
}
Beispiel #2
0
int main(int argc, char *argv[]) {                        
                           
    obj3ds *object = load3ds("test.3ds");
    jsonObj(object, "test.json");
}