update moon.cpp

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@5451 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: 7b2b13cf1a03653742d81c9204f77c2ca2659a55
Former-commit-id: 5af835341b40cae68b6509929b92fea62493f29e
This commit is contained in:
torcs-ng 2013-05-12 23:47:53 +00:00
parent 852259c208
commit 79539047ea
3 changed files with 191 additions and 278 deletions

View file

@ -62,28 +62,28 @@ void loadAndGroup(char *OutputFileName)
if (fileL0)
{
fprintf(stderr, "\nloading file %s\n", fileL0);
loadAC(fileL0, NULL, -1);
loadAC(fileL0);
ob0 = root_ob;
root_ob = NULL;
}
if (fileL1)
{
fprintf(stderr, "\nloading file %s\n", fileL1);
loadAC(fileL1, NULL, -1);
loadAC(fileL1);
ob1 = root_ob;
root_ob = NULL;
}
if (fileL2)
{
fprintf(stderr, "\nloading file %s\n", fileL2);
loadAC(fileL2, NULL, -1);
loadAC(fileL2);
ob2 = root_ob;
root_ob = NULL;
}
if (fileL3)
{
fprintf(stderr, "\nloading file %s\n", fileL3);
loadAC(fileL3, NULL, -1);
loadAC(fileL3);
ob3 = root_ob;
root_ob = NULL;
}
@ -96,7 +96,7 @@ void loadAndGroup(char *OutputFileName)
collapseTextures(ob0, ob1, ob2, ob3);
splitObjects(&ob0);
ob0 = splitObjects(ob0);
/* now make groups from ob0 */

View file

@ -16,7 +16,7 @@
* *
***************************************************************************/
/** @file
/** @file
@author Christophe Guionneau
@version $Id$
@ -26,6 +26,7 @@
#include <stdlib.h>
#include <ctype.h>
#include <cstring>
#include <sstream>
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
@ -82,6 +83,41 @@ ob_t * obCreate()
return ob;
}
void obFree(ob_t *o)
{
freez(o->name);
freez(o->type);
freez(o->texture);
freez(o->vertex);
freez(o->norm);
freez(o->snorm);
freez(o->vertexarray);
freez(o->vertexarray1);
freez(o->vertexarray2);
freez(o->vertexarray3);
freez(o->textarray);
freez(o->textarray1);
freez(o->textarray2);
freez(o->textarray3);
}
ob_t * obAppend(ob_t * destob, ob_t * srcob)
{
if(!destob)
return srcob;
if(!srcob)
return destob;
ob_t * curob = destob;
while(curob->next != NULL)
curob = curob->next;
curob->next = srcob;
return destob;
}
void obInitSpacialExtend(ob_t * ob)
{
ob->x_min = ob->y_min = ob->z_min = DBL_MAX;
@ -121,7 +157,8 @@ void obCreateTextArrays(ob_t * ob)
const int numEls = ob->numvertice * 2;
const int elSize = sizeof(tcoord_t);
ob->textarray = (double *) calloc(numEls, elSize);
if(ob->vertexarray)
ob->textarray = (double *) calloc(numEls, elSize);
if(ob->vertexarray1)
ob->textarray1 = (double *) calloc(numEls, elSize);
if(ob->vertexarray2)
@ -145,7 +182,8 @@ void obCreateVertexArrays(ob_t * ob)
{
int numEls = ob->numsurf * 3;
ob->vertexarray = (tcoord_t *) calloc(numEls, sizeof(tcoord_t));
if(ob->texture)
ob->vertexarray = (tcoord_t *) calloc(numEls, sizeof(tcoord_t));
if(ob->texture1)
ob->vertexarray1 = (tcoord_t *) calloc(numEls, sizeof(tcoord_t));
@ -159,8 +197,8 @@ void obCreateVertexArrays(ob_t * ob)
void obCopyTextureNames(ob_t * destob, ob_t * srcob)
{
destob->texture = strdup(srcob->texture);
if(srcob->texture)
destob->texture = strdup(srcob->texture);
if(srcob->texture1)
destob->texture1 = strdup(srcob->texture1);
if(srcob->texture2)
@ -171,6 +209,7 @@ void obCopyTextureNames(ob_t * destob, ob_t * srcob)
void obSetVertexArraysIndex(ob_t * ob, int vaIdx, int newIndex)
{
ob->vertexarray[vaIdx].indice = newIndex;
if(ob->vertexarray1)
@ -342,9 +381,6 @@ ob_t * createObjectSplitCopy(int splitid, ob_t * srcobj, ob_t * tmpob)
retob->snorm = (point_t*) malloc(size_pts);
memset(retob->snorm, 0, size_pts);
retob->name = (char *) malloc(strlen(srcobj->name) + 10);
memset(retob->name, 0, strlen(srcobj->name) + 10);
/* assign data */
createTexChannelArrays(retob, tmpob);
@ -358,20 +394,20 @@ ob_t * createObjectSplitCopy(int splitid, ob_t * srcobj, ob_t * tmpob)
memcpy(retob->snorm, tmpob->snorm, size_pts);
memcpy(retob->norm, tmpob->snorm, size_pts);
retob->texture = strdup(srcobj->texture);
if(srcobj->texture1)
retob->texture1 = strdup(srcobj->texture1);
if(srcobj->texture2)
retob->texture2 = strdup(srcobj->texture2);
if(srcobj->texture3)
retob->texture3 = strdup(srcobj->texture3);
sprintf(retob->name, "%s_s_%d", srcobj->name, splitid);
obCopyTextureNames(retob, srcobj);
retob->numsurf = numtri;
retob->numvert = numvert;
retob->numvertice = numvert;
retob->type = strdup(srcobj->type);
/* special handling of name */
std::stringstream namestream;
namestream << srcobj->name << "_s_" << splitid;
retob->name = strdup(namestream.str().c_str());
return retob;
}
void copyTexChannel(double * desttextarray, tcoord_t * destvertexarray, tcoord_t * srcvert,
@ -390,10 +426,13 @@ void copySingleVertexData(ob_t * destob, ob_t * srcob,
tcoord_t * srcvert;
/* channel 0 */
srcvert = &(srcob->vertexarray[srcvertidx]);
if(destob->textarray != NULL)
{
srcvert = &(srcob->vertexarray[srcvertidx]);
copyTexChannel(destob->textarray, destob->vertexarray, srcvert,
storedptidx, destptidx, destvertidx);
copyTexChannel(destob->textarray, destob->vertexarray, srcvert,
storedptidx, destptidx, destvertidx);
}
/* channel 1 */
if(destob->textarray1 != NULL)
@ -651,36 +690,35 @@ int findIndice(int indice, int *oldva, int n)
return -1;
}
int terrainSplitOb(ob_t **object)
ob_t* terrainSplitOb(ob_t * object)
{
ob_t * tob = NULL;
ob_t * tob0 = NULL;
ob_t * tobnext = (*object)->next;
printf("terrain splitting %s \n", (*object)->name);
if (((*object)->x_max - (*object)->x_min) < 2 * distSplit)
printf("terrain splitting %s \n", object->name);
if ((object->x_max - object->x_min) < 2 * distSplit)
return 0;
if (((*object)->y_max - (*object)->y_min) < 2 * distSplit)
if ((object->y_max - object->y_min) < 2 * distSplit)
return 0;
printf("terrain splitting %s started\n", (*object)->name);
printf("terrain splitting %s started\n", object->name);
int numSurf = (*object)->numsurf;
int numSurf = object->numsurf;
int *oldSurfToNewObjMap = (int *) calloc(numSurf, sizeof(int));
int numNewObjs = 0;
for (double curXPos = (*object)->x_min; curXPos < (*object)->x_max; curXPos += distSplit)
for (double curXPos = object->x_min; curXPos < object->x_max; curXPos += distSplit)
{
for (double curYPos = (*object)->y_min; curYPos < (*object)->y_max; curYPos += distSplit)
for (double curYPos = object->y_min; curYPos < object->y_max; curYPos += distSplit)
{
int numTriFound = 0;
int found_a_tri = 0;
for (int curObjSurf = 0; curObjSurf < (*object)->numsurf; curObjSurf++)
for (int curObjSurf = 0; curObjSurf < object->numsurf; curObjSurf++)
{
point_t surfCentroid;
computeObSurfCentroid(*object, curObjSurf, &surfCentroid);
computeObSurfCentroid(object, curObjSurf, &surfCentroid);
if (surfCentroid.x >= curXPos && surfCentroid.x < curXPos + distSplit)
{
@ -701,13 +739,13 @@ int terrainSplitOb(ob_t **object)
}
}
printf("found in %s : %d subsurfaces \n", (*object)->name, numNewObjs);
printf("found in %s : %d subsurfaces \n", object->name, numNewObjs);
for (int curNewObj = 0; curNewObj < numNewObjs; curNewObj++)
{
int numNewSurf = 0;
/* find the number of surface */
for (int curSurf = 0; curSurf < (*object)->numsurf; curSurf++)
for (int curSurf = 0; curSurf < object->numsurf; curSurf++)
{
if (oldSurfToNewObjMap[curSurf] != curNewObj)
continue;
@ -719,27 +757,30 @@ int terrainSplitOb(ob_t **object)
tob = obCreate();
tob->numsurf = numNewSurf;
tob->attrSurf = (*object)->attrSurf;
tob->attrMat = (*object)->attrMat;
if ((*object)->data)
tob->data = strdup((*object)->data);
tob->name = (char *) malloc(strlen((*object)->name) + 10);
tob->type = strdup((*object)->type);
sprintf(tob->name, "%s__split__%d", (*object)->name, curNewObj);
tob->attrSurf = object->attrSurf;
tob->attrMat = object->attrMat;
if (object->data)
tob->data = strdup(object->data);
tob->type = strdup(object->type);
obCopyTextureNames(tob, *object);
/* special name handling */
std::stringstream namestream;
namestream << object->name << "__split__" << curNewObj;
tob->name = strdup(namestream.str().c_str());
obCopyTextureNames(tob, object);
/* store the index data in tob's vertexarray */
obCreateVertexArrays(tob);
int curNewSurf = 0;
for (int curSurf = 0; curSurf < (*object)->numsurf; curSurf++)
for (int curSurf = 0; curSurf < object->numsurf; curSurf++)
{
if (oldSurfToNewObjMap[curSurf] != curNewObj)
continue;
copyVertexArraysSurface(tob, curNewSurf, *object, curSurf);
copyVertexArraysSurface(tob, curNewSurf, object, curSurf);
curNewSurf++;
}
@ -752,14 +793,14 @@ int terrainSplitOb(ob_t **object)
* we don't know the size, so we allocate the same number as in the
* source object.
*/
point_t* pttmp = (point_t*) calloc((*object)->numvertice, sizeof(point_t));
point_t* snorm = (point_t*) calloc((*object)->numvertice, sizeof(point_t));
point_t* pttmp = (point_t*) calloc(object->numvertice, sizeof(point_t));
point_t* snorm = (point_t*) calloc(object->numvertice, sizeof(point_t));
/* storedPtIdxArr: keep a list of the indices of points stored in the new object.
* If an index is contained in storedPtIdxArr we don't store the point itself,
* but only the index in the vertexarray of the new object.
*/
int* storedPtIdxArr = (int*) calloc((*object)->numvertice, sizeof(int));
int* storedPtIdxArr = (int*) calloc(object->numvertice, sizeof(int));
int curNewPtIdx = 0;
for (int curNewIdx = 0; curNewIdx < numNewSurf * 3; curNewIdx++)
@ -771,8 +812,8 @@ int terrainSplitOb(ob_t **object)
{
storedPtIdxArr[curNewPtIdx] = idx;
storedIdx = curNewPtIdx;
copyPoint(&(pttmp[curNewPtIdx]), &((*object)->vertex[idx]));
copyPoint(&(snorm[curNewPtIdx]), &((*object)->norm[idx]));
copyPoint(&(pttmp[curNewPtIdx]), &(object->vertex[idx]));
copyPoint(&(snorm[curNewPtIdx]), &(object->norm[idx]));
curNewPtIdx++;
}
@ -804,25 +845,15 @@ int terrainSplitOb(ob_t **object)
obInitSpacialExtend(tob);
if (tob0 == NULL)
{
tob0 = tob;
tob0->next = tobnext;
}
else
{
tob->next = tob0;
tob0 = tob;
}
// prepend the new object to the list
tob0 = obAppend(tob, tob0);
}
if (tob0 != NULL)
*object = tob0;
return 1;
return tob0;
}
int splitOb(ob_t **object)
ob_t* splitOb(ob_t *object)
{
int *oldva = 0;
int curtri = 0;
@ -849,11 +880,10 @@ int splitOb(ob_t **object)
ob_t * tob0 = NULL;
int numob = 0;
int firstTri = 0;
ob_t * tobnext = (*object)->next;
int atleastone = 0;
int curvert = 0;
orignumtris = (*object)->numsurf;
orignumtris = object->numsurf;
orignumverts = orignumtris * 3;
tri = (int *) calloc(orignumtris, sizeof(int));
@ -864,7 +894,7 @@ int splitOb(ob_t **object)
workob->snorm = (point_t *) calloc(orignumverts, sizeof(point_t));
// create texture channels
createTexChannelArrays(workob, *object);
createTexChannelArrays(workob, object);
while (mustcontinue == 1)
{
@ -890,7 +920,7 @@ int splitOb(ob_t **object)
/** find vertices of the triangle */
for(i = 0; i < 3; i++)
{
copyTexCoord(&curvertex[i], &((*object)->vertexarray[curvert+i]));
copyTexCoord(&curvertex[i], &(object->vertexarray[curvert+i]));
curstoredidx[i] = findIndice(curvertex[i].indice, oldva, numptstored);
}
@ -934,17 +964,17 @@ int splitOb(ob_t **object)
if (curstoredidx[i] == -1)
{
copyPoint(&(workob->vertex[numptstored]), &((*object)->vertex[curvertex[i].indice]));
copyPoint(&(workob->snorm[numptstored]), &((*object)->norm[curvertex[i].indice]));
copyPoint(&(workob->vertex[numptstored]), &(object->vertex[curvertex[i].indice]));
copyPoint(&(workob->snorm[numptstored]), &(object->norm[curvertex[i].indice]));
clearSavedInVertexArrayEntry(*object, curvert+i);
clearSavedInVertexArrayEntry(object, curvert+i);
oldva[numptstored] = curvertex[i].indice; /* remember the value of the vertice already saved */
curstoredidx[i] = numptstored;
numptstored++;
}
copySingleVertexData(workob, *object, curstoredidx[i],
copySingleVertexData(workob, object, curstoredidx[i],
oldnumptstored, numvertstored, curvert+i);
numvertstored++;
@ -965,33 +995,23 @@ int splitOb(ob_t **object)
workob->numvertice = numptstored;
workob->numsurf = numvertstored/3;
tob = createObjectSplitCopy(numob++, *object, workob);
tob = createObjectSplitCopy(numob++, object, workob);
attrSurf = tob->attrSurf;
attrMat = tob->attrMat;
if (tob0 == NULL)
{
tob0 = tob;
tob0->next = tobnext;
}
else
{
tob->next = tob0;
tob0 = tob;
}
// prepend the new object to the list
tob0 = obAppend(tob, tob0);
printf("numtri = %d on orignumtris =%d \n", numtristored, orignumtris);
} // while (mustcontinue == 1)
*object = tob0;
freez(tri);
freez(oldva);
freeobject(workob);
obFree(workob);
return 0;
return tob0;
}
int doKids(char *Line, ob_t *object, mat_t *material)
@ -1029,13 +1049,16 @@ int doKids(char *Line, ob_t *object, mat_t *material)
numrefstotal * 2 * sizeof(double));
memcpy(object->next->surfrefs, tmpsurf, numrefs * sizeof(int));
object->next->numvertice = numvertice;
if ((object->next->name) == NULL)
{
object->next->name = (char*) malloc(
sizeof(char) + strlen(tmpname) + 5);
sprintf(object->next->name, "%s%d", tmpname, tmpIndice);
std::stringstream namestream;
namestream << tmpname << tmpIndice;
object->next->name = strdup(namestream.str().c_str());
tmpIndice++;
}
if ((typeConvertion == _AC3DTOAC3DS
&& (extendedStrips == 1 || extendedTriangles == 1))
|| typeConvertion == _AC3DTOAC3DGROUP
@ -1104,12 +1127,6 @@ int doName(char *Line, ob_t *object, mat_t *material)
}
sprintf(name, "%s", name2);
if (strlen(name) > 11)
{
fprintf(stderr, "truncating object name %s ", name);
name[11] = '\0';
fprintf(stderr, " to %s \n", name);
}
/*sprintf(name,"terrain%d",tmpIndice2++);*/
object->next->name = strdup(name);
sprintf(tmpname, "%s", name);
@ -1309,11 +1326,7 @@ int doRefs(char *Line, ob_t *object, mat_t *material)
return (-1);
}
sscanf(p, "%d", &refs);
if (refs != 3)
{
fprintf(stderr, " ERROR : refs !=3\n");
exit(-1);
}
numrefstotal += refs;
numrefsFound = 1;
tmpsurf[numrefs] = refs;
@ -1392,41 +1405,62 @@ bool isTerrainSplit(ob_t* object)
return false;
}
/** Go through all given objects, check whether a normal split or a terrain
* split is necessary and execute the split.
*/
void splitObjects(ob_t** object)
ob_t * splitObjects(ob_t* object)
{
if (NULL == object)
return;
return NULL;
ob_t ** current_ob = object;
/* The returned object. Contains all objects from the given
* object, split and non-split objects.
*/
ob_t* newob = NULL;
for (; *current_ob != NULL; current_ob = &(**current_ob).next)
ob_t* current_ob = object;
while(current_ob != NULL)
{
const char* objname = (**current_ob).name;
const char* objname = current_ob->name;
if(!objname)
objname = "";
if (isObjectSplit(*current_ob))
ob_t* next_ob = current_ob->next; // remember next one, cuz we'll modify current_ob
ob_t* splitob = NULL;
if (isObjectSplit(current_ob))
{
printf(
"Found in %s, a duplicate coord with not the same u,v, split is required\n",
objname);
splitOb(current_ob);
}
else
printf("No split required for %s\n", objname);
printf("Found in %s, a duplicate coord with not the same u,v, split is required\n",
objname);
if (isTerrainSplit(*current_ob))
splitob = splitOb(current_ob);
}
else if (isTerrainSplit(current_ob))
{
printf("Splitting surfaces of %s\n", objname);
terrainSplitOb(current_ob);
splitob = terrainSplitOb(current_ob);
}
if(splitob != NULL)
{
obFree(current_ob);
newob = obAppend(newob, splitob);
}
else
printf("No terrain split for %s\n", objname);
{
printf("No split required for %s\n", objname);
// Append only the single object, not the whole list.
// The others will be appended in this function one by one.
current_ob->next = NULL;
newob = obAppend(newob, current_ob);
}
current_ob = next_ob;
}
return newob;
}
int loadAC(char * inputFilename, char * outputFilename, int saveIn)
int loadAC(char * inputFilename, char * outputFilename)
{
/* saveIn : 0= 3ds , 1= obj , 2=ac3d grouped (track) , 3 = ac3d strips (cars) */
char Line[256];
@ -1505,126 +1539,44 @@ int loadAC(char * inputFilename, char * outputFilename, int saveIn)
fclose(file);
if(ret != 0)
{
freeobject(current_ob);
obFree(current_ob);
return ret;
}
root_ob = current_ob;
if(splitObjectsDuringLoad != 0)
splitObjects(&root_ob);
root_ob = splitObjects(root_ob);
if (saveIn == -1)
return (0);
// --- perform file output ---
if (saveIn == 0)
if(!outputFilename)
return 0;
if (typeConvertion == _AC3DTOOBJ)
{
#ifdef _3DS
saveObin3DS(outputFilename, root_ob);
#endif
computeSaveOBJ(outputFilename, root_ob);
}
else if (saveIn == 1)
else if (typeConvertion == _AC3DTOAC3DM)
{
computeSaveAC3DM(outputFilename, root_ob);
else if (saveIn == 3)
}
else if (typeConvertion == _AC3DTOAC3DS)
{
computeSaveAC3DStrip(outputFilename, root_ob);
else
computeSaveOBJ(outputFilename, root_ob);
return (0);
}
int loadACo(char * inputFilename, char * outputFilename, int saveIn)
{
char Line[256];
int ret = 0;
int (*doVerb)(char * Line, ob_t *object, mat_t * material);
FILE * file;
ob_t * current_ob;
mat_t * current_material;
if ((file = fopen(inputFilename, "r")) == NULL)
{
fprintf(stderr, "failed to open %s\n", inputFilename);
return (-1);
}
if (fgets(Line, 256, file) == NULL)
else if (typeConvertion == _AC3DTOAC3D)
{
fprintf(stderr, "failed to read first line of the file\n");
return (-1);
}
if (strnicmp(Line, AC3D, strlen(AC3D)))
{
fprintf(stderr, "unknown format %s \n", Line);
return (-1);
}
current_ob = root_ob = (ob_t*) malloc(sizeof(ob_t));
current_material = root_material = (mat_t *) malloc(sizeof(mat_t));
memset(current_ob, '\0', sizeof(ob_t));
memset(current_material, '\0', sizeof(mat_t));
root_ob->name = strdup("root");
root_material->name = strdup("root");
fprintf(stderr, "starting loading ...\n");
while (fgets(Line, sizeof(Line), file))
{
int i = 0;
/*fprintf(stderr,"parsing line: %s", Line);*/
doVerb = NULL;
while (1)
{
if (stricmp("END", verbTab[i].verb) == 0)
break;
if (strnicmp(Line, verbTab[i].verb, strlen(verbTab[i].verb)) == 0)
{
doVerb = verbTab[i].doVerb;
break;
}
i++;
}
if (numvertFound == 1 && doVerb == NULL)
{
ret = doGetVertex(Line, current_ob, current_material);
if(ret != 0)
break;
}
else if (numrefsFound == 1 && doVerb == NULL)
{
ret = doGetSurf(Line, current_ob, current_material);
if(ret != 0)
break;
}
else
{
if (doVerb == NULL)
{
fprintf(stderr, " Unknown verb %s\n", Line);
return (-1);
}
numvertFound = 0;
numrefsFound = 0;
ret = doVerb(Line, current_ob, current_material);
if(ret != 0)
break;
}
}
fclose(file);
if(ret != 0)
{
freeobject(current_ob);
return ret;
}
root_ob = current_ob;
if(splitObjectsDuringLoad != 0)
splitObjects(&root_ob);
printf("\nobjects loaded\nresaving in AC3D\n");
if (saveIn == 0)
computeSaveAC3D(outputFilename, root_ob);
else
computeSaveOBJ(outputFilename, root_ob);
return (0);
}
#ifdef _3DS
else if (typeConvertion == _AC3DTO3DS)
{
saveObin3DS(outputFilename, root_ob);
}
#endif
return 0;
}
#ifdef _3DS
@ -5028,7 +4980,7 @@ int mergeSplitted(ob_t **object)
tobP->next = tob0->next;
oo = tob0;
tob0 = tob0->next;
freeobject(oo);
obFree(oo);
k++;
continue;
}
@ -5157,25 +5109,6 @@ int mergeSplitted(ob_t **object)
return reduced;
}
int freeobject(ob_t *o)
{
freez(o->name);
freez(o->type);
freez(o->texture);
freez(o->vertex);
freez(o->norm);
freez(o->snorm);
freez(o->vertexarray);
freez(o->vertexarray1);
freez(o->vertexarray2);
freez(o->vertexarray3);
freez(o->textarray);
freez(o->textarray1);
freez(o->textarray2);
freez(o->textarray3);
return 0;
}
int findPoint(point_t * vertexArray, int sizeVertexArray, point_t * theVertex)
{

View file

@ -342,42 +342,22 @@ int main(int argc, char **argv)
// fake_argv[2] = NULL;
init_args(argc, argv);
extern int loadACo(char * inputFilename, char * outputFilename, int saveIn);
extern int loadAC(char * inputFilename, char * outputFilename, int saveIn);
#ifdef _3DS
extern int load3ds( char * inputFilename, char * outputFilename);
#endif
if (typeConvertion == _AC3DTO3DS)
{
loadAC(InputFileName, OutputFileName, 0);
}
else if (typeConvertion == _3DSTOAC3D)
{
#ifdef _3DS
load3ds( InputFileName, OutputFileName);
#endif
}
else if (typeConvertion == _AC3DTOAC3D)
{
loadACo(InputFileName, OutputFileName, 0);
}
else if (typeConvertion == _AC3DTOOBJ)
{
loadAC(InputFileName, OutputFileName, 1);
}
else if (typeConvertion == _AC3DTOAC3DM)
{
loadAC(InputFileName, OutputFileName, 2);
}
else if (typeConvertion == _AC3DTOAC3DS)
{
loadAC(InputFileName, OutputFileName, 3);
}
else if (typeConvertion == _AC3DTOAC3DGROUP)
if (typeConvertion == _AC3DTOAC3DGROUP)
{
loadAndGroup(OutputFileName);
}
#ifdef _3DS
else if (typeConvertion == _3DSTOAC3D)
{
load3ds( InputFileName, OutputFileName);
}
#endif
else
loadAC(InputFileName, OutputFileName);
return 0;
}