Principal | Gráficos 3D | Gráficos 2D | Fractales | Math | Códigos | Tutoriales | Links
Convierte un archivo ASC, en uno de texto en algo mas simple, para su posterior lectura. El archivo de ASC, es creado por 3D Studio MAX o cualquier programa de modelado que exporte este tipo de archivos, la unica restricción para su converciónes es que tenga un solo objeto y sin las coordenadas del mapeo de textura.
cubo.asc
Named Object: "Box01" Tri-mesh, Vertices: 8 Faces: 12 Vertex list: Vertex 0: X: -9.997291 Y: -9.995248 Z: -10.003587 Vertex 1: X: 10.002709 Y: -9.995248 Z: -10.003587 Vertex 2: X: -9.997291 Y: 10.004752 Z: -10.003587 Vertex 3: X: 10.002709 Y: 10.004752 Z: -10.003587 Vertex 4: X: -9.997291 Y: -9.995248 Z: 9.996413 Vertex 5: X: 10.002709 Y: -9.995248 Z: 9.996413 Vertex 6: X: -9.997291 Y: 10.004752 Z: 9.996413 Vertex 7: X: 10.002709 Y: 10.004752 Z: 9.996413 Face list: Face 0: A:0 B:2 C:3 AB:1 BC:1 CA:0 Smoothing: 2 Face 1: A:3 B:1 C:0 AB:1 BC:1 CA:0 Smoothing: 2 Face 2: A:4 B:5 C:7 AB:1 BC:1 CA:0 Smoothing: 3 Face 3: A:7 B:6 C:4 AB:1 BC:1 CA:0 Smoothing: 3 Face 4: A:0 B:1 C:5 AB:1 BC:1 CA:0 Smoothing: 6 Face 5: A:5 B:4 C:0 AB:1 BC:1 CA:0 Smoothing: 6 Face 6: A:1 B:3 C:7 AB:1 BC:1 CA:0 Smoothing: 5 Face 7: A:7 B:5 C:1 AB:1 BC:1 CA:0 Smoothing: 5 Face 8: A:3 B:2 C:6 AB:1 BC:1 CA:0 Smoothing: 6 Face 9: A:6 B:7 C:3 AB:1 BC:1 CA:0 Smoothing: 6 Face 10: A:2 B:0 C:4 AB:1 BC:1 CA:0 Smoothing: 7 Face 11: A:4 B:6 C:2 AB:1 BC:1 CA:0 Smoothing: 7
Cubo.dat
8 -9.997291 -9.995248 -10.003587 10.002709 -9.995248 -10.003587 -9.997291 10.004752 -10.003587 10.002709 10.004752 -10.003587 -9.997291 -9.995248 9.996413 10.002709 -9.995248 9.996413 -9.997291 10.004752 9.996413 10.002709 10.004752 9.996413 12 0 2 3 3 1 0 4 5 7 7 6 4 0 1 5 5 4 0 1 3 7 7 5 1 3 2 6 6 7 3 2 0 4 4 6 2
#include <stdlib.h> #include <string.h> #include <conio.h> #include <stdio.h> #include <math.h> //numero de vertices y caras del objeto int vertices, faces; void LoadObject(FILE *fin, FILE *fout); void LoadScene(FILE *fin, FILE *fout); void DisplayUsage(void); void LoadObject(FILE *fin, FILE *fout) { int count, vertexnum, tempA, tempB, tempC; float tempX, tempY, tempZ; char *tempString = new char [80]; while(strncmp(tempString, "Vertices",8)) { fscanf(fin, "%s", tempString); if (feof(fin)) { printf("String \"Vertices\" not found in file.Exitting...\n"); exit(1); } } fgetc(fin); //Get ':' fscanf(fin, "%d", &vertices); printf("Object has %d vertices\n", vertices); fprintf(fout, "%d\n", vertices); while(strncmp(tempString, "Faces", 5)) { fscanf(fin, "%s", tempString); if (feof(fin)) { printf("String \"Faces\" not found in file.Exitting...\n"); exit(1); } } fgetc(fin); //Get ':' fscanf(fin, "%d", &faces); printf("Object has %d faces\n", faces); while(strncmp(tempString, "Vertex",6)) { fscanf(fin, "%s", tempString); if (feof(fin)) { printf("String \"Vertex\" not found in file.Exitting...\n"); exit(1); } } while(strncmp(tempString,"list:",5)) { fscanf(fin, "%s", tempString); if (feof(fin)) { printf("String \"list\" not found in file.Exitting...\n"); exit(1); } } printf("\nVertex data:\n"); //******************** LOAD VERTEX DATA ******************************** for (count = 0; count < vertices; count++) { while(strncmp(tempString,"Vertex",6)) { fscanf(fin, "%s", tempString); if(feof(fin)) { printf("String \"Vertex\" not found in file.Exitting...\n"); exit(1); } } fscanf(fin, "%d", &vertexnum); fscanf(fin, "%s", tempString); //get ': ' fscanf(fin, "%[^:]", tempString); //get ' X' fgetc(fin); //get ':' fscanf(fin, "%f", &tempX); fscanf(fin, "%[^:]", tempString); fgetc(fin); fscanf(fin, "%f", &tempY); fscanf(fin, "%[^:]", tempString); fgetc(fin); fscanf(fin, "%f", &tempZ); /*- aqui es donde cargo la estructura con los datos de cada vertice --*/ printf("Vertex %d: X:%4.2f Y:%4.2f Z:%4.2f\n", vertexnum, tempX, tempY, tempZ); fprintf(fout, "%f %f %f\n", tempX, tempY, tempZ); } while(strncmp(tempString,"Face",4)) { fscanf(fin, "%s", tempString); if (feof(fin)) { printf("String \"Face\" not found in file.Exitting...\n"); exit(1); } } while(strncmp(tempString,"list",4)) { fscanf(fin, "%s", tempString); if (feof(fin)) { printf("String \"list\" not found in file.Exitting...\n"); exit(1); } } printf("\nFace data:\n"); //********************** LOAD FACE DATA ******************************** fprintf(fout, "%d\n", faces); for (count = 0; count < faces; count++) { while(strncmp(tempString,"Face",4)) { fscanf(fin, "%s", tempString); if (feof(fin)) { printf("String \"Face\" not found in file.Exitting...\n"); exit(1); } } fscanf(fin, "%d", &vertexnum); fscanf(fin, "%s", tempString); while (fgetc(fin) != 'A'); fgetc(fin); // get the ':' character fscanf(fin, "%d", &tempA); // get value for vertex A while (fgetc(fin) != 'B'); fgetc(fin); fscanf(fin, "%d", &tempB); while (fgetc(fin) != 'C'); fgetc(fin); fscanf(fin, "%d", &tempC); /***** me cargo las caras del objeto ********/ printf("Face %d: %8d %8d %8d\n", vertexnum, tempA, tempB, tempC); fprintf(fout,"%d %d %d\n", tempA, tempB, tempC); } } void LoadScene(FILE *fin, FILE *fout) { char *tempString = new char[80]; //Parse the input file while(!feof(fin)) { fscanf(fin,"%s",tempString); if(strcmp("Tri-mesh,",tempString)==0) //Found Tri-mesh LoadObject(fin, fout); } } void DisplayUsage() { printf("A L P H A v1.0 - 3D Studio object viewer (July 1996)\n"); printf("by Ramiro Alcocer (c) 2000\n\n"); printf("USAGE: asc <filename.asc>\n"); } void main(int argc, char *argv[]) { FILE *file_asc, *file_text; clrscr(); if(argc < 2) { DisplayUsage(); exit(0); } if((file_asc = fopen(argv[1], "rt"))==NULL) { printf("Error opening file %s\n", argv[1]); DisplayUsage(); exit(1); } if((file_text = fopen(argv[2], "wt"))==NULL) { printf("Error opening file %s\n", argv[2]); DisplayUsage(); exit(1); } LoadScene(file_asc, file_text); fclose(file_text); fclose(file_asc); getch(); } |
Principal | Gráficos 3D | Gráficos 2D | Fractales | Math | Códigos | Tutoriales | Links