Principal |
Gráficos 3D |
Gráficos 2D |
Fractales |
Math |
Códigos |
Tutoriales |
Links
| Volver |
Modulo: asc.h |
#ifndef _ASC_H #define _ASC_H #include <string.h> #include "objeto.h" void CargarObjeto(char *archivo_asc, Object3D &object); #endif |
Modulo: asc.cpp |
#include "asc.h" void CargarObjeto(char *archivo_asc, Object3D &object) { FILE *archivo; int numvertices, numfaces; int count, vertexnum, tempA, tempB, tempC, smoothingnum; float tempX, tempY, tempZ, tempU=0.0, tempV=0.0; char tempChar, cptr[1]=""; char *tempString = new char [80]; if((archivo = fopen(archivo_asc, "rt"))==NULL) { printf("Error al abrir el archivo: %s\n", archivo_asc); exit(1); } //busco la cadena "Tri-mesh," while(strncmp(tempString, "Tri-mesh,",9)) { fscanf(archivo, "%s", tempString); if (feof(archivo)) { printf("La cadena \"Tri-mesh,\" no existe en el archivo...\n"); exit(1); } } //lee el numero de vertices que hay en el objeto while(strncmp(tempString, "Vertices",8)) { fscanf(archivo, "%s", tempString); if (feof(archivo)) { printf("String \"Vertices\" no existe en el archivo...\n"); exit(1); } } fgetc(archivo); //Get ':' fscanf(archivo, "%d", &numvertices); object.nVertices=numvertices; object.pVertices = new Point3f[object.nVertices]; //lee el numero de caras en el objeto while(strncmp(tempString, "Faces", 5)) { fscanf(archivo, "%s", tempString); if (feof(archivo)) { printf("String \"Faces\" no existe en el archivo...\n"); exit(1); } } fgetc(archivo); //Get ':' fscanf(archivo, "%d", &numfaces); object.nFaces=numfaces; object.pFaces = new Face[object.nFaces]; // me fijo si esta "Vertex list" while(strncmp(tempString, "Vertex",6)) { fscanf(archivo, "%s", tempString); if (feof(archivo)) { printf("String \"Vertex\" no existe en el archivo...\n"); exit(1); } } while(strncmp(tempString,"list:",5)) { fscanf(archivo, "%s", tempString); if (feof(archivo)) { printf("String \"list\" no existe en el archivo...\n"); exit(1); } } //empiezo a cargar los vertices for (count=0; count<numvertices; count++) { while(strncmp(tempString,"Vertex",6)) { fscanf(archivo, "%s", tempString); if(feof(archivo)) { printf("String \"Vertex\" no existe en el archivo...\n"); exit(1); } } fscanf(archivo, "%d", &vertexnum); fscanf(archivo, "%s", tempString); //get ': ' fscanf(archivo, "%[^:]", tempString); //get ' X' fgetc(archivo); //get ':' fscanf(archivo, "%f", &tempX); fscanf(archivo, "%[^:]", tempString); fgetc(archivo); fscanf(archivo, "%f", &tempY); fscanf(archivo, "%[^:]", tempString); fgetc(archivo); fscanf(archivo, "%f", &tempZ); fscanf(archivo, "%[^:]", tempString); fgetc(archivo); fscanf(archivo, "%f", &tempU); fscanf(archivo, "%[^:]", tempString); fgetc(archivo); fscanf(archivo, "%f", &tempV); object.pVertices[count].x=tempX; object.pVertices[count].y=tempY; object.pVertices[count].z=tempZ; object.pVertices[count].u=tempU; object.pVertices[count].v=tempV; } //me fijo si esta "Face list" while(strncmp(tempString,"Face",4)) { fscanf(archivo, "%s", tempString); if (feof(archivo)) { printf("String \"Face\" no existe en el archivo...\n"); exit(1); } } while(strncmp(tempString,"list",4)) { fscanf(archivo, "%s", tempString); if (feof(archivo)) { printf("String \"list\" no existe en el archivo...\n"); exit(1); } } //Comienzo a leer las caras for (count=0; count<numfaces; count++) { while(strncmp(tempString,"Face",4)) { fscanf(archivo, "%s", tempString); if (feof(archivo)) { printf("String \"Face\" no existe en el archivo...\n"); exit(1); } } while (fgetc(archivo) != 'A'); fgetc(archivo); // get the ':' character fscanf(archivo, "%d", &tempA); // get value for vertex A while (fgetc(archivo) != 'B'); fgetc(archivo); fscanf(archivo, "%d", &tempB); while (fgetc(archivo) != 'C'); fgetc(archivo); fscanf(archivo, "%d", &tempC); object.pFaces[count].vertexIndices[0]=tempA; object.pFaces[count].vertexIndices[1]=tempB; object.pFaces[count].vertexIndices[2]=tempC; //lee el resto de la linea "AB: BC: CA:" fgets(tempString,80,archivo); while((tempChar=fgetc(archivo)) !='"') { if (feof(archivo)) { printf("Starting \" not found for material in file.Exitting...\n"); exit(1); } } char texture_name[80]=""; while((tempChar=fgetc(archivo)) !='"') { if (feof(archivo)) { printf("Ending \" not found for material in file.Exitting...\n"); exit(1); } cptr[0]=tempChar; strncat(texture_name,cptr,1); } //lee el grupo de soomthing while(strncmp(tempString, "Smoothing",9)) { fscanf(archivo, "%s", tempString); if (feof(archivo)) { printf("String \"Smoothing\" no existe en el archivo...\n"); exit(1); } } fgetc(archivo); //Get ':' fscanf(archivo, "%d", &smoothingnum); object.pFaces[count].smoothingGroup=smoothingnum; } fclose(archivo); } |
valcoey@hotmail.com
Ramiro
Buenos Aires, Argentina, 2002
Principal |
Gráficos 3D |
Gráficos 2D |
Fractales |
Math |
Códigos |
Tutoriales |
Links
| Volver |