aboutsummaryrefslogtreecommitdiff
path: root/Src/Winamp/plush/READ_JAW.C
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Winamp/plush/READ_JAW.C')
-rw-r--r--Src/Winamp/plush/READ_JAW.C69
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;
+}