2 * glChess - A 3D chess interface
4 * Copyright (C) 2002 Robert Ancell <bob27@users.sourceforge.net>
5 * Michael Duelli <duelli@users.sourceforge.net>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 /* chessmodels.c: Contains the code for piece model creation */
29 #include "chessmodels.h"
31 double piece_size = 0.1;
35 #define piece_size 0.095
38 /* Make a revolved piece */
39 void revolve_line(double *trace_r, double *trace_h, double max_ih, int rot) {
40 double theta, norm_theta, sin_theta, cos_theta;
41 double norm_ptheta = 0.0, sin_ptheta = 0.0, cos_ptheta = 1.0;
42 double radius, pradius;
43 double max_height = max_ih, height, pheight;
46 double dtheta = (2.0*M_PI) / rot;
48 /* Get the number of points */
50 fabs(trace_r[npoints]) > EPSILON || fabs(trace_h[npoints]) > EPSILON;
53 /* If less than two points, can not revolve */
57 /* If the max_height hasn't been defined, find it */
58 if(max_height < EPSILON)
59 for(p = 0; p < npoints; ++p)
60 if(max_height < trace_h[p])
61 max_height = trace_h[p];
63 /* Draw the revolution */
64 for(theta = dtheta; rot > 0; --rot) {
65 sin_theta = sin(theta);
66 cos_theta = cos(theta);
67 norm_theta = theta / (2.0 * M_PI);
68 pradius = trace_r[0] * piece_size;
69 pheight = trace_h[0] * piece_size;
71 for(p = 0; p < npoints; ++p) {
72 radius = trace_r[p] * piece_size;
73 height = trace_h[p] * piece_size;
75 /* Get the normalized lengths of the normal vector */
76 dx = radius - pradius;
77 dy = height - pheight;
78 len = sqrt(dx*dx + dy*dy);
82 /* If only triangles required */
83 if (fabs(radius) < EPSILON) {
84 glBegin(GL_TRIANGLES);
86 glNormal3f(dy * sin_ptheta, -dx, dy * cos_ptheta);
87 glTexCoord2f(norm_ptheta, pheight / max_height);
88 glVertex3f(pradius * sin_ptheta, pheight, pradius * cos_ptheta);
90 glNormal3f(dy * sin_theta, -dx, dy * cos_theta);
91 glTexCoord2f(norm_theta, pheight / max_height);
92 glVertex3f(pradius * sin_theta, pheight, pradius * cos_theta);
94 glTexCoord2f(0.5 * (norm_theta + norm_ptheta),
96 glVertex3f(0.0, height, 0.0);
104 glNormal3f(dy * sin_ptheta, -dx, dy * cos_ptheta);
105 glTexCoord2f(norm_ptheta, pheight / max_height);
106 glVertex3f(pradius * sin_ptheta, pheight, pradius * cos_ptheta);
108 glNormal3f(dy * sin_theta, -dx, dy * cos_theta);
109 glTexCoord2f(norm_theta, pheight / max_height);
110 glVertex3f(pradius * sin_theta, pheight, pradius * cos_theta);
112 glTexCoord2f(norm_theta, height / max_height);
113 glVertex3f(radius * sin_theta, height, radius * cos_theta);
115 glNormal3f(dy * sin_ptheta, -dx, dy * cos_ptheta);
116 glTexCoord2f(norm_ptheta, height / max_height);
117 glVertex3f(radius * sin_ptheta, height, radius * cos_ptheta);
126 sin_ptheta = sin_theta;
127 cos_ptheta = cos_theta;
128 norm_ptheta = norm_theta;
133 void gen_model_lists(void) {
134 glNewList(1, GL_COMPILE);
138 glNewList(2, GL_COMPILE);
142 glNewList(3, GL_COMPILE);
146 glNewList(4, GL_COMPILE);
150 glNewList(5, GL_COMPILE);
154 glNewList(6, GL_COMPILE);
159 void draw_pawn(void) {
161 { 3.5, 3.5, 2.5, 2.5, 1.5, 1.0, 1.8, 1.0, 2.0, 1.0, 0.0, 0.0 };
163 { 0.0, 2.0, 3.0, 4.0, 6.0, 8.8, 8.8, 9.2, 11.6, 13.4, 13.4, 0.0 };
165 revolve_line(trace_r, trace_h, 0.0, ROT);
171 { 3.8, 3.8, 2.6, 2.0, 2.8, 2.8, 2.2, 2.2, 0.0, 0.0 };
173 { 0.0, 2.0, 5.0, 10.2, 10.2, 13.6, 13.6, 13.0, 13.0, 0.0 };
175 revolve_line(trace_r, trace_h, 0.0, ROT);
178 void draw_knight(void)
180 double trace_r[] = { 4.1, 4.1, 2.0, 2.0, 2.6, 0.0 };
181 double trace_h[] = { 0.0, 2.0, 3.6, 4.8, 5.8, 0.0 };
184 revolve_line(trace_r, trace_h, 17.8, ROT);
186 /* Non revolved pieces */
191 glNormal3f(0.0, -1.0, 0.0);
192 glTexCoord2f(0.0, 5.8 / 17.8 * piece_size);
193 glVertex3f(2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
194 glTexCoord2f(0.0, 5.8 / 17.8 * piece_size);
195 glVertex3f(-2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
196 glTexCoord2f(0.0, 5.8 / 17.8 * piece_size);
197 glVertex3f(-2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
198 glTexCoord2f(0.0, 5.8 / 17.8 * piece_size);
199 glVertex3f(2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
201 /* Upper edge of nose */
202 glNormal3f(0.0, 0.707107, 0.707107);
203 glTexCoord2f(0.0, 16.2 / 17.8 * piece_size);
204 glVertex3f(0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
205 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
206 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
207 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
208 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
209 glTexCoord2f(0.0, 16.2 / 17.8 * piece_size);
210 glVertex3f(-0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
213 glNormal3f(0.0, 1.0, 0.0);
215 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
216 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
217 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
218 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
219 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
220 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
221 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
222 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
224 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
225 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
226 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
227 glVertex3f(0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
228 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
229 glVertex3f(-0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
230 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
231 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
233 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
234 glVertex3f(0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
235 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
236 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
237 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
238 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
239 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
240 glVertex3f(-0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
242 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
243 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
244 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
245 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
246 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
247 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
248 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
249 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
251 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
252 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
253 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
254 glVertex3f(0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
255 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
256 glVertex3f(-0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
257 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
258 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
260 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
261 glVertex3f(0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
262 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
263 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
264 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
265 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
266 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
267 glVertex3f(-0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
269 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
270 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
271 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
272 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
273 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
274 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
275 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
276 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
279 glNormal3f(0.0, 0.0, -1.0);
280 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
281 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
282 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
283 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
284 glTexCoord2f(0.0, 15.0 / 17.8 * piece_size);
285 glVertex3f(1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
286 glTexCoord2f(0.0, 15.0 / 17.8 * piece_size);
287 glVertex3f(-1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
290 glNormal3f(0.0, 0.0, -1.0);
291 glTexCoord2f(0.0, 15.0 / 17.8 * piece_size);
292 glVertex3f(-1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
293 glTexCoord2f(0.0, 15.0 / 17.8 * piece_size);
294 glVertex3f(1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
295 glTexCoord2f(0.0, 14.8 / 17.8 * piece_size);
296 glVertex3f(0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
297 glTexCoord2f(0.0, 14.8 / 17.8 * piece_size);
298 glVertex3f(-0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
300 /* Right side of face */
301 glNormal3f(-0.933878, 0.128964, -0.333528);
302 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
303 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
304 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
305 glVertex3f(-0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
306 glTexCoord2f(0.0, 14.0 / 17.8 * piece_size);
307 glVertex3f(-1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
308 glTexCoord2f(0.0, 13.8 / 17.8 * piece_size);
309 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
311 glNormal3f(-0.966676, 0.150427, 0.207145);
312 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
313 glVertex3f(-0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
314 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
315 glVertex3f(-0.8 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
316 glTexCoord2f(0.0, 13.8 / 17.8 * piece_size);
317 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
318 glTexCoord2f(0.0, 14.0 / 17.8 * piece_size);
319 glVertex3f(-1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
321 /* (above and below eye) */
322 glNormal3f(-0.934057, 0.124541, -0.334704);
324 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
325 glVertex3f(-0.82666667 * piece_size, 16.6 * piece_size,
327 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
328 glVertex3f(-0.8 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
329 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
330 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
331 glTexCoord2f(0.0, 16.6 / 17.8 * piece_size);
332 glVertex3f(-1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
334 glTexCoord2f(0.0, 13.8 / 17.8 * piece_size);
335 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
336 glTexCoord2f(0.0, 16.2 / 17.8 * piece_size);
337 glVertex3f(-0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
338 glTexCoord2f(0.0, 16.2 / 17.8 * piece_size);
339 glVertex3f(-1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
340 glTexCoord2f(0.0, 13.6 / 17.8 * piece_size);
341 glVertex3f(-1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
343 glTexCoord2f(0.0, 13.6 / 17.8 * piece_size);
344 glVertex3f(-1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
345 glTexCoord2f(0.0, 16.2 / 17.8 * piece_size);
346 glVertex3f(-1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
347 glTexCoord2f(0.0, 15.8 / 17.8 * piece_size);
348 glVertex3f(-1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
349 glTexCoord2f(0.0, 14.0 / 17.8 * piece_size);
350 glVertex3f(-0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
352 glNormal3f(-0.970801, -0.191698, -0.144213);
353 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
354 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
355 glTexCoord2f(0.0, 14.8 / 17.8 * piece_size);
356 glVertex3f(-0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
357 glTexCoord2f(0.0, 14.0 / 17.8 * piece_size);
358 glVertex3f(-0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
359 glTexCoord2f(0.0, 15.8 / 17.8 * piece_size);
360 glVertex3f(-1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
362 glNormal3f(-0.975610, 0.219512, 0.0);
363 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
364 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
365 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
366 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
367 glTexCoord2f(0.0f * piece_size, 15.0f / 17.8f * piece_size);
368 glVertex3f(-1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
369 glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
370 glVertex3f(-0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
372 /* Left side of face */
373 glNormal3f(0.933878, 0.128964, -0.333528);
374 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
375 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
376 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
377 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
378 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
379 glVertex3f(1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
380 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
381 glVertex3f(0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
383 glNormal3f(0.966676, 0.150427, 0.207145);
384 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
385 glVertex3f(0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
386 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
387 glVertex3f(1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
388 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
389 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
390 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
391 glVertex3f(0.8 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
393 /* (above and below eye) */
394 glNormal3f(0.934057, 0.124541, -0.334704);
396 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
397 glVertex3f(0.82666667 * piece_size, 16.6 * piece_size, 0.2 * piece_size);
398 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
399 glVertex3f(1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
400 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
401 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
402 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
403 glVertex3f(0.8 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
405 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
406 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
407 glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
408 glVertex3f(1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
409 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
410 glVertex3f(1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
411 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
412 glVertex3f(0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
414 glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
415 glVertex3f(1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
416 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
417 glVertex3f(0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
418 glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
419 glVertex3f(1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
420 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
421 glVertex3f(1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
423 glNormal3f(0.970801, -0.191698, -0.144213);
424 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
425 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
426 glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
427 glVertex3f(1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
428 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
429 glVertex3f(0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
430 glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
431 glVertex3f(0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
433 glNormal3f(0.975610, -0.219512, 0.0);
434 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
435 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
436 glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
437 glVertex3f(0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
438 glTexCoord2f(0.0f * piece_size, 15.0f / 17.8f * piece_size);
439 glVertex3f(1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
440 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
441 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
444 glNormal3f(0.598246, 0.797665, 0.076372);
445 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
446 glVertex3f(0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
447 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
448 glVertex3f(1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
449 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
450 glVertex3f(0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
451 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
452 glVertex3f(0.61333334 * piece_size, 16.4 * piece_size, 0.2 * piece_size);
454 glNormal3f(0.670088, -0.714758, 0.200256);
455 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
456 glVertex3f(0.61333334 * piece_size, 16.4 * piece_size, 0.2 * piece_size);
457 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
458 glVertex3f(0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
459 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
460 glVertex3f(1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
461 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
462 glVertex3f(0.82666667 * piece_size, 16.6 * piece_size, 0.2 * piece_size);
464 glNormal3f(-0.598246, 0.797665, 0.076372);
465 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
466 glVertex3f(-0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
467 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
468 glVertex3f(-0.61333334 * piece_size, 16.4 * piece_size,
470 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
471 glVertex3f(-0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
472 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
473 glVertex3f(-1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
475 glNormal3f(-0.670088, -0.714758, 0.200256);
476 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
477 glVertex3f(-0.61333334 * piece_size, 16.4 * piece_size,
479 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
480 glVertex3f(-0.82666667 * piece_size, 16.6 * piece_size,
482 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
483 glVertex3f(-1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
484 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
485 glVertex3f(-0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
488 glNormal3f(0.0, 1.0, 0.0);
489 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
490 glVertex3f(0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
491 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
492 glVertex3f(0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
493 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
494 glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
495 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
496 glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
498 glNormal3f(1.0, 0.0, 0.0);
499 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
500 glVertex3f(0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
501 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
502 glVertex3f(0.35 * piece_size, 16.8 * piece_size, -0.8 * piece_size);
503 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
504 glVertex3f(0.35 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
505 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
506 glVertex3f(0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
508 glNormal3f(-1.0, 0.0, 0.0);
509 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
510 glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
511 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
512 glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
513 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
514 glVertex3f(-0.35 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
515 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
516 glVertex3f(-0.35 * piece_size, 16.8 * piece_size, -0.8 * piece_size);
518 glNormal3f(0.0, 0.0, 1.0);
519 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
520 glVertex3f(0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
521 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
522 glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
523 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
524 glVertex3f(-0.35 * piece_size, 16.8 * piece_size, -0.8 * piece_size);
525 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
526 glVertex3f(0.35 * piece_size, 16.8 * piece_size, -0.8 * piece_size);
528 glNormal3f(0.0, 0.0, -1.0);
529 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
530 glVertex3f(0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
531 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
532 glVertex3f(0.35 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
533 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
534 glVertex3f(-0.35 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
535 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
536 glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
539 glNormal3f(0.0, -0.853282, 0.521450);
540 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
541 glVertex3f(-1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
542 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
543 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
544 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
545 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
546 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
547 glVertex3f(1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
549 glNormal3f(0.0, -0.983870, -0.178885);
550 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
551 glVertex3f(-1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
552 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
553 glVertex3f(1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
554 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
555 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
556 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
557 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
562 glNormal3f(-0.788443, 0.043237, -0.613587);
563 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
564 glVertex3f(-2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
565 glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
566 glVertex3f(-0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
567 glTexCoord2f(0.0f * piece_size, 15.0f / 17.8f * piece_size);
568 glVertex3f(0.0, 15.0 * piece_size, -3.6 * piece_size);
569 glTexCoord2f(0.0f * piece_size, 7.8f / 17.8f * piece_size);
570 glVertex3f(0.0, 7.8 * piece_size, -4.0 * piece_size);
573 glNormal3f(0.788443, 0.043237, -0.613587);
574 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
575 glVertex3f(2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
576 glTexCoord2f(0.0f * piece_size, 7.8f / 17.8f * piece_size);
577 glVertex3f(0.0, 7.8 * piece_size, -4.0 * piece_size);
578 glTexCoord2f(0.0f * piece_size, 15.0f / 17.8f * piece_size);
579 glVertex3f(0.0, 15.0 * piece_size, -3.6 * piece_size);
580 glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
581 glVertex3f(0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
585 glNormal3f(0.0, 0.584305, 0.811534);
586 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
587 glVertex3f(-0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
588 glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
589 glVertex3f(-2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
590 glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
591 glVertex3f(2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
592 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
593 glVertex3f(0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
596 glNormal3f(0.0, -0.422886, 0.906183);
597 glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
598 glVertex3f(-2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
599 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
600 glVertex3f(-2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
601 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
602 glVertex3f(2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
603 glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
604 glVertex3f(2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
607 glNormal3f(-0.969286, 0.231975, -0.081681);
608 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
609 glVertex3f(-0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
610 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
611 glVertex3f(-1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
612 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
613 glVertex3f(-2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
614 glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
615 glVertex3f(-2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
617 glNormal3f(-0.982872, 0.184289, 0.0);
618 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
619 glVertex3f(-1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
620 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
621 glVertex3f(-1.1422222222 * piece_size, 12.2 * piece_size,
622 -2.2222222222 * piece_size);
623 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
624 glVertex3f(-2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
625 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
626 glVertex3f(-2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
628 glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
629 glVertex3f(-0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
630 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
631 glVertex3f(-1.1422222222 * piece_size, 12.2 * piece_size,
632 -2.2222222222 * piece_size);
633 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
634 glVertex3f(-1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
635 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
636 glVertex3f(-0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
639 glNormal3f(0.969286, 0.231975, -0.081681);
640 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
641 glVertex3f(0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
642 glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
643 glVertex3f(2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
644 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
645 glVertex3f(2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
646 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
647 glVertex3f(1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
649 glNormal3f(0.982872, 0.184289, 0.0);
650 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
651 glVertex3f(1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
652 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
653 glVertex3f(2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
654 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
655 glVertex3f(2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
656 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
657 glVertex3f(1.1422222222 * piece_size, 12.2 * piece_size,
658 -2.2222222222 * piece_size);
660 glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
661 glVertex3f(0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
662 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
663 glVertex3f(0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
664 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
665 glVertex3f(1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
666 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
667 glVertex3f(1.1422222222 * piece_size, 12.2 * piece_size,
668 -2.2222222222 * piece_size);
672 glBegin(GL_TRIANGLES);
675 glNormal3f(0.819890, -0.220459, -0.528373);
676 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
677 glVertex3f(2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
678 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
679 glVertex3f(1.44 * piece_size, 5.8 * piece_size, -2.6 * piece_size);
680 glTexCoord2f(0.0f * piece_size, 7.8f / 17.8f * piece_size);
681 glVertex3f(0.0, 7.8 * piece_size, -4.0 * piece_size);
683 glNormal3f(0.0, -0.573462, -0.819232);
684 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
685 glVertex3f(1.44 * piece_size, 5.8 * piece_size, -2.6 * piece_size);
686 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
687 glVertex3f(-1.44 * piece_size, 5.8 * piece_size, -2.6 * piece_size);
688 glTexCoord2f(0.0f * piece_size, 7.8f / 17.8f * piece_size);
689 glVertex3f(0.0, 7.8 * piece_size, -4.0 * piece_size);
691 glNormal3f(-0.819890, -0.220459, -0.528373);
692 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
693 glVertex3f(-2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
694 glTexCoord2f(0.0f * piece_size, 7.8f / 17.8f * piece_size);
695 glVertex3f(0.0, 7.8 * piece_size, -4.0 * piece_size);
696 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
697 glVertex3f(-1.44 * piece_size, 5.8 * piece_size, -2.6 * piece_size);
700 glNormal3f(0.0, 0.0, 1.0);
701 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
702 glVertex3f(0.0, 14.0 * piece_size, 4.0 * piece_size);
703 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
704 glVertex3f(0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
705 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
706 glVertex3f(-0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
709 glNormal3f(-0.752714, -0.273714, 0.598750);
710 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
711 glVertex3f(0.0, 14.0 * piece_size, 4.0 * piece_size);
712 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
713 glVertex3f(-0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
714 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
715 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
717 glNormal3f(-0.957338, 0.031911, 0.287202);
718 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
719 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
720 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
721 glVertex3f(-0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
722 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
723 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
725 glNormal3f(-0.997785, 0.066519, 0.0);
726 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
727 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
728 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
729 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
730 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
731 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
734 glNormal3f(0.752714, -0.273714, 0.598750);
735 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
736 glVertex3f(0.0, 14.0 * piece_size, 4.0 * piece_size);
737 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
738 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
739 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
740 glVertex3f(0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
742 glNormal3f(0.957338, 0.031911, 0.287202);
743 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
744 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
745 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
746 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
747 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
748 glVertex3f(0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
750 glNormal3f(0.997785, 0.066519, 0.0);
751 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
752 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
753 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
754 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
755 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
756 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
759 glNormal3f(0.0, -0.992278, 0.124035);
760 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
761 glVertex3f(0.0, 14.0 * piece_size, 4.0 * piece_size);
762 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
763 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
764 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
765 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
768 glNormal3f(-0.854714, 0.484047, 0.187514);
769 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
770 glVertex3f(-0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
771 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
772 glVertex3f(-1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
773 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
774 glVertex3f(-0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
776 glNormal3f(-0.853747, 0.515805, -0.071146);
777 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
778 glVertex3f(-0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
779 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
780 glVertex3f(-1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
781 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
782 glVertex3f(-0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
784 glNormal3f(0.854714, 0.484047, 0.187514);
785 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
786 glVertex3f(0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
787 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
788 glVertex3f(0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
789 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
790 glVertex3f(1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
792 glNormal3f(0.853747, 0.515805, -0.071146);
793 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
794 glVertex3f(0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
795 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
796 glVertex3f(0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
797 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
798 glVertex3f(1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
801 glNormal3f(0.252982, -0.948683, -0.189737);
802 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
803 glVertex3f(0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
804 glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
805 glVertex3f(1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
806 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
807 glVertex3f(0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
809 glNormal3f(0.257603, -0.966012, 0.021467);
810 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
811 glVertex3f(0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
812 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
813 glVertex3f(0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
814 glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
815 glVertex3f(1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
817 glNormal3f(0.126745, -0.887214, 0.443607);
818 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
819 glVertex3f(0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
820 glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
821 glVertex3f(1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
822 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
823 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
825 glNormal3f(-0.252982, -0.948683, -0.189737);
826 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
827 glVertex3f(-0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
828 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
829 glVertex3f(-0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
830 glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
831 glVertex3f(-1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
833 glNormal3f(-0.257603, -0.966012, 0.021467);
834 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
835 glVertex3f(-0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
836 glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
837 glVertex3f(-1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
838 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
839 glVertex3f(-0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
841 glNormal3f(-0.126745, -0.887214, 0.443607);
842 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
843 glVertex3f(-0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
844 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
845 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
846 glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
847 glVertex3f(-1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
850 glNormal3f(0.0, 0.0, -1.0);
851 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
852 glVertex3f(0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
853 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
854 glVertex3f(0.61333334 * piece_size, 16.4 * piece_size, 0.2 * piece_size);
855 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
856 glVertex3f(0.82666667 * piece_size, 16.6 * piece_size, 0.2 * piece_size);
858 glNormal3f(0.000003, -0.668965, 0.743294);
859 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
860 glVertex3f(1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
861 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
862 glVertex3f(1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
863 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
864 glVertex3f(0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
866 glNormal3f(0.0, 0.0, -1.0);
867 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
868 glVertex3f(-0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
869 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
870 glVertex3f(-0.82666667 * piece_size, 16.6 * piece_size,
872 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
873 glVertex3f(-0.61333334 * piece_size, 16.4 * piece_size,
876 glNormal3f(-0.000003, -0.668965, 0.743294);
877 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
878 glVertex3f(-1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
879 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
880 glVertex3f(-0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
881 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
882 glVertex3f(-1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
886 glNormal3f(-0.997484, 0.070735, 0.004796);
887 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
888 glVertex3f(-0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
889 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
890 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
891 glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
892 glVertex3f(-1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
894 glNormal3f(-0.744437, 0.446663, -0.496292);
895 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
896 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
897 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
898 glVertex3f(-0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
899 glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
900 glVertex3f(-1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
903 glNormal3f(0.997484, 0.070735, 0.004796);
904 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
905 glVertex3f(0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
906 glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
907 glVertex3f(1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
908 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
909 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
911 glNormal3f(0.744437, 0.446663, -0.496292);
912 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
913 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
914 glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
915 glVertex3f(1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
916 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
917 glVertex3f(0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
922 void draw_bishop(void)
925 { 4.0, 4.0, 2.5, 2.5, 1.5, 1.2, 2.5, 1.7, 1.7, 2.2, 2.2,
926 1.0, 0.8, 1.2, 0.8, 0.0, 0.0
929 { 0.0, 2.0, 3.0, 4.0, 7.0, 9.4, 9.4, 11.0, 12.2, 13.2,
930 14.8, 16.0, 17.0, 17.7, 18.4, 18.4, 0.0
933 revolve_line(trace_r, trace_h, 0.0, ROT);
936 void draw_queen(void)
939 { 4.8, 4.8, 3.4, 3.4, 1.8, 1.4, 2.9, 1.8, 1.8, 2.0, 2.7,
940 2.4, 1.7, 0.95, 0.7, 0.9, 0.7, 0.0, 0.0
943 { 0.0, 2.2, 4.0, 5.0, 8.0, 11.8, 11.8, 13.6, 15.2, 17.8,
944 19.2, 20.0, 20.0, 20.8, 20.8, 21.4, 22.0, 22.0, 0.0
947 revolve_line(trace_r, trace_h, 0.0, ROT);
953 { 5.0, 5.0, 3.5, 3.5, 2.0, 1.4, 3.0, 2.0, 2.0, 2.8, 1.6,
957 { 0.0, 2.0, 3.0, 4.6, 7.6, 12.6, 12.6, 14.6, 15.6, 19.1,
958 19.7, 20.1, 20.1, 0.0
961 revolve_line(trace_r, trace_h, 0.0, ROT);
966 glNormal3f(0.0, 0.0, 1.0);
968 glVertex3f(-0.3 * piece_size, 20.1 * piece_size, 0.351 * piece_size);
969 glVertex3f(0.3 * piece_size, 20.1 * piece_size, 0.35 * piece_size);
970 glVertex3f(0.3 * piece_size, 23.1 * piece_size, 0.35 * piece_size);
971 glVertex3f(-0.3 * piece_size, 23.1 * piece_size, 0.35 * piece_size);
973 glVertex3f(-0.9 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
974 glVertex3f(-0.3 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
975 glVertex3f(-0.3 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
976 glVertex3f(-0.9 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
978 glVertex3f(0.9 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
979 glVertex3f(0.9 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
980 glVertex3f(0.3 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
981 glVertex3f(0.3 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
984 glNormal3f(0.0, 0.0, -1.0);
986 glVertex3f(0.3 * piece_size, 20.1 * piece_size, -0.35 * piece_size);
987 glVertex3f(-0.3 * piece_size, 20.1 * piece_size, -0.35 * piece_size);
988 glVertex3f(-0.3 * piece_size, 23.1 * piece_size, -0.35 * piece_size);
989 glVertex3f(0.3 * piece_size, 23.1 * piece_size, -0.35 * piece_size);
991 glVertex3f(-0.3 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
992 glVertex3f(-0.9 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
993 glVertex3f(-0.9 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
994 glVertex3f(-0.3 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
996 glVertex3f(0.3 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
997 glVertex3f(0.3 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
998 glVertex3f(0.9 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
999 glVertex3f(0.9 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
1002 glNormal3f(-1.0, 0.0, 0.0);
1004 glVertex3f(-0.9 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
1005 glVertex3f(-0.9 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
1006 glVertex3f(-0.9 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
1007 glVertex3f(-0.9 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
1009 glVertex3f(-0.3 * piece_size, 20.1 * piece_size, 0.35 * piece_size);
1010 glVertex3f(-0.3 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
1011 glVertex3f(-0.3 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
1012 glVertex3f(-0.3 * piece_size, 20.1 * piece_size, -0.35 * piece_size);
1014 glVertex3f(-0.3 * piece_size, 22.1 * piece_size, 0.3 * piece_size);
1015 glVertex3f(-0.3 * piece_size, 23.1 * piece_size, 0.3 * piece_size);
1016 glVertex3f(-0.3 * piece_size, 23.1 * piece_size, -0.3 * piece_size);
1017 glVertex3f(-0.3 * piece_size, 22.1 * piece_size, -0.3 * piece_size);
1020 glNormal3f(1.0, 0.0, 0.0);
1022 glVertex3f(0.9 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
1023 glVertex3f(0.9 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
1024 glVertex3f(0.9 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
1025 glVertex3f(0.9 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
1027 glVertex3f(0.3 * piece_size, 20.1 * piece_size, -0.35 * piece_size);
1028 glVertex3f(0.3 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
1029 glVertex3f(0.3 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
1030 glVertex3f(0.3 * piece_size, 20.1 * piece_size, 0.35 * piece_size);
1032 glVertex3f(0.3 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
1033 glVertex3f(0.3 * piece_size, 23.1 * piece_size, -0.35 * piece_size);
1034 glVertex3f(0.3 * piece_size, 23.1 * piece_size, 0.35 * piece_size);
1035 glVertex3f(0.3 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
1038 glNormal3f(0.0, 1.0, 0.0);
1040 glVertex3f(-0.9 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
1041 glVertex3f(-0.9 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
1042 glVertex3f(-0.3 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
1043 glVertex3f(-0.3 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
1045 glVertex3f(0.3 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
1046 glVertex3f(0.3 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
1047 glVertex3f(0.9 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
1048 glVertex3f(0.9 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
1050 glVertex3f(-0.3 * piece_size, 23.1 * piece_size, -0.35 * piece_size);
1051 glVertex3f(-0.3 * piece_size, 23.1 * piece_size, 0.35 * piece_size);
1052 glVertex3f(0.3 * piece_size, 23.1 * piece_size, 0.35 * piece_size);
1053 glVertex3f(0.3 * piece_size, 23.1 * piece_size, -0.35 * piece_size);