| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
3ds max ASE-parseriEntropia 14.07.04 01:33 Parsii ASE-tiedostosta yhden objektin verteksit ja tahkot.
/* Käyttö kaikessa yksinkertaisuudessaan: Deklaroi OBJECT objektisi. Kutsu objload("palikka.ase", &objektisi); Piirto: käy silmukassa läpi objekti.vertices[i].x, y ja z. Lisään tahkojen normaalit kunhan kerkiän ;) Kääntyy ainakin VC++ 6.0:lla. */ typedef struct { float x, y, z; } VERTEX; typedef struct { float x, y, z; } NORMAL; typedef struct { int numvertices; int numfaces; VERTEX *vertices; NORMAL *normals; } OBJECT; void objallocate(OBJECT *k, int n, int m) { k->vertices = (VERTEX*)malloc(sizeof(VERTEX)*n); k->normals = (NORMAL*)malloc(sizeof(NORMAL)*m); } void objfree(OBJECT *k) { free(k->vertices); free(k->normals); } void objload(char *name, OBJECT *k) { FILE *filu = NULL; int vertices, faces, i = 0; float vx, vy, vz = 0; int indeksi = 1337; char rivi[255]; char temppi[255]; filu = fopen(name, "r"); // verteksien määrä while(vertices < 1) { fgets(rivi, 250, filu); sscanf(rivi, "\t\t*MESH_NUMVERTEX %d", &vertices); if(vertices > 0) { wsprintf(temppi, "%i verteksiä", vertices); break; } } fseek(filu, 0, SEEK_SET); // tahkojen määrä while(faces < 1) { fgets(rivi, 250, filu); sscanf(rivi, "\t\t*MESH_NUMFACES %d", &faces); if(faces > 0) { break; } } fseek(filu, 0, SEEK_SET); // varataan muistia vertekseille ja tahkoille objallocate(k, vertices, faces); // verteksit while(indeksi > 0) { fgets(rivi, 250, filu); sscanf(rivi, "\t\t\t*MESH_VERTEX %d %f %f %f", &indeksi, &vx, &vy, &vz); if(indeksi == 0) { k->vertices[0].x = vx; k->vertices[0].y = vy; k->vertices[0].z = vz; for(i = 0; i < vertices; i++) { fgets(rivi, 250, filu); sscanf(rivi, "\t\t\t*MESH_VERTEX %d %f %f %f", &indeksi, &vx, &vy, &vz); k->vertices[indeksi].x = vx; k->vertices[indeksi].y = vy; k->vertices[indeksi].z = vz; } break; } } sprintf(temppi, "Objekti: %s\nVerteksejä: %i\nTahkoja: %i", name, vertices, faces); MessageBox(NULL, temppi, "kebab technicians", MB_OK | MB_ICONINFORMATION); fclose(filu); } |
![]() Haku
|