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 |