Wed, 21 Sep 2011 06:45:26 +0000
Apply conversation theme when opening the GTK conversation. All the
parsing stuff was moved out of the theme code and into the conversation
code.
Someone (not me!) needs to check the code I commented out and see if
we really need that stuff (and then port it to WebKit/styling).
We also need to determine where to place Template.html and the rest
of our (not-yet-written) default theme.
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1 | /* |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
2 | glm.c |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
3 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
4 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
5 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
6 | #include <math.h> |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
7 | #include <stdio.h> |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
8 | #include <stdlib.h> |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
9 | #include <string.h> |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
10 | #include <assert.h> |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
11 | #include "glm.h" |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
12 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
13 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
14 | #define T(x) (model->triangles[(x)]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
15 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
16 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
17 | /* _GLMnode: general purpose node |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
18 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
19 | typedef struct _GLMnode { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
20 | GLuint index; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
21 | GLboolean averaged; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
22 | struct _GLMnode* next; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
23 | } GLMnode; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
24 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
25 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
26 | /* glmMax: returns the maximum of two floats */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
27 | static GLfloat |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
28 | glmMax(GLfloat a, GLfloat b) |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
29 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
30 | if (b > a) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
31 | return b; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
32 | return a; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
33 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
34 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
35 | /* glmAbs: returns the absolute value of a float */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
36 | static GLfloat |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
37 | glmAbs(GLfloat f) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
38 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
39 | if (f < 0) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
40 | return -f; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
41 | return f; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
42 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
43 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
44 | /* glmDot: compute the dot product of two vectors |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
45 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
46 | * u - array of 3 GLfloats (GLfloat u[3]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
47 | * v - array of 3 GLfloats (GLfloat v[3]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
48 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
49 | static GLfloat |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
50 | glmDot(GLfloat* u, GLfloat* v) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
51 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
52 | assert(u); assert(v); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
53 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
54 | return u[0]*v[0] + u[1]*v[1] + u[2]*v[2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
55 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
56 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
57 | /* glmCross: compute the cross product of two vectors |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
58 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
59 | * u - array of 3 GLfloats (GLfloat u[3]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
60 | * v - array of 3 GLfloats (GLfloat v[3]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
61 | * n - array of 3 GLfloats (GLfloat n[3]) to return the cross product in |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
62 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
63 | static GLvoid |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
64 | glmCross(GLfloat* u, GLfloat* v, GLfloat* n) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
65 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
66 | assert(u); assert(v); assert(n); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
67 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
68 | n[0] = u[1]*v[2] - u[2]*v[1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
69 | n[1] = u[2]*v[0] - u[0]*v[2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
70 | n[2] = u[0]*v[1] - u[1]*v[0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
71 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
72 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
73 | /* glmNormalize: normalize a vector |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
74 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
75 | * v - array of 3 GLfloats (GLfloat v[3]) to be normalized |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
76 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
77 | static GLvoid |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
78 | glmNormalize(GLfloat* v) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
79 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
80 | GLfloat l; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
81 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
82 | assert(v); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
83 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
84 | l = (GLfloat)sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
85 | v[0] /= l; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
86 | v[1] /= l; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
87 | v[2] /= l; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
88 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
89 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
90 | /* glmEqual: compares two vectors and returns GL_TRUE if they are |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
91 | * equal (within a certain threshold) or GL_FALSE if not. An epsilon |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
92 | * that works fairly well is 0.000001. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
93 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
94 | * u - array of 3 GLfloats (GLfloat u[3]) |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
95 | * v - array of 3 GLfloats (GLfloat v[3]) |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
96 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
97 | static GLboolean |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
98 | glmEqual(GLfloat* u, GLfloat* v, GLfloat epsilon) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
99 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
100 | if (glmAbs(u[0] - v[0]) < epsilon && |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
101 | glmAbs(u[1] - v[1]) < epsilon && |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
102 | glmAbs(u[2] - v[2]) < epsilon) |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
103 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
104 | return GL_TRUE; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
105 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
106 | return GL_FALSE; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
107 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
108 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
109 | /* glmWeldVectors: eliminate (weld) vectors that are within an |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
110 | * epsilon of each other. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
111 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
112 | * vectors - array of GLfloat[3]'s to be welded |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
113 | * numvectors - number of GLfloat[3]'s in vectors |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
114 | * epsilon - maximum difference between vectors |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
115 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
116 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
117 | GLfloat* |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
118 | glmWeldVectors(GLfloat* vectors, GLuint* numvectors, GLfloat epsilon) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
119 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
120 | GLfloat* copies; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
121 | GLuint copied; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
122 | GLuint i, j; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
123 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
124 | copies = (GLfloat*)malloc(sizeof(GLfloat) * 3 * (*numvectors + 1)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
125 | memcpy(copies, vectors, (sizeof(GLfloat) * 3 * (*numvectors + 1))); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
126 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
127 | copied = 1; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
128 | for (i = 1; i <= *numvectors; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
129 | for (j = 1; j <= copied; j++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
130 | if (glmEqual(&vectors[3 * i], &copies[3 * j], epsilon)) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
131 | goto duplicate; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
132 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
133 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
134 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
135 | /* must not be any duplicates -- add to the copies array */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
136 | copies[3 * copied + 0] = vectors[3 * i + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
137 | copies[3 * copied + 1] = vectors[3 * i + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
138 | copies[3 * copied + 2] = vectors[3 * i + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
139 | j = copied; /* pass this along for below */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
140 | copied++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
141 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
142 | duplicate: |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
143 | /* set the first component of this vector to point at the correct |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
144 | index into the new copies array */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
145 | vectors[3 * i + 0] = (GLfloat)j; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
146 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
147 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
148 | *numvectors = copied-1; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
149 | return copies; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
150 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
151 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
152 | /* glmFindGroup: Find a group in the model |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
153 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
154 | GLMgroup* |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
155 | glmFindGroup(GLMmodel* model, char* name) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
156 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
157 | GLMgroup* group; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
158 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
159 | assert(model); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
160 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
161 | group = model->groups; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
162 | while(group) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
163 | if (!strcmp(name, group->name)) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
164 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
165 | group = group->next; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
166 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
167 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
168 | return group; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
169 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
170 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
171 | /* glmAddGroup: Add a group to the model |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
172 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
173 | GLMgroup* |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
174 | glmAddGroup(GLMmodel* model, char* name) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
175 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
176 | GLMgroup* group; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
177 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
178 | group = glmFindGroup(model, name); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
179 | if (!group) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
180 | group = (GLMgroup*)malloc(sizeof(GLMgroup)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
181 | group->name = strdup(name); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
182 | group->material = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
183 | group->numtriangles = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
184 | group->triangles = NULL; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
185 | group->next = model->groups; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
186 | model->groups = group; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
187 | model->numgroups++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
188 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
189 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
190 | return group; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
191 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
192 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
193 | /* glmFindGroup: Find a material in the model |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
194 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
195 | GLuint |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
196 | glmFindMaterial(GLMmodel* model, char* name) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
197 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
198 | GLuint i; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
199 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
200 | /* XXX doing a linear search on a string key'd list is pretty lame, |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
201 | but it works and is fast enough for now. */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
202 | for (i = 0; i < model->nummaterials; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
203 | if (!strcmp(model->materials[i].name, name)) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
204 | goto found; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
205 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
206 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
207 | /* didn't find the name, so print a warning and return the default |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
208 | material (0). */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
209 | //fprintf(stderr, "glmFindMaterial(): can't find material \"%s\".\n", name); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
210 | i = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
211 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
212 | found: |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
213 | return i; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
214 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
215 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
216 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
217 | /* glmDirName: return the directory given a path |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
218 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
219 | * path - filesystem path |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
220 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
221 | * NOTE: the return value should be free'd. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
222 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
223 | static char* |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
224 | glmDirName(char* path) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
225 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
226 | char* dir; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
227 | char* s; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
228 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
229 | dir = strdup(path); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
230 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
231 | s = strrchr(dir, '/'); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
232 | if (s) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
233 | s[1] = '\0'; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
234 | else |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
235 | dir[0] = '\0'; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
236 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
237 | return dir; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
238 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
239 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
240 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
241 | void glmSetMat(GLMmat_str* mats, GLint index){ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
242 | GLMmaterial* material; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
243 | assert(!(index<0 || index >=mats->num_materials)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
244 | material = &mats->materials[index]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
245 | glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, material->ambient); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
246 | glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, material->diffuse); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
247 | glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, material->specular); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
248 | glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, material->shininess); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
249 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
250 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
251 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
252 | GLMmat_str* glmMTL(char* name){ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
253 | FILE* file; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
254 | char* dir; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
255 | char* filename; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
256 | char buf[128]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
257 | GLuint nummaterials, i; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
258 | GLMmat_str* ret; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
259 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
260 | file = fopen(name, "r"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
261 | if (!file) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
262 | fprintf(stderr, "glmReadMTL() failed: can't open material file \"%s\".\n", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
263 | name); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
264 | exit(1); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
265 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
266 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
267 | /* count the number of materials in the file */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
268 | nummaterials = 1; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
269 | while(fscanf(file, "%s", buf) != EOF) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
270 | switch(buf[0]) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
271 | case '#': /* comment */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
272 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
273 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
274 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
275 | case 'n': /* newmtl */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
276 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
277 | nummaterials++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
278 | sscanf(buf, "%s %s", buf, buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
279 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
280 | default: |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
281 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
282 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
283 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
284 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
285 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
286 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
287 | rewind(file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
288 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
289 | ret = (GLMmat_str*)malloc(sizeof(GLMmat_str)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
290 | ret->materials = (GLMmaterial*)malloc(sizeof(GLMmaterial) * nummaterials); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
291 | ret->num_materials = nummaterials; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
292 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
293 | /* set the default material */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
294 | for (i = 0; i < nummaterials; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
295 | ret->materials[i].name = NULL; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
296 | ret->materials[i].shininess = 65.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
297 | ret->materials[i].diffuse[0] = 0.8; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
298 | ret->materials[i].diffuse[1] = 0.1; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
299 | ret->materials[i].diffuse[2] = 0.1; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
300 | ret->materials[i].diffuse[3] = 1.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
301 | ret->materials[i].ambient[0] = 0.2; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
302 | ret->materials[i].ambient[1] = 0.2; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
303 | ret->materials[i].ambient[2] = 0.2; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
304 | ret->materials[i].ambient[3] = 1.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
305 | ret->materials[i].specular[0] = 0.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
306 | ret->materials[i].specular[1] = 0.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
307 | ret->materials[i].specular[2] = 0.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
308 | ret->materials[i].specular[3] = 1.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
309 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
310 | ret->materials[0].name = strdup("default"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
311 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
312 | /* now, read in the data */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
313 | nummaterials = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
314 | while(fscanf(file, "%s", buf) != EOF) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
315 | switch(buf[0]) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
316 | case '#': /* comment */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
317 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
318 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
319 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
320 | case 'n': /* newmtl */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
321 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
322 | sscanf(buf, "%s %s", buf, buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
323 | nummaterials++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
324 | ret->materials[nummaterials].name = strdup(buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
325 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
326 | case 'N': |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
327 | fscanf(file, "%f", &ret->materials[nummaterials].shininess); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
328 | /* wavefront shininess is from [0, 1000], so scale for OpenGL */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
329 | ret->materials[nummaterials].shininess /= 1000.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
330 | ret->materials[nummaterials].shininess *= 128.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
331 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
332 | case 'K': |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
333 | switch(buf[1]) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
334 | case 'd': |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
335 | fscanf(file, "%f %f %f", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
336 | &ret->materials[nummaterials].diffuse[0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
337 | &ret->materials[nummaterials].diffuse[1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
338 | &ret->materials[nummaterials].diffuse[2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
339 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
340 | case 's': |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
341 | fscanf(file, "%f %f %f", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
342 | &ret->materials[nummaterials].specular[0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
343 | &ret->materials[nummaterials].specular[1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
344 | &ret->materials[nummaterials].specular[2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
345 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
346 | case 'a': |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
347 | fscanf(file, "%f %f %f", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
348 | &ret->materials[nummaterials].ambient[0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
349 | &ret->materials[nummaterials].ambient[1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
350 | &ret->materials[nummaterials].ambient[2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
351 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
352 | default: |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
353 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
354 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
355 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
356 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
357 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
358 | default: |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
359 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
360 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
361 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
362 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
363 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
364 | return ret; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
365 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
366 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
367 | //^^^^charlie^^^^^ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
368 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
369 | /* glmReadMTL: read a wavefront material library file |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
370 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
371 | * model - properly initialized GLMmodel structure |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
372 | * name - name of the material library |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
373 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
374 | static GLvoid |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
375 | glmReadMTL(GLMmodel* model, char* name) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
376 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
377 | FILE* file; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
378 | char* dir; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
379 | char* filename; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
380 | char buf[128]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
381 | GLuint nummaterials, i; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
382 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
383 | dir = glmDirName(model->pathname); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
384 | filename = (char*)malloc(sizeof(char) * (strlen(dir) + strlen(name) + 1)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
385 | strcpy(filename, dir); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
386 | strcat(filename, name); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
387 | free(dir); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
388 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
389 | file = fopen(filename, "r"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
390 | if (!file) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
391 | fprintf(stderr, "glmReadMTL() failed: can't open material file \"%s\".\n", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
392 | filename); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
393 | exit(1); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
394 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
395 | free(filename); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
396 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
397 | /* count the number of materials in the file */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
398 | nummaterials = 1; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
399 | while(fscanf(file, "%s", buf) != EOF) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
400 | switch(buf[0]) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
401 | case '#': /* comment */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
402 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
403 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
404 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
405 | case 'n': /* newmtl */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
406 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
407 | nummaterials++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
408 | sscanf(buf, "%s %s", buf, buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
409 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
410 | default: |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
411 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
412 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
413 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
414 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
415 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
416 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
417 | rewind(file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
418 | model->materials = (GLMmaterial*)malloc(sizeof(GLMmaterial) * nummaterials); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
419 | model->nummaterials = nummaterials; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
420 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
421 | /* set the default material */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
422 | for (i = 0; i < nummaterials; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
423 | model->materials[i].name = NULL; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
424 | model->materials[i].shininess = 65.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
425 | model->materials[i].diffuse[0] = 0.8; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
426 | model->materials[i].diffuse[1] = 0.1; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
427 | model->materials[i].diffuse[2] = 0.1; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
428 | model->materials[i].diffuse[3] = 1.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
429 | model->materials[i].ambient[0] = 0.2; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
430 | model->materials[i].ambient[1] = 0.2; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
431 | model->materials[i].ambient[2] = 0.2; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
432 | model->materials[i].ambient[3] = 1.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
433 | model->materials[i].specular[0] = 0.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
434 | model->materials[i].specular[1] = 0.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
435 | model->materials[i].specular[2] = 0.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
436 | model->materials[i].specular[3] = 1.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
437 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
438 | model->materials[0].name = strdup("default"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
439 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
440 | /* now, read in the data */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
441 | nummaterials = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
442 | while(fscanf(file, "%s", buf) != EOF) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
443 | switch(buf[0]) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
444 | case '#': /* comment */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
445 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
446 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
447 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
448 | case 'n': /* newmtl */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
449 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
450 | sscanf(buf, "%s %s", buf, buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
451 | nummaterials++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
452 | model->materials[nummaterials].name = strdup(buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
453 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
454 | case 'N': |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
455 | fscanf(file, "%f", &model->materials[nummaterials].shininess); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
456 | /* wavefront shininess is from [0, 1000], so scale for OpenGL */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
457 | model->materials[nummaterials].shininess /= 1000.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
458 | model->materials[nummaterials].shininess *= 128.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
459 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
460 | case 'K': |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
461 | switch(buf[1]) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
462 | case 'd': |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
463 | fscanf(file, "%f %f %f", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
464 | &model->materials[nummaterials].diffuse[0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
465 | &model->materials[nummaterials].diffuse[1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
466 | &model->materials[nummaterials].diffuse[2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
467 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
468 | case 's': |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
469 | fscanf(file, "%f %f %f", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
470 | &model->materials[nummaterials].specular[0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
471 | &model->materials[nummaterials].specular[1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
472 | &model->materials[nummaterials].specular[2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
473 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
474 | case 'a': |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
475 | fscanf(file, "%f %f %f", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
476 | &model->materials[nummaterials].ambient[0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
477 | &model->materials[nummaterials].ambient[1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
478 | &model->materials[nummaterials].ambient[2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
479 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
480 | default: |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
481 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
482 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
483 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
484 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
485 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
486 | default: |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
487 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
488 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
489 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
490 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
491 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
492 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
493 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
494 | /* glmWriteMTL: write a wavefront material library file |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
495 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
496 | * model - properly initialized GLMmodel structure |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
497 | * modelpath - pathname of the model being written |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
498 | * mtllibname - name of the material library to be written |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
499 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
500 | static GLvoid |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
501 | glmWriteMTL(GLMmodel* model, char* modelpath, char* mtllibname) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
502 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
503 | FILE* file; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
504 | char* dir; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
505 | char* filename; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
506 | GLMmaterial* material; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
507 | GLuint i; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
508 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
509 | dir = glmDirName(modelpath); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
510 | filename = (char*)malloc(sizeof(char) * (strlen(dir)+strlen(mtllibname))); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
511 | strcpy(filename, dir); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
512 | strcat(filename, mtllibname); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
513 | free(dir); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
514 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
515 | /* open the file */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
516 | file = fopen(filename, "w"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
517 | if (!file) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
518 | fprintf(stderr, "glmWriteMTL() failed: can't open file \"%s\".\n", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
519 | filename); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
520 | exit(1); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
521 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
522 | free(filename); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
523 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
524 | /* spit out a header */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
525 | fprintf(file, "# \n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
526 | fprintf(file, "# Wavefront MTL generated by GLM library\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
527 | fprintf(file, "# \n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
528 | fprintf(file, "# GLM library\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
529 | fprintf(file, "# Nate Robins\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
530 | fprintf(file, "# ndr@pobox.com\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
531 | fprintf(file, "# http://www.pobox.com/~ndr\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
532 | fprintf(file, "# \n\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
533 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
534 | for (i = 0; i < model->nummaterials; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
535 | material = &model->materials[i]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
536 | fprintf(file, "newmtl %s\n", material->name); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
537 | fprintf(file, "Ka %f %f %f\n", |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
538 | material->ambient[0], material->ambient[1], material->ambient[2]); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
539 | fprintf(file, "Kd %f %f %f\n", |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
540 | material->diffuse[0], material->diffuse[1], material->diffuse[2]); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
541 | fprintf(file, "Ks %f %f %f\n", |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
542 | material->specular[0],material->specular[1],material->specular[2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
543 | fprintf(file, "Ns %f\n", material->shininess / 128.0 * 1000.0); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
544 | fprintf(file, "\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
545 | } |
|
28076
796f5a14f70b
Fix a bunch of memory leaks reported by Josh Mueller. Refs #9822.
Paul Aurich <darkrain42@pidgin.im>
parents:
15435
diff
changeset
|
546 | |
|
796f5a14f70b
Fix a bunch of memory leaks reported by Josh Mueller. Refs #9822.
Paul Aurich <darkrain42@pidgin.im>
parents:
15435
diff
changeset
|
547 | fclose(file); |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
548 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
549 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
550 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
551 | /* glmFirstPass: first pass at a Wavefront OBJ file that gets all the |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
552 | * statistics of the model (such as #vertices, #normals, etc) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
553 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
554 | * model - properly initialized GLMmodel structure |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
555 | * file - (fopen'd) file descriptor |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
556 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
557 | static GLvoid |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
558 | glmFirstPass(GLMmodel* model, FILE* file) |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
559 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
560 | GLuint numvertices; /* number of vertices in model */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
561 | GLuint numnormals; /* number of normals in model */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
562 | GLuint numtexcoords; /* number of texcoords in model */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
563 | GLuint numtriangles; /* number of triangles in model */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
564 | GLMgroup* group; /* current group */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
565 | unsigned v, n, t; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
566 | char buf[128]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
567 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
568 | /* make a default group */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
569 | group = glmAddGroup(model, "default"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
570 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
571 | numvertices = numnormals = numtexcoords = numtriangles = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
572 | while(fscanf(file, "%s", buf) != EOF) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
573 | switch(buf[0]) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
574 | case '#': /* comment */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
575 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
576 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
577 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
578 | case 'v': /* v, vn, vt */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
579 | switch(buf[1]) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
580 | case '\0': /* vertex */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
581 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
582 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
583 | numvertices++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
584 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
585 | case 'n': /* normal */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
586 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
587 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
588 | numnormals++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
589 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
590 | case 't': /* texcoord */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
591 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
592 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
593 | numtexcoords++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
594 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
595 | default: |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
596 | printf("glmFirstPass(): Unknown token \"%s\".\n", buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
597 | exit(1); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
598 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
599 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
600 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
601 | case 'm': |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
602 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
603 | sscanf(buf, "%s %s", buf, buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
604 | model->mtllibname = strdup(buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
605 | //glmReadMTL(model, buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
606 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
607 | case 'u': |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
608 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
609 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
610 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
611 | case 'g': /* group */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
612 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
613 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
614 | #if SINGLE_STRING_GROUP_NAMES |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
615 | sscanf(buf, "%s", buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
616 | #else |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
617 | buf[strlen(buf)-1] = '\0'; /* nuke '\n' */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
618 | #endif |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
619 | group = glmAddGroup(model, buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
620 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
621 | case 'f': /* face */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
622 | v = n = t = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
623 | fscanf(file, "%s", buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
624 | /* can be one of %d, %d//%d, %d/%d, %d/%d/%d %d//%d */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
625 | if (strstr(buf, "//")) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
626 | /* v//n */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
627 | sscanf(buf, "%d//%d", &v, &n); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
628 | fscanf(file, "%d//%d", &v, &n); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
629 | fscanf(file, "%d//%d", &v, &n); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
630 | numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
631 | group->numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
632 | while(fscanf(file, "%d//%d", &v, &n) > 0) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
633 | numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
634 | group->numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
635 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
636 | } else if (sscanf(buf, "%d/%d/%d", &v, &t, &n) == 3) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
637 | /* v/t/n */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
638 | fscanf(file, "%d/%d/%d", &v, &t, &n); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
639 | fscanf(file, "%d/%d/%d", &v, &t, &n); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
640 | numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
641 | group->numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
642 | while(fscanf(file, "%d/%d/%d", &v, &t, &n) > 0) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
643 | numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
644 | group->numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
645 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
646 | } else if (sscanf(buf, "%d/%d", &v, &t) == 2) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
647 | /* v/t */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
648 | fscanf(file, "%d/%d", &v, &t); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
649 | fscanf(file, "%d/%d", &v, &t); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
650 | numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
651 | group->numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
652 | while(fscanf(file, "%d/%d", &v, &t) > 0) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
653 | numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
654 | group->numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
655 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
656 | } else { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
657 | /* v */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
658 | fscanf(file, "%d", &v); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
659 | fscanf(file, "%d", &v); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
660 | numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
661 | group->numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
662 | while(fscanf(file, "%d", &v) > 0) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
663 | numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
664 | group->numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
665 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
666 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
667 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
668 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
669 | default: |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
670 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
671 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
672 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
673 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
674 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
675 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
676 | /* set the stats in the model structure */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
677 | model->numvertices = numvertices; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
678 | model->numnormals = numnormals; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
679 | model->numtexcoords = numtexcoords; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
680 | model->numtriangles = numtriangles; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
681 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
682 | /* allocate memory for the triangles in each group */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
683 | group = model->groups; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
684 | while(group) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
685 | group->triangles = (GLuint*)malloc(sizeof(GLuint) * group->numtriangles); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
686 | group->numtriangles = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
687 | group = group->next; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
688 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
689 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
690 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
691 | /* glmSecondPass: second pass at a Wavefront OBJ file that gets all |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
692 | * the data. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
693 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
694 | * model - properly initialized GLMmodel structure |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
695 | * file - (fopen'd) file descriptor |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
696 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
697 | static GLvoid |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
698 | glmSecondPass(GLMmodel* model, FILE* file) |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
699 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
700 | GLuint numvertices; /* number of vertices in model */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
701 | GLuint numnormals; /* number of normals in model */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
702 | GLuint numtexcoords; /* number of texcoords in model */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
703 | GLuint numtriangles; /* number of triangles in model */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
704 | GLfloat* vertices; /* array of vertices */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
705 | GLfloat* normals; /* array of normals */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
706 | GLfloat* texcoords; /* array of texture coordinates */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
707 | GLMgroup* group; /* current group pointer */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
708 | GLuint material; /* current material */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
709 | GLuint v, n, t; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
710 | char buf[128]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
711 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
712 | /* set the pointer shortcuts */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
713 | vertices = model->vertices; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
714 | normals = model->normals; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
715 | texcoords = model->texcoords; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
716 | group = model->groups; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
717 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
718 | /* on the second pass through the file, read all the data into the |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
719 | allocated arrays */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
720 | numvertices = numnormals = numtexcoords = 1; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
721 | numtriangles = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
722 | material = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
723 | while(fscanf(file, "%s", buf) != EOF) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
724 | switch(buf[0]) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
725 | case '#': /* comment */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
726 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
727 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
728 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
729 | case 'v': /* v, vn, vt */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
730 | switch(buf[1]) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
731 | case '\0': /* vertex */ |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
732 | fscanf(file, "%f %f %f", |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
733 | &vertices[3 * numvertices + 0], |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
734 | &vertices[3 * numvertices + 1], |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
735 | &vertices[3 * numvertices + 2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
736 | numvertices++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
737 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
738 | case 'n': /* normal */ |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
739 | fscanf(file, "%f %f %f", |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
740 | &normals[3 * numnormals + 0], |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
741 | &normals[3 * numnormals + 1], |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
742 | &normals[3 * numnormals + 2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
743 | numnormals++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
744 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
745 | case 't': /* texcoord */ |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
746 | fscanf(file, "%f %f", |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
747 | &texcoords[2 * numtexcoords + 0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
748 | &texcoords[2 * numtexcoords + 1]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
749 | numtexcoords++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
750 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
751 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
752 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
753 | case 'u': |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
754 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
755 | sscanf(buf, "%s %s", buf, buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
756 | group->material = material = glmFindMaterial(model, buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
757 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
758 | case 'g': /* group */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
759 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
760 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
761 | #if SINGLE_STRING_GROUP_NAMES |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
762 | sscanf(buf, "%s", buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
763 | #else |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
764 | buf[strlen(buf)-1] = '\0'; /* nuke '\n' */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
765 | #endif |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
766 | group = glmFindGroup(model, buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
767 | group->material = material; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
768 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
769 | case 'f': /* face */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
770 | v = n = t = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
771 | fscanf(file, "%s", buf); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
772 | /* can be one of %d, %d//%d, %d/%d, %d/%d/%d %d//%d */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
773 | if (strstr(buf, "//")) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
774 | /* v//n */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
775 | sscanf(buf, "%d//%d", &v, &n); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
776 | T(numtriangles).vindices[0] = v; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
777 | T(numtriangles).nindices[0] = n; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
778 | fscanf(file, "%d//%d", &v, &n); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
779 | T(numtriangles).vindices[1] = v; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
780 | T(numtriangles).nindices[1] = n; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
781 | fscanf(file, "%d//%d", &v, &n); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
782 | T(numtriangles).vindices[2] = v; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
783 | T(numtriangles).nindices[2] = n; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
784 | group->triangles[group->numtriangles++] = numtriangles; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
785 | numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
786 | while(fscanf(file, "%d//%d", &v, &n) > 0) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
787 | T(numtriangles).vindices[0] = T(numtriangles-1).vindices[0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
788 | T(numtriangles).nindices[0] = T(numtriangles-1).nindices[0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
789 | T(numtriangles).vindices[1] = T(numtriangles-1).vindices[2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
790 | T(numtriangles).nindices[1] = T(numtriangles-1).nindices[2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
791 | T(numtriangles).vindices[2] = v; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
792 | T(numtriangles).nindices[2] = n; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
793 | group->triangles[group->numtriangles++] = numtriangles; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
794 | numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
795 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
796 | } else if (sscanf(buf, "%d/%d/%d", &v, &t, &n) == 3) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
797 | /* v/t/n */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
798 | T(numtriangles).vindices[0] = v; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
799 | T(numtriangles).tindices[0] = t; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
800 | T(numtriangles).nindices[0] = n; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
801 | fscanf(file, "%d/%d/%d", &v, &t, &n); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
802 | T(numtriangles).vindices[1] = v; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
803 | T(numtriangles).tindices[1] = t; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
804 | T(numtriangles).nindices[1] = n; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
805 | fscanf(file, "%d/%d/%d", &v, &t, &n); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
806 | T(numtriangles).vindices[2] = v; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
807 | T(numtriangles).tindices[2] = t; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
808 | T(numtriangles).nindices[2] = n; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
809 | group->triangles[group->numtriangles++] = numtriangles; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
810 | numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
811 | while(fscanf(file, "%d/%d/%d", &v, &t, &n) > 0) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
812 | T(numtriangles).vindices[0] = T(numtriangles-1).vindices[0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
813 | T(numtriangles).tindices[0] = T(numtriangles-1).tindices[0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
814 | T(numtriangles).nindices[0] = T(numtriangles-1).nindices[0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
815 | T(numtriangles).vindices[1] = T(numtriangles-1).vindices[2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
816 | T(numtriangles).tindices[1] = T(numtriangles-1).tindices[2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
817 | T(numtriangles).nindices[1] = T(numtriangles-1).nindices[2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
818 | T(numtriangles).vindices[2] = v; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
819 | T(numtriangles).tindices[2] = t; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
820 | T(numtriangles).nindices[2] = n; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
821 | group->triangles[group->numtriangles++] = numtriangles; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
822 | numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
823 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
824 | } else if (sscanf(buf, "%d/%d", &v, &t) == 2) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
825 | /* v/t */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
826 | T(numtriangles).vindices[0] = v; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
827 | T(numtriangles).tindices[0] = t; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
828 | fscanf(file, "%d/%d", &v, &t); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
829 | T(numtriangles).vindices[1] = v; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
830 | T(numtriangles).tindices[1] = t; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
831 | fscanf(file, "%d/%d", &v, &t); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
832 | T(numtriangles).vindices[2] = v; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
833 | T(numtriangles).tindices[2] = t; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
834 | group->triangles[group->numtriangles++] = numtriangles; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
835 | numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
836 | while(fscanf(file, "%d/%d", &v, &t) > 0) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
837 | T(numtriangles).vindices[0] = T(numtriangles-1).vindices[0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
838 | T(numtriangles).tindices[0] = T(numtriangles-1).tindices[0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
839 | T(numtriangles).vindices[1] = T(numtriangles-1).vindices[2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
840 | T(numtriangles).tindices[1] = T(numtriangles-1).tindices[2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
841 | T(numtriangles).vindices[2] = v; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
842 | T(numtriangles).tindices[2] = t; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
843 | group->triangles[group->numtriangles++] = numtriangles; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
844 | numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
845 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
846 | } else { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
847 | /* v */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
848 | sscanf(buf, "%d", &v); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
849 | T(numtriangles).vindices[0] = v; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
850 | fscanf(file, "%d", &v); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
851 | T(numtriangles).vindices[1] = v; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
852 | fscanf(file, "%d", &v); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
853 | T(numtriangles).vindices[2] = v; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
854 | group->triangles[group->numtriangles++] = numtriangles; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
855 | numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
856 | while(fscanf(file, "%d", &v) > 0) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
857 | T(numtriangles).vindices[0] = T(numtriangles-1).vindices[0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
858 | T(numtriangles).vindices[1] = T(numtriangles-1).vindices[2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
859 | T(numtriangles).vindices[2] = v; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
860 | group->triangles[group->numtriangles++] = numtriangles; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
861 | numtriangles++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
862 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
863 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
864 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
865 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
866 | default: |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
867 | /* eat up rest of line */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
868 | fgets(buf, sizeof(buf), file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
869 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
870 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
871 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
872 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
873 | #if 0 |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
874 | /* announce the memory requirements */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
875 | printf(" Memory: %d bytes\n", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
876 | numvertices * 3*sizeof(GLfloat) + |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
877 | numnormals * 3*sizeof(GLfloat) * (numnormals ? 1 : 0) + |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
878 | numtexcoords * 3*sizeof(GLfloat) * (numtexcoords ? 1 : 0) + |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
879 | numtriangles * sizeof(GLMtriangle)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
880 | #endif |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
881 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
882 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
883 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
884 | /* public functions */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
885 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
886 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
887 | /* glmUnitize: "unitize" a model by translating it to the origin and |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
888 | * scaling it to fit in a unit cube around the origin. Modelurns the |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
889 | * scalefactor used. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
890 | * |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
891 | * model - properly initialized GLMmodel structure |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
892 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
893 | GLfloat |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
894 | glmUnitize(GLMmodel* model) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
895 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
896 | GLuint i; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
897 | GLfloat maxx, minx, maxy, miny, maxz, minz; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
898 | GLfloat cx, cy, cz, w, h, d; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
899 | GLfloat scale; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
900 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
901 | assert(model); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
902 | assert(model->vertices); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
903 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
904 | /* get the max/mins */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
905 | maxx = minx = model->vertices[3 + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
906 | maxy = miny = model->vertices[3 + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
907 | maxz = minz = model->vertices[3 + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
908 | for (i = 1; i <= model->numvertices; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
909 | if (maxx < model->vertices[3 * i + 0]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
910 | maxx = model->vertices[3 * i + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
911 | if (minx > model->vertices[3 * i + 0]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
912 | minx = model->vertices[3 * i + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
913 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
914 | if (maxy < model->vertices[3 * i + 1]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
915 | maxy = model->vertices[3 * i + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
916 | if (miny > model->vertices[3 * i + 1]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
917 | miny = model->vertices[3 * i + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
918 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
919 | if (maxz < model->vertices[3 * i + 2]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
920 | maxz = model->vertices[3 * i + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
921 | if (minz > model->vertices[3 * i + 2]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
922 | minz = model->vertices[3 * i + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
923 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
924 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
925 | /* calculate model width, height, and depth */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
926 | w = glmAbs(maxx) + glmAbs(minx); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
927 | h = glmAbs(maxy) + glmAbs(miny); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
928 | d = glmAbs(maxz) + glmAbs(minz); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
929 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
930 | /* calculate center of the model */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
931 | cx = (maxx + minx) / 2.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
932 | cy = (maxy + miny) / 2.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
933 | cz = (maxz + minz) / 2.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
934 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
935 | /* calculate unitizing scale factor */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
936 | scale = 2.0 / glmMax(glmMax(w, h), d); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
937 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
938 | /* translate around center then scale */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
939 | for (i = 1; i <= model->numvertices; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
940 | model->vertices[3 * i + 0] -= cx; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
941 | model->vertices[3 * i + 1] -= cy; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
942 | model->vertices[3 * i + 2] -= cz; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
943 | //charlie, i took this out, i just want to center |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
944 | /* |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
945 | model->vertices[3 * i + 0] *= scale; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
946 | model->vertices[3 * i + 1] *= scale; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
947 | model->vertices[3 * i + 2] *= scale; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
948 | */ |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
949 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
950 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
951 | return scale; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
952 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
953 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
954 | /* glmDimensions: Calculates the dimensions (width, height, depth) of |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
955 | * a model. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
956 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
957 | * model - initialized GLMmodel structure |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
958 | * dimensions - array of 3 GLfloats (GLfloat dimensions[3]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
959 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
960 | GLvoid |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
961 | glmDimensions(GLMmodel* model, GLfloat* dimensions) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
962 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
963 | GLuint i; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
964 | GLfloat maxx, minx, maxy, miny, maxz, minz; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
965 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
966 | assert(model); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
967 | assert(model->vertices); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
968 | assert(dimensions); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
969 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
970 | /* get the max/mins */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
971 | maxx = minx = model->vertices[3 + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
972 | maxy = miny = model->vertices[3 + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
973 | maxz = minz = model->vertices[3 + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
974 | for (i = 1; i <= model->numvertices; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
975 | if (maxx < model->vertices[3 * i + 0]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
976 | maxx = model->vertices[3 * i + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
977 | if (minx > model->vertices[3 * i + 0]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
978 | minx = model->vertices[3 * i + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
979 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
980 | if (maxy < model->vertices[3 * i + 1]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
981 | maxy = model->vertices[3 * i + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
982 | if (miny > model->vertices[3 * i + 1]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
983 | miny = model->vertices[3 * i + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
984 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
985 | if (maxz < model->vertices[3 * i + 2]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
986 | maxz = model->vertices[3 * i + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
987 | if (minz > model->vertices[3 * i + 2]) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
988 | minz = model->vertices[3 * i + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
989 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
990 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
991 | /* calculate model width, height, and depth */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
992 | dimensions[0] = glmAbs(maxx) + glmAbs(minx); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
993 | dimensions[1] = glmAbs(maxy) + glmAbs(miny); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
994 | dimensions[2] = glmAbs(maxz) + glmAbs(minz); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
995 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
996 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
997 | /* glmScale: Scales a model by a given amount. |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
998 | * |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
999 | * model - properly initialized GLMmodel structure |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1000 | * scale - scalefactor (0.5 = half as large, 2.0 = twice as large) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1001 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1002 | GLvoid |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1003 | glmScale(GLMmodel* model, GLfloat scale) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1004 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1005 | GLuint i; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1006 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1007 | for (i = 1; i <= model->numvertices; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1008 | model->vertices[3 * i + 0] *= scale; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1009 | model->vertices[3 * i + 1] *= scale; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1010 | model->vertices[3 * i + 2] *= scale; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1011 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1012 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1013 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1014 | /* glmReverseWinding: Reverse the polygon winding for all polygons in |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1015 | * this model. Default winding is counter-clockwise. Also changes |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1016 | * the direction of the normals. |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1017 | * |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1018 | * model - properly initialized GLMmodel structure |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1019 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1020 | GLvoid |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1021 | glmReverseWinding(GLMmodel* model) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1022 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1023 | GLuint i, swap; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1024 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1025 | assert(model); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1026 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1027 | for (i = 0; i < model->numtriangles; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1028 | swap = T(i).vindices[0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1029 | T(i).vindices[0] = T(i).vindices[2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1030 | T(i).vindices[2] = swap; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1031 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1032 | if (model->numnormals) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1033 | swap = T(i).nindices[0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1034 | T(i).nindices[0] = T(i).nindices[2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1035 | T(i).nindices[2] = swap; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1036 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1037 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1038 | if (model->numtexcoords) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1039 | swap = T(i).tindices[0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1040 | T(i).tindices[0] = T(i).tindices[2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1041 | T(i).tindices[2] = swap; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1042 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1043 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1044 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1045 | /* reverse facet normals */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1046 | for (i = 1; i <= model->numfacetnorms; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1047 | model->facetnorms[3 * i + 0] = -model->facetnorms[3 * i + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1048 | model->facetnorms[3 * i + 1] = -model->facetnorms[3 * i + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1049 | model->facetnorms[3 * i + 2] = -model->facetnorms[3 * i + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1050 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1051 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1052 | /* reverse vertex normals */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1053 | for (i = 1; i <= model->numnormals; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1054 | model->normals[3 * i + 0] = -model->normals[3 * i + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1055 | model->normals[3 * i + 1] = -model->normals[3 * i + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1056 | model->normals[3 * i + 2] = -model->normals[3 * i + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1057 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1058 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1059 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1060 | /* glmFacetNormals: Generates facet normals for a model (by taking the |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1061 | * cross product of the two vectors derived from the sides of each |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1062 | * triangle). Assumes a counter-clockwise winding. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1063 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1064 | * model - initialized GLMmodel structure |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1065 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1066 | GLvoid |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1067 | glmFacetNormals(GLMmodel* model) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1068 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1069 | GLuint i; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1070 | GLfloat u[3]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1071 | GLfloat v[3]; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1072 | |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1073 | assert(model); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1074 | assert(model->vertices); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1075 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1076 | /* clobber any old facetnormals */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1077 | if (model->facetnorms) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1078 | free(model->facetnorms); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1079 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1080 | /* allocate memory for the new facet normals */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1081 | model->numfacetnorms = model->numtriangles; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1082 | model->facetnorms = (GLfloat*)malloc(sizeof(GLfloat) * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1083 | 3 * (model->numfacetnorms + 1)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1084 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1085 | for (i = 0; i < model->numtriangles; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1086 | model->triangles[i].findex = i+1; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1087 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1088 | u[0] = model->vertices[3 * T(i).vindices[1] + 0] - |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1089 | model->vertices[3 * T(i).vindices[0] + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1090 | u[1] = model->vertices[3 * T(i).vindices[1] + 1] - |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1091 | model->vertices[3 * T(i).vindices[0] + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1092 | u[2] = model->vertices[3 * T(i).vindices[1] + 2] - |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1093 | model->vertices[3 * T(i).vindices[0] + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1094 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1095 | v[0] = model->vertices[3 * T(i).vindices[2] + 0] - |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1096 | model->vertices[3 * T(i).vindices[0] + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1097 | v[1] = model->vertices[3 * T(i).vindices[2] + 1] - |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1098 | model->vertices[3 * T(i).vindices[0] + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1099 | v[2] = model->vertices[3 * T(i).vindices[2] + 2] - |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1100 | model->vertices[3 * T(i).vindices[0] + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1101 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1102 | glmCross(u, v, &model->facetnorms[3 * (i+1)]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1103 | glmNormalize(&model->facetnorms[3 * (i+1)]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1104 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1105 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1106 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1107 | /* glmVertexNormals: Generates smooth vertex normals for a model. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1108 | * First builds a list of all the triangles each vertex is in. Then |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1109 | * loops through each vertex in the the list averaging all the facet |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1110 | * normals of the triangles each vertex is in. Finally, sets the |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1111 | * normal index in the triangle for the vertex to the generated smooth |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1112 | * normal. If the dot product of a facet normal and the facet normal |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1113 | * associated with the first triangle in the list of triangles the |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1114 | * current vertex is in is greater than the cosine of the angle |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1115 | * parameter to the function, that facet normal is not added into the |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1116 | * average normal calculation and the corresponding vertex is given |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1117 | * the facet normal. This tends to preserve hard edges. The angle to |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1118 | * use depends on the model, but 90 degrees is usually a good start. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1119 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1120 | * model - initialized GLMmodel structure |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1121 | * angle - maximum angle (in degrees) to smooth across |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1122 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1123 | GLvoid |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1124 | glmVertexNormals(GLMmodel* model, GLfloat angle) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1125 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1126 | GLMnode* node; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1127 | GLMnode* tail; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1128 | GLMnode** members; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1129 | GLfloat* normals; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1130 | GLuint numnormals; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1131 | GLfloat average[3]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1132 | GLfloat dot, cos_angle; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1133 | GLuint i, avg; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1134 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1135 | assert(model); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1136 | assert(model->facetnorms); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1137 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1138 | /* calculate the cosine of the angle (in degrees) */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1139 | cos_angle = cos(angle * M_PI / 180.0); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1140 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1141 | /* nuke any previous normals */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1142 | if (model->normals) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1143 | free(model->normals); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1144 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1145 | /* allocate space for new normals */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1146 | model->numnormals = model->numtriangles * 3; /* 3 normals per triangle */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1147 | model->normals = (GLfloat*)malloc(sizeof(GLfloat)* 3* (model->numnormals+1)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1148 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1149 | /* allocate a structure that will hold a linked list of triangle |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1150 | indices for each vertex */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1151 | members = (GLMnode**)malloc(sizeof(GLMnode*) * (model->numvertices + 1)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1152 | for (i = 1; i <= model->numvertices; i++) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1153 | members[i] = NULL; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1154 | |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1155 | /* for every triangle, create a node for each vertex in it */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1156 | for (i = 0; i < model->numtriangles; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1157 | node = (GLMnode*)malloc(sizeof(GLMnode)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1158 | node->index = i; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1159 | node->next = members[T(i).vindices[0]]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1160 | members[T(i).vindices[0]] = node; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1161 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1162 | node = (GLMnode*)malloc(sizeof(GLMnode)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1163 | node->index = i; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1164 | node->next = members[T(i).vindices[1]]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1165 | members[T(i).vindices[1]] = node; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1166 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1167 | node = (GLMnode*)malloc(sizeof(GLMnode)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1168 | node->index = i; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1169 | node->next = members[T(i).vindices[2]]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1170 | members[T(i).vindices[2]] = node; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1171 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1172 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1173 | /* calculate the average normal for each vertex */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1174 | numnormals = 1; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1175 | for (i = 1; i <= model->numvertices; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1176 | /* calculate an average normal for this vertex by averaging the |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1177 | facet normal of every triangle this vertex is in */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1178 | node = members[i]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1179 | if (!node) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1180 | fprintf(stderr, "glmVertexNormals(): vertex w/o a triangle\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1181 | average[0] = 0.0; average[1] = 0.0; average[2] = 0.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1182 | avg = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1183 | while (node) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1184 | /* only average if the dot product of the angle between the two |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1185 | facet normals is greater than the cosine of the threshold |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1186 | angle -- or, said another way, the angle between the two |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1187 | facet normals is less than (or equal to) the threshold angle */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1188 | dot = glmDot(&model->facetnorms[3 * T(node->index).findex], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1189 | &model->facetnorms[3 * T(members[i]->index).findex]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1190 | if (dot > cos_angle) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1191 | node->averaged = GL_TRUE; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1192 | average[0] += model->facetnorms[3 * T(node->index).findex + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1193 | average[1] += model->facetnorms[3 * T(node->index).findex + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1194 | average[2] += model->facetnorms[3 * T(node->index).findex + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1195 | avg = 1; /* we averaged at least one normal! */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1196 | } else { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1197 | node->averaged = GL_FALSE; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1198 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1199 | node = node->next; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1200 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1201 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1202 | if (avg) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1203 | /* normalize the averaged normal */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1204 | glmNormalize(average); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1205 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1206 | /* add the normal to the vertex normals list */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1207 | model->normals[3 * numnormals + 0] = average[0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1208 | model->normals[3 * numnormals + 1] = average[1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1209 | model->normals[3 * numnormals + 2] = average[2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1210 | avg = numnormals; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1211 | numnormals++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1212 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1213 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1214 | /* set the normal of this vertex in each triangle it is in */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1215 | node = members[i]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1216 | while (node) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1217 | if (node->averaged) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1218 | /* if this node was averaged, use the average normal */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1219 | if (T(node->index).vindices[0] == i) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1220 | T(node->index).nindices[0] = avg; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1221 | else if (T(node->index).vindices[1] == i) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1222 | T(node->index).nindices[1] = avg; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1223 | else if (T(node->index).vindices[2] == i) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1224 | T(node->index).nindices[2] = avg; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1225 | } else { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1226 | /* if this node wasn't averaged, use the facet normal */ |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1227 | model->normals[3 * numnormals + 0] = |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1228 | model->facetnorms[3 * T(node->index).findex + 0]; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1229 | model->normals[3 * numnormals + 1] = |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1230 | model->facetnorms[3 * T(node->index).findex + 1]; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1231 | model->normals[3 * numnormals + 2] = |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1232 | model->facetnorms[3 * T(node->index).findex + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1233 | if (T(node->index).vindices[0] == i) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1234 | T(node->index).nindices[0] = numnormals; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1235 | else if (T(node->index).vindices[1] == i) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1236 | T(node->index).nindices[1] = numnormals; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1237 | else if (T(node->index).vindices[2] == i) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1238 | T(node->index).nindices[2] = numnormals; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1239 | numnormals++; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1240 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1241 | node = node->next; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1242 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1243 | } |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1244 | |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1245 | model->numnormals = numnormals - 1; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1246 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1247 | /* free the member information */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1248 | for (i = 1; i <= model->numvertices; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1249 | node = members[i]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1250 | while (node) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1251 | tail = node; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1252 | node = node->next; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1253 | free(tail); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1254 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1255 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1256 | free(members); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1257 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1258 | /* pack the normals array (we previously allocated the maximum |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1259 | number of normals that could possibly be created (numtriangles * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1260 | 3), so get rid of some of them (usually alot unless none of the |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1261 | facet normals were averaged)) */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1262 | normals = model->normals; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1263 | model->normals = (GLfloat*)malloc(sizeof(GLfloat)* 3* (model->numnormals+1)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1264 | for (i = 1; i <= model->numnormals; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1265 | model->normals[3 * i + 0] = normals[3 * i + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1266 | model->normals[3 * i + 1] = normals[3 * i + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1267 | model->normals[3 * i + 2] = normals[3 * i + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1268 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1269 | free(normals); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1270 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1271 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1272 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1273 | /* glmLinearTexture: Generates texture coordinates according to a |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1274 | * linear projection of the texture map. It generates these by |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1275 | * linearly mapping the vertices onto a square. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1276 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1277 | * model - pointer to initialized GLMmodel structure |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1278 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1279 | GLvoid |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1280 | glmLinearTexture(GLMmodel* model) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1281 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1282 | GLMgroup *group; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1283 | GLfloat dimensions[3]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1284 | GLfloat x, y, scalefactor; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1285 | GLuint i; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1286 | |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1287 | assert(model); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1288 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1289 | if (model->texcoords) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1290 | free(model->texcoords); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1291 | model->numtexcoords = model->numvertices; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1292 | model->texcoords=(GLfloat*)malloc(sizeof(GLfloat)*2*(model->numtexcoords+1)); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1293 | |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1294 | glmDimensions(model, dimensions); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1295 | scalefactor = 2.0 / |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1296 | glmAbs(glmMax(glmMax(dimensions[0], dimensions[1]), dimensions[2])); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1297 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1298 | /* do the calculations */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1299 | for(i = 1; i <= model->numvertices; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1300 | x = model->vertices[3 * i + 0] * scalefactor; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1301 | y = model->vertices[3 * i + 2] * scalefactor; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1302 | model->texcoords[2 * i + 0] = (x + 1.0) / 2.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1303 | model->texcoords[2 * i + 1] = (y + 1.0) / 2.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1304 | } |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1305 | |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1306 | /* go through and put texture coordinate indices in all the triangles */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1307 | group = model->groups; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1308 | while(group) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1309 | for(i = 0; i < group->numtriangles; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1310 | T(group->triangles[i]).tindices[0] = T(group->triangles[i]).vindices[0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1311 | T(group->triangles[i]).tindices[1] = T(group->triangles[i]).vindices[1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1312 | T(group->triangles[i]).tindices[2] = T(group->triangles[i]).vindices[2]; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1313 | } |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1314 | group = group->next; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1315 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1316 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1317 | #if 0 |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1318 | printf("glmLinearTexture(): generated %d linear texture coordinates\n", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1319 | model->numtexcoords); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1320 | #endif |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1321 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1322 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1323 | /* glmSpheremapTexture: Generates texture coordinates according to a |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1324 | * spherical projection of the texture map. Sometimes referred to as |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1325 | * spheremap, or reflection map texture coordinates. It generates |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1326 | * these by using the normal to calculate where that vertex would map |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1327 | * onto a sphere. Since it is impossible to map something flat |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1328 | * perfectly onto something spherical, there is distortion at the |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1329 | * poles. This particular implementation causes the poles along the X |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1330 | * axis to be distorted. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1331 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1332 | * model - pointer to initialized GLMmodel structure |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1333 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1334 | GLvoid |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1335 | glmSpheremapTexture(GLMmodel* model) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1336 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1337 | GLMgroup* group; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1338 | GLfloat theta, phi, rho, x, y, z, r; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1339 | GLuint i; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1340 | |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1341 | assert(model); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1342 | assert(model->normals); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1343 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1344 | if (model->texcoords) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1345 | free(model->texcoords); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1346 | model->numtexcoords = model->numnormals; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1347 | model->texcoords=(GLfloat*)malloc(sizeof(GLfloat)*2*(model->numtexcoords+1)); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1348 | |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1349 | for (i = 1; i <= model->numnormals; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1350 | z = model->normals[3 * i + 0]; /* re-arrange for pole distortion */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1351 | y = model->normals[3 * i + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1352 | x = model->normals[3 * i + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1353 | r = sqrt((x * x) + (y * y)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1354 | rho = sqrt((r * r) + (z * z)); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1355 | |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1356 | if(r == 0.0) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1357 | theta = 0.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1358 | phi = 0.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1359 | } else { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1360 | if(z == 0.0) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1361 | phi = 3.14159265 / 2.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1362 | else |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1363 | phi = acos(z / rho); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1364 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1365 | if(y == 0.0) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1366 | theta = 3.141592365 / 2.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1367 | else |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1368 | theta = asin(y / r) + (3.14159265 / 2.0); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1369 | } |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1370 | |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1371 | model->texcoords[2 * i + 0] = theta / 3.14159265; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1372 | model->texcoords[2 * i + 1] = phi / 3.14159265; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1373 | } |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1374 | |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1375 | /* go through and put texcoord indices in all the triangles */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1376 | group = model->groups; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1377 | while(group) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1378 | for (i = 0; i < group->numtriangles; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1379 | T(group->triangles[i]).tindices[0] = T(group->triangles[i]).nindices[0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1380 | T(group->triangles[i]).tindices[1] = T(group->triangles[i]).nindices[1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1381 | T(group->triangles[i]).tindices[2] = T(group->triangles[i]).nindices[2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1382 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1383 | group = group->next; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1384 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1385 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1386 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1387 | /* glmDelete: Deletes a GLMmodel structure. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1388 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1389 | * model - initialized GLMmodel structure |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1390 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1391 | GLvoid |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1392 | glmDelete(GLMmodel* model) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1393 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1394 | GLMgroup* group; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1395 | GLuint i; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1396 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1397 | assert(model); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1398 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1399 | if (model->pathname) free(model->pathname); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1400 | if (model->mtllibname) free(model->mtllibname); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1401 | if (model->vertices) free(model->vertices); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1402 | if (model->normals) free(model->normals); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1403 | if (model->texcoords) free(model->texcoords); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1404 | if (model->facetnorms) free(model->facetnorms); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1405 | if (model->triangles) free(model->triangles); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1406 | if (model->materials) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1407 | for (i = 0; i < model->nummaterials; i++) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1408 | free(model->materials[i].name); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1409 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1410 | free(model->materials); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1411 | while(model->groups) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1412 | group = model->groups; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1413 | model->groups = model->groups->next; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1414 | free(group->name); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1415 | free(group->triangles); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1416 | free(group); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1417 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1418 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1419 | free(model); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1420 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1421 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1422 | /* glmReadOBJ: Reads a model description from a Wavefront .OBJ file. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1423 | * Modelurns a pointer to the created object which should be free'd with |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1424 | * glmDelete(). |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1425 | * |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1426 | * filename - name of the file containing the Wavefront .OBJ format data. |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1427 | */ |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1428 | GLMmodel* |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1429 | glmReadOBJ(char* filename) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1430 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1431 | GLMmodel* model; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1432 | FILE* file; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1433 | printf("*"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1434 | fflush(NULL); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1435 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1436 | /* open the file */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1437 | file = fopen(filename, "r"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1438 | if (!file) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1439 | fprintf(stderr, "glmReadOBJ() failed: can't open data file \"%s\".\n", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1440 | filename); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1441 | exit(1); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1442 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1443 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1444 | /* allocate a new model */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1445 | model = (GLMmodel*)malloc(sizeof(GLMmodel)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1446 | model->pathname = strdup(filename); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1447 | model->mtllibname = NULL; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1448 | model->numvertices = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1449 | model->vertices = NULL; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1450 | model->numnormals = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1451 | model->normals = NULL; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1452 | model->numtexcoords = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1453 | model->texcoords = NULL; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1454 | model->numfacetnorms = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1455 | model->facetnorms = NULL; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1456 | model->numtriangles = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1457 | model->triangles = NULL; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1458 | model->nummaterials = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1459 | model->materials = NULL; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1460 | model->numgroups = 0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1461 | model->groups = NULL; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1462 | model->position[0] = 0.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1463 | model->position[1] = 0.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1464 | model->position[2] = 0.0; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1465 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1466 | /* make a first pass through the file to get a count of the number |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1467 | of vertices, normals, texcoords & triangles */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1468 | glmFirstPass(model, file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1469 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1470 | /* allocate memory */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1471 | model->vertices = (GLfloat*)malloc(sizeof(GLfloat) * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1472 | 3 * (model->numvertices + 1)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1473 | model->triangles = (GLMtriangle*)malloc(sizeof(GLMtriangle) * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1474 | model->numtriangles); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1475 | if (model->numnormals) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1476 | model->normals = (GLfloat*)malloc(sizeof(GLfloat) * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1477 | 3 * (model->numnormals + 1)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1478 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1479 | if (model->numtexcoords) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1480 | model->texcoords = (GLfloat*)malloc(sizeof(GLfloat) * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1481 | 2 * (model->numtexcoords + 1)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1482 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1483 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1484 | /* rewind to beginning of file and read in the data this pass */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1485 | rewind(file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1486 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1487 | glmSecondPass(model, file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1488 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1489 | /* close the file */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1490 | fclose(file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1491 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1492 | return model; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1493 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1494 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1495 | /* glmWriteOBJ: Writes a model description in Wavefront .OBJ format to |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1496 | * a file. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1497 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1498 | * model - initialized GLMmodel structure |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1499 | * filename - name of the file to write the Wavefront .OBJ format data to |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1500 | * mode - a bitwise or of values describing what is written to the file |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1501 | * GLM_NONE - render with only vertices |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1502 | * GLM_FLAT - render with facet normals |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1503 | * GLM_SMOOTH - render with vertex normals |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1504 | * GLM_TEXTURE - render with texture coords |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1505 | * GLM_COLOR - render with colors (color material) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1506 | * GLM_MATERIAL - render with materials |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1507 | * GLM_COLOR and GLM_MATERIAL should not both be specified. |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1508 | * GLM_FLAT and GLM_SMOOTH should not both be specified. |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1509 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1510 | GLvoid |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1511 | glmWriteOBJ(GLMmodel* model, char* filename, GLuint mode) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1512 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1513 | GLuint i; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1514 | FILE* file; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1515 | GLMgroup* group; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1516 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1517 | assert(model); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1518 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1519 | /* do a bit of warning */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1520 | if (mode & GLM_FLAT && !model->facetnorms) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1521 | printf("glmWriteOBJ() warning: flat normal output requested " |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1522 | "with no facet normals defined.\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1523 | mode &= ~GLM_FLAT; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1524 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1525 | if (mode & GLM_SMOOTH && !model->normals) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1526 | printf("glmWriteOBJ() warning: smooth normal output requested " |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1527 | "with no normals defined.\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1528 | mode &= ~GLM_SMOOTH; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1529 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1530 | if (mode & GLM_TEXTURE && !model->texcoords) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1531 | printf("glmWriteOBJ() warning: texture coordinate output requested " |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1532 | "with no texture coordinates defined.\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1533 | mode &= ~GLM_TEXTURE; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1534 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1535 | if (mode & GLM_FLAT && mode & GLM_SMOOTH) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1536 | printf("glmWriteOBJ() warning: flat normal output requested " |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1537 | "and smooth normal output requested (using smooth).\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1538 | mode &= ~GLM_FLAT; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1539 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1540 | if (mode & GLM_COLOR && !model->materials) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1541 | printf("glmWriteOBJ() warning: color output requested " |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1542 | "with no colors (materials) defined.\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1543 | mode &= ~GLM_COLOR; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1544 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1545 | if (mode & GLM_MATERIAL && !model->materials) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1546 | printf("glmWriteOBJ() warning: material output requested " |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1547 | "with no materials defined.\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1548 | mode &= ~GLM_MATERIAL; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1549 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1550 | if (mode & GLM_COLOR && mode & GLM_MATERIAL) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1551 | printf("glmWriteOBJ() warning: color and material output requested " |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1552 | "outputting only materials.\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1553 | mode &= ~GLM_COLOR; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1554 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1555 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1556 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1557 | /* open the file */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1558 | file = fopen(filename, "w"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1559 | if (!file) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1560 | fprintf(stderr, "glmWriteOBJ() failed: can't open file \"%s\" to write.\n", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1561 | filename); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1562 | exit(1); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1563 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1564 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1565 | /* spit out a header */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1566 | fprintf(file, "# \n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1567 | fprintf(file, "# Wavefront OBJ generated by GLM library\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1568 | fprintf(file, "# \n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1569 | fprintf(file, "# GLM library\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1570 | fprintf(file, "# Nate Robins\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1571 | fprintf(file, "# ndr@pobox.com\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1572 | fprintf(file, "# http://www.pobox.com/~ndr\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1573 | fprintf(file, "# \n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1574 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1575 | if (mode & GLM_MATERIAL && model->mtllibname) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1576 | fprintf(file, "\nmtllib %s\n\n", model->mtllibname); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1577 | glmWriteMTL(model, filename, model->mtllibname); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1578 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1579 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1580 | /* spit out the vertices */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1581 | fprintf(file, "\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1582 | fprintf(file, "# %d vertices\n", model->numvertices); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1583 | for (i = 1; i <= model->numvertices; i++) { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1584 | fprintf(file, "v %f %f %f\n", |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1585 | model->vertices[3 * i + 0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1586 | model->vertices[3 * i + 1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1587 | model->vertices[3 * i + 2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1588 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1589 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1590 | /* spit out the smooth/flat normals */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1591 | if (mode & GLM_SMOOTH) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1592 | fprintf(file, "\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1593 | fprintf(file, "# %d normals\n", model->numnormals); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1594 | for (i = 1; i <= model->numnormals; i++) { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1595 | fprintf(file, "vn %f %f %f\n", |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1596 | model->normals[3 * i + 0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1597 | model->normals[3 * i + 1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1598 | model->normals[3 * i + 2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1599 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1600 | } else if (mode & GLM_FLAT) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1601 | fprintf(file, "\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1602 | fprintf(file, "# %d normals\n", model->numfacetnorms); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1603 | for (i = 1; i <= model->numnormals; i++) { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1604 | fprintf(file, "vn %f %f %f\n", |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1605 | model->facetnorms[3 * i + 0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1606 | model->facetnorms[3 * i + 1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1607 | model->facetnorms[3 * i + 2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1608 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1609 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1610 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1611 | /* spit out the texture coordinates */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1612 | if (mode & GLM_TEXTURE) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1613 | fprintf(file, "\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1614 | fprintf(file, "# %d texcoords\n", model->texcoords); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1615 | for (i = 1; i <= model->numtexcoords; i++) { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1616 | fprintf(file, "vt %f %f\n", |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1617 | model->texcoords[2 * i + 0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1618 | model->texcoords[2 * i + 1]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1619 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1620 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1621 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1622 | fprintf(file, "\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1623 | fprintf(file, "# %d groups\n", model->numgroups); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1624 | fprintf(file, "# %d faces (triangles)\n", model->numtriangles); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1625 | fprintf(file, "\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1626 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1627 | group = model->groups; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1628 | while(group) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1629 | fprintf(file, "g %s\n", group->name); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1630 | if (mode & GLM_MATERIAL) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1631 | fprintf(file, "usemtl %s\n", model->materials[group->material].name); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1632 | for (i = 0; i < group->numtriangles; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1633 | if (mode & GLM_SMOOTH && mode & GLM_TEXTURE) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1634 | fprintf(file, "f %d/%d/%d %d/%d/%d %d/%d/%d\n", |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1635 | T(group->triangles[i]).vindices[0], |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1636 | T(group->triangles[i]).nindices[0], |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1637 | T(group->triangles[i]).tindices[0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1638 | T(group->triangles[i]).vindices[1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1639 | T(group->triangles[i]).nindices[1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1640 | T(group->triangles[i]).tindices[1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1641 | T(group->triangles[i]).vindices[2], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1642 | T(group->triangles[i]).nindices[2], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1643 | T(group->triangles[i]).tindices[2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1644 | } else if (mode & GLM_FLAT && mode & GLM_TEXTURE) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1645 | fprintf(file, "f %d/%d %d/%d %d/%d\n", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1646 | T(group->triangles[i]).vindices[0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1647 | T(group->triangles[i]).findex, |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1648 | T(group->triangles[i]).vindices[1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1649 | T(group->triangles[i]).findex, |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1650 | T(group->triangles[i]).vindices[2], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1651 | T(group->triangles[i]).findex); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1652 | } else if (mode & GLM_TEXTURE) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1653 | fprintf(file, "f %d/%d %d/%d %d/%d\n", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1654 | T(group->triangles[i]).vindices[0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1655 | T(group->triangles[i]).tindices[0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1656 | T(group->triangles[i]).vindices[1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1657 | T(group->triangles[i]).tindices[1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1658 | T(group->triangles[i]).vindices[2], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1659 | T(group->triangles[i]).tindices[2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1660 | } else if (mode & GLM_SMOOTH) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1661 | fprintf(file, "f %d//%d %d//%d %d//%d\n", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1662 | T(group->triangles[i]).vindices[0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1663 | T(group->triangles[i]).nindices[0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1664 | T(group->triangles[i]).vindices[1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1665 | T(group->triangles[i]).nindices[1], |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1666 | T(group->triangles[i]).vindices[2], |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1667 | T(group->triangles[i]).nindices[2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1668 | } else if (mode & GLM_FLAT) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1669 | fprintf(file, "f %d//%d %d//%d %d//%d\n", |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1670 | T(group->triangles[i]).vindices[0], |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1671 | T(group->triangles[i]).findex, |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1672 | T(group->triangles[i]).vindices[1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1673 | T(group->triangles[i]).findex, |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1674 | T(group->triangles[i]).vindices[2], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1675 | T(group->triangles[i]).findex); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1676 | } else { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1677 | fprintf(file, "f %d %d %d\n", |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1678 | T(group->triangles[i]).vindices[0], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1679 | T(group->triangles[i]).vindices[1], |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1680 | T(group->triangles[i]).vindices[2]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1681 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1682 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1683 | fprintf(file, "\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1684 | group = group->next; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1685 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1686 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1687 | fclose(file); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1688 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1689 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1690 | /* glmDraw: Renders the model to the current OpenGL context using the |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1691 | * mode specified. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1692 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1693 | * model - initialized GLMmodel structure |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1694 | * mode - a bitwise OR of values describing what is to be rendered. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1695 | * GLM_NONE - render with only vertices |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1696 | * GLM_FLAT - render with facet normals |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1697 | * GLM_SMOOTH - render with vertex normals |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1698 | * GLM_TEXTURE - render with texture coords |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1699 | * GLM_COLOR - render with colors (color material) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1700 | * GLM_MATERIAL - render with materials |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1701 | * GLM_COLOR and GLM_MATERIAL should not both be specified. |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1702 | * GLM_FLAT and GLM_SMOOTH should not both be specified. |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1703 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1704 | GLvoid |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1705 | glmDraw(GLMmodel* model, GLuint mode) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1706 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1707 | static GLuint i; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1708 | static GLMgroup* group; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1709 | static GLMtriangle* triangle; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1710 | static GLMmaterial* material; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1711 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1712 | assert(model); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1713 | assert(model->vertices); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1714 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1715 | /* do a bit of warning */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1716 | if (mode & GLM_FLAT && !model->facetnorms) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1717 | printf("glmDraw() warning: flat render mode requested " |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1718 | "with no facet normals defined.\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1719 | mode &= ~GLM_FLAT; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1720 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1721 | if (mode & GLM_SMOOTH && !model->normals) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1722 | printf("glmDraw() warning: smooth render mode requested " |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1723 | "with no normals defined.\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1724 | mode &= ~GLM_SMOOTH; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1725 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1726 | if (mode & GLM_TEXTURE && !model->texcoords) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1727 | printf("glmDraw() warning: texture render mode requested " |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1728 | "with no texture coordinates defined.\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1729 | mode &= ~GLM_TEXTURE; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1730 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1731 | if (mode & GLM_FLAT && mode & GLM_SMOOTH) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1732 | printf("glmDraw() warning: flat render mode requested " |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1733 | "and smooth render mode requested (using smooth).\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1734 | mode &= ~GLM_FLAT; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1735 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1736 | if (mode & GLM_COLOR && !model->materials) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1737 | printf("glmDraw() warning: color render mode requested " |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1738 | "with no materials defined.\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1739 | mode &= ~GLM_COLOR; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1740 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1741 | if (mode & GLM_MATERIAL && !model->materials) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1742 | printf("glmDraw() warning: material render mode requested " |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1743 | "with no materials defined.\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1744 | mode &= ~GLM_MATERIAL; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1745 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1746 | if (mode & GLM_COLOR && mode & GLM_MATERIAL) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1747 | printf("glmDraw() warning: color and material render mode requested " |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1748 | "using only material mode.\n"); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1749 | mode &= ~GLM_COLOR; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1750 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1751 | if (mode & GLM_COLOR) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1752 | glEnable(GL_COLOR_MATERIAL); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1753 | else if (mode & GLM_MATERIAL) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1754 | glDisable(GL_COLOR_MATERIAL); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1755 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1756 | /* perhaps this loop should be unrolled into material, color, flat, |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1757 | smooth, etc. loops? since most cpu's have good branch prediction |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1758 | schemes (and these branches will always go one way), probably |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1759 | wouldn't gain too much? */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1760 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1761 | group = model->groups; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1762 | while (group) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1763 | if (mode & GLM_MATERIAL) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1764 | material = &model->materials[group->material]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1765 | glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, material->ambient); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1766 | glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, material->diffuse); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1767 | glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, material->specular); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1768 | glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, material->shininess); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1769 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1770 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1771 | if (mode & GLM_COLOR) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1772 | glColor3fv(material->diffuse); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1773 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1774 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1775 | glBegin(GL_TRIANGLES); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1776 | for (i = 0; i < group->numtriangles; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1777 | triangle = &T(group->triangles[i]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1778 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1779 | if (mode & GLM_FLAT) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1780 | glNormal3fv(&model->facetnorms[3 * triangle->findex]); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1781 | |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1782 | if (mode & GLM_SMOOTH) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1783 | glNormal3fv(&model->normals[3 * triangle->nindices[0]]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1784 | if (mode & GLM_TEXTURE) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1785 | glTexCoord2fv(&model->texcoords[2 * triangle->tindices[0]]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1786 | glVertex3fv(&model->vertices[3 * triangle->vindices[0]]); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1787 | |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1788 | if (mode & GLM_SMOOTH) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1789 | glNormal3fv(&model->normals[3 * triangle->nindices[1]]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1790 | if (mode & GLM_TEXTURE) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1791 | glTexCoord2fv(&model->texcoords[2 * triangle->tindices[1]]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1792 | glVertex3fv(&model->vertices[3 * triangle->vindices[1]]); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1793 | |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1794 | if (mode & GLM_SMOOTH) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1795 | glNormal3fv(&model->normals[3 * triangle->nindices[2]]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1796 | if (mode & GLM_TEXTURE) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1797 | glTexCoord2fv(&model->texcoords[2 * triangle->tindices[2]]); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1798 | glVertex3fv(&model->vertices[3 * triangle->vindices[2]]); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1799 | |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1800 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1801 | glEnd(); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1802 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1803 | group = group->next; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1804 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1805 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1806 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1807 | /* glmList: Generates and modelurns a display list for the model using |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1808 | * the mode specified. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1809 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1810 | * model - initialized GLMmodel structure |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1811 | * mode - a bitwise OR of values describing what is to be rendered. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1812 | * GLM_NONE - render with only vertices |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1813 | * GLM_FLAT - render with facet normals |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1814 | * GLM_SMOOTH - render with vertex normals |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1815 | * GLM_TEXTURE - render with texture coords |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1816 | * GLM_COLOR - render with colors (color material) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1817 | * GLM_MATERIAL - render with materials |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1818 | * GLM_COLOR and GLM_MATERIAL should not both be specified. |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1819 | * GLM_FLAT and GLM_SMOOTH should not both be specified. */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1820 | GLuint |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1821 | glmList(GLMmodel* model, GLuint mode) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1822 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1823 | GLuint list; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1824 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1825 | list = glGenLists(1); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1826 | glNewList(list, GL_COMPILE); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1827 | glmDraw(model, mode); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1828 | glEndList(); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1829 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1830 | return list; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1831 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1832 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1833 | /* glmWeld: eliminate (weld) vectors that are within an epsilon of |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1834 | * each other. |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1835 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1836 | * model - initialized GLMmodel structure |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1837 | * epsilon - maximum difference between vertices |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1838 | * ( 0.00001 is a good start for a unitized model) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1839 | * |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1840 | */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1841 | GLvoid |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1842 | glmWeld(GLMmodel* model, GLfloat epsilon) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1843 | { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1844 | GLfloat* vectors; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1845 | GLfloat* copies; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1846 | GLuint numvectors; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1847 | GLuint i; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1848 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1849 | /* vertices */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1850 | numvectors = model->numvertices; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1851 | vectors = model->vertices; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1852 | copies = glmWeldVectors(vectors, &numvectors, epsilon); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1853 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1854 | #if 0 |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1855 | printf("glmWeld(): %d redundant vertices.\n", |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1856 | model->numvertices - numvectors - 1); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1857 | #endif |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1858 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1859 | for (i = 0; i < model->numtriangles; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1860 | T(i).vindices[0] = (GLuint)vectors[3 * T(i).vindices[0] + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1861 | T(i).vindices[1] = (GLuint)vectors[3 * T(i).vindices[1] + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1862 | T(i).vindices[2] = (GLuint)vectors[3 * T(i).vindices[2] + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1863 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1864 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1865 | /* free space for old vertices */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1866 | free(vectors); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1867 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1868 | /* allocate space for the new vertices */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1869 | model->numvertices = numvectors; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1870 | model->vertices = (GLfloat*)malloc(sizeof(GLfloat) * |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1871 | 3 * (model->numvertices + 1)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1872 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1873 | /* copy the optimized vertices into the actual vertex list */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1874 | for (i = 1; i <= model->numvertices; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1875 | model->vertices[3 * i + 0] = copies[3 * i + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1876 | model->vertices[3 * i + 1] = copies[3 * i + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1877 | model->vertices[3 * i + 2] = copies[3 * i + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1878 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1879 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1880 | free(copies); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1881 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1882 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1883 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1884 | #if 0 |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1885 | /* normals */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1886 | if (model->numnormals) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1887 | numvectors = model->numnormals; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1888 | vectors = model->normals; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1889 | copies = glmOptimizeVectors(vectors, &numvectors); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1890 | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1891 | printf("glmOptimize(): %d redundant normals.\n", |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1892 | model->numnormals - numvectors); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1893 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1894 | for (i = 0; i < model->numtriangles; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1895 | T(i).nindices[0] = (GLuint)vectors[3 * T(i).nindices[0] + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1896 | T(i).nindices[1] = (GLuint)vectors[3 * T(i).nindices[1] + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1897 | T(i).nindices[2] = (GLuint)vectors[3 * T(i).nindices[2] + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1898 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1899 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1900 | /* free space for old normals */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1901 | free(vectors); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1902 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1903 | /* allocate space for the new normals */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1904 | model->numnormals = numvectors; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1905 | model->normals = (GLfloat*)malloc(sizeof(GLfloat) * |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1906 | 3 * (model->numnormals + 1)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1907 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1908 | /* copy the optimized vertices into the actual vertex list */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1909 | for (i = 1; i <= model->numnormals; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1910 | model->normals[3 * i + 0] = copies[3 * i + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1911 | model->normals[3 * i + 1] = copies[3 * i + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1912 | model->normals[3 * i + 2] = copies[3 * i + 2]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1913 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1914 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1915 | free(copies); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1916 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1917 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1918 | /* texcoords */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1919 | if (model->numtexcoords) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1920 | numvectors = model->numtexcoords; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1921 | vectors = model->texcoords; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1922 | copies = glmOptimizeVectors(vectors, &numvectors); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1923 | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1924 | printf("glmOptimize(): %d redundant texcoords.\n", |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1925 | model->numtexcoords - numvectors); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1926 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1927 | for (i = 0; i < model->numtriangles; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1928 | for (j = 0; j < 3; j++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1929 | T(i).tindices[j] = (GLuint)vectors[3 * T(i).tindices[j] + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1930 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1931 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1932 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1933 | /* free space for old texcoords */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1934 | free(vectors); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1935 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1936 | /* allocate space for the new texcoords */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1937 | model->numtexcoords = numvectors; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1938 | model->texcoords = (GLfloat*)malloc(sizeof(GLfloat) * |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1939 | 2 * (model->numtexcoords + 1)); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1940 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1941 | /* copy the optimized vertices into the actual vertex list */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1942 | for (i = 1; i <= model->numtexcoords; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1943 | model->texcoords[2 * i + 0] = copies[2 * i + 0]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1944 | model->texcoords[2 * i + 1] = copies[2 * i + 1]; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1945 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1946 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1947 | free(copies); |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1948 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1949 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1950 | #endif |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1951 | |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1952 | #if 0 |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1953 | /* look for unused vertices */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1954 | /* look for unused normals */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1955 | /* look for unused texcoords */ |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1956 | for (i = 1; i <= model->numvertices; i++) { |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1957 | for (j = 0; j < model->numtriangles; i++) { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1958 | if (T(j).vindices[0] == i || |
|
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
28076
diff
changeset
|
1959 | T(j).vindices[1] == i || |
|
11232
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1960 | T(j).vindices[1] == i) |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1961 | break; |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1962 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1963 | } |
|
27bb80119f01
[gaim-migrate @ 13372]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1964 | #endif |