This is a read only copy without any forum functionality of the old Modcraft forum.
If there is anything that you would like to have removed, message me on Discord via Kaev#5208.
Big thanks to Alastor for making this copy!

Menu

Author Topic: [request] C++ coder help  (Read 5829 times)

flagg78

  • Contributors
  • Wiki Incarnate
  • *****
  • Posts: 140
    • View Profile
[request] C++ coder help
« on: July 31, 2012, 08:28:40 am »
Hi all. i have an odd problem and need some assistance from a coder. I have reason to think there is a bug with the 3dstexmover program. i think it is having a problem when saving the model at the end. everything runs fine but the file size is reduced to zero. if someone has a chance and they could look at it that would be awesome! I think its in c++ but im not a coder. thanks for any help you can give.
Code: [Select]
#include "modelheaders.h"
#include "lib3dsmesh.h"
#include "lib3dsfile.h"

ModelHeader *header;
ModelVertex *vertices;
ModelVertex *dVertices;//==dummyvertex
int nVertices;
int FileSize;
char *m2;

void write3ds(Lib3dsFile *f)
{
int i,meshV,meshNum;
Lib3dsMesh *m;

nVertices=0;
int nSubmeshes=0;


printf("Loading 3ds Filen");

for (m=f->meshes; m; m=m->next)
{
nVertices+=m->points;
nSubmeshes++;
}

//Load initial vertex & triangle data
meshV=0;
meshNum=0;
for (m=f->meshes; m; m=m->next)
{
printf("Processing Mesh %dn",meshNum);
meshNum++;
for(i=0;i<m->points;i++)
{
m->texelL[i][0]=vertices[i+meshV].texcoords[0];
m->texelL[i][1]=1-vertices[i+meshV].texcoords[1];
}
meshV+=m->points;
}

}

void load3ds(Lib3dsFile *f)
{
int i,meshV,meshNum;
Lib3dsMesh *m;
nVertices=0;
int nSubmeshes=0;

printf("Loading 3ds Filen");

for (m=f->meshes; m; m=m->next)
{
nVertices+=m->points;
nSubmeshes++;
}
printf("Vertices: %dn",nVertices);
dVertices=new ModelVertex[nVertices];

//Load initial vertex & triangle data
meshV=0;
meshNum=0;
for (m=f->meshes; m; m=m->next)
{
printf("Processing Mesh %dn",meshNum);
meshNum++;
for(i=0;i<m->points;i++)
{
dVertices[i+meshV].texcoords[0]=m->texelL[i][0];
dVertices[i+meshV].texcoords[0]=m->texelL[i][1];
dVertices[i+meshV].texcoords[1]=1-dVertices[i+meshV].texcoords[1];
}
meshV+=m->points;
}

}



int main(int argc, char **argv)
{
printf("3ds To M2 TexMover");
Lib3dsFile *f=0;
FILE *M2;
bool versa=false;
if(argc<3)
{
printf(" 3dsToM2Texmover <M2 File Name> <3ds File Name> [Optional:M2to3ds: r]n");
return 0;
}
if(argc>3)versa=true;

f=lib3ds_file_load(argv[2]);

if(!f)
{
printf("ERROR: Unable to load 3ds file %sn",argv[1]);
return 0;
}

M2=fopen(argv[1],"wb");
if(M2==NULL)
{
printf("ERROR: Unable to open M2 file for writing %sn",argv[2]);
lib3ds_file_free(f);
return 0;
}
fseek(M2,0,SEEK_END);
FileSize=ftell(M2);
fseek(M2,0,SEEK_SET);

m2=new char[FileSize];

fread(m2,FileSize,1,M2);
fclose(M2);

header=(ModelHeader *)(m2);
vertices=(ModelVertex *)(m2+header->ofsVertices);
printf("M2: nVertices: %d",header->nVertices);
if(!versa){
load3ds(f);
for(int i=0;i<header->nVertices;i++){
vertices[i].texcoords[0]=dVertices[i].texcoords[0];
vertices[i].texcoords[1]=dVertices[i].texcoords[1];
}
}
else{
write3ds(f);
}


lib3ds_file_free(f);
if(!versa){
printf("Saving Changesn");
M2=fopen(argv[1],"wb");
fwrite(m2,FileSize,1,M2);
fclose(M2);
}

printf("3dstoM2 UV-convertion completedn");
}
« Last Edit: January 01, 1970, 01:00:00 am by Admin »