diff options
Diffstat (limited to 'Src/Winamp/plush/READ_JAW.C')
-rw-r--r-- | Src/Winamp/plush/READ_JAW.C | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/Src/Winamp/plush/READ_JAW.C b/Src/Winamp/plush/READ_JAW.C new file mode 100644 index 00000000..18ed1ce2 --- /dev/null +++ b/Src/Winamp/plush/READ_JAW.C @@ -0,0 +1,69 @@ +/****************************************************************************** +Plush Version 1.2 +read_jaw.c +Jaw3D Object Reader +Copyright (c) 1996-2000, Justin Frankel +******************************************************************************* + Notes on .JAW files: + This is a file format created by Jawed Karim for Jaw3D + (http://jaw3d.home.ml.org). + -- updated 11/6/00 - www.jawed.com + It is very simple, and lets one easily create ones own models using only + a text editor. The format is pretty simple: + The first line must be "Light: (x,y,z)" where x,y, and z are the x y and + z components of the lightsource vector (I think ;) + A series of lines, numbered 0 to n, in the format of + "i: x y z", where i is the vertex number (which should be listed in + order, and x y and z are the coordinates of that vertex. + A series of lines, having the format "tri a, b, c" where a b and c are + the vertices that the face uses. It is unclear at this time which + way the vertices are listed (ccw or cw), so just make em consistent + and you can always use plFlipObjectNormals() on the loaded object. + That is it! (I told ya it was simple). +******************************************************************************/ + +#include "plush.h" + +pl_Obj *plReadJAWObj(char *filename, pl_Mat *m) { + FILE *jawfile; + pl_Obj *obj; + pl_uInt32 i; + pl_sInt crap; + char line[256]; + pl_uInt32 total_points = 0, total_polys = 0; + if ((jawfile = fopen(filename, "r")) == NULL) return 0; + fgets(line, 256, jawfile); /* Ignores lightsource info */ + while (fgets(line, 256, jawfile) != NULL) + if (strstr(line, ":") != NULL) total_points++; + + rewind(jawfile); fgets(line, 256, jawfile); + while (fgets(line, 256, jawfile) != NULL) + if (strstr(line, "tri") != NULL) total_polys++; + + rewind(jawfile); fgets(line, 256, jawfile); + obj = plObjCreate(total_points,total_polys); + + i = 0; + while (fgets(line, 256, jawfile) != NULL) if (strstr(line, ":") != NULL) { + float x, y, z; + sscanf(line, "%d: %f %f %f",&crap,&x,&y,&z); + obj->Vertices[i].x = (pl_Float) x; + obj->Vertices[i].y = (pl_Float) y; + obj->Vertices[i].z = (pl_Float) z; + i++; + } + rewind(jawfile); fgets(line, 256, jawfile); + i = 0; + while (fgets(line, 256, jawfile) != NULL) if (strstr(line, "tri") != NULL) { + pl_uInt32 a,b,c; + sscanf(line, "tri %ld, %ld, %ld", &a, &b, &c); + obj->Faces[i].Vertices[0] = obj->Vertices + a; + obj->Faces[i].Vertices[1] = obj->Vertices + c; + obj->Faces[i].Vertices[2] = obj->Vertices + b; + obj->Faces[i].Material = m; + i++; + } + fclose(jawfile); + plObjCalcNormals(obj); + return obj; +} |