2 * models for the xss chess screensavers
5 * glChess - A 3D chess interface
7 * Copyright (C) 2002 Robert Ancell <bob27@users.sourceforge.net>
8 * Michael Duelli <duelli@users.sourceforge.net>
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 /* chessmodels.c: Contains the code for piece model creation */
32 #include "chessmodels.h"
36 #define piece_size 0.095
39 /* Make a revolved piece */
40 void revolve_line(double *trace_r, double *trace_h, double max_ih, int rot) {
41 double theta, norm_theta, sin_theta, cos_theta;
42 double norm_ptheta = 0.0, sin_ptheta = 0.0, cos_ptheta = 1.0;
43 double radius, pradius;
44 double max_height = max_ih, height, pheight;
47 double dtheta = (2.0*M_PI) / rot;
49 /* Get the number of points */
51 fabs(trace_r[npoints]) > EPSILON || fabs(trace_h[npoints]) > EPSILON;
54 /* If less than two points, can not revolve */
58 /* If the max_height hasn't been defined, find it */
59 if(max_height < EPSILON)
60 for(p = 0; p < npoints; ++p)
61 if(max_height < trace_h[p])
62 max_height = trace_h[p];
64 /* Draw the revolution */
65 for(theta = dtheta; rot > 0; --rot) {
66 sin_theta = sin(theta);
67 cos_theta = cos(theta);
68 norm_theta = theta / (2.0 * M_PI);
69 pradius = trace_r[0] * piece_size;
70 pheight = trace_h[0] * piece_size;
72 for(p = 1; p < npoints; ++p) {
73 radius = trace_r[p] * piece_size;
74 height = trace_h[p] * piece_size;
76 /* Get the normalized lengths of the normal vector */
77 dx = radius - pradius;
78 dy = height - pheight;
79 len = sqrt(dx*dx + dy*dy);
83 /* If only triangles required */
84 if (fabs(radius) < EPSILON) {
85 glBegin(GL_TRIANGLES);
87 glNormal3f(dy * sin_ptheta, -dx, dy * cos_ptheta);
88 glTexCoord2f(norm_ptheta, pheight / max_height);
89 glVertex3f(pradius * sin_ptheta, pheight, pradius * cos_ptheta);
91 glNormal3f(dy * sin_theta, -dx, dy * cos_theta);
92 glTexCoord2f(norm_theta, pheight / max_height);
93 glVertex3f(pradius * sin_theta, pheight, pradius * cos_theta);
95 glTexCoord2f(0.5 * (norm_theta + norm_ptheta),
97 glVertex3f(0.0, height, 0.0);
105 glNormal3f(dy * sin_ptheta, -dx, dy * cos_ptheta);
106 glTexCoord2f(norm_ptheta, pheight / max_height);
107 glVertex3f(pradius * sin_ptheta, pheight, pradius * cos_ptheta);
109 glNormal3f(dy * sin_theta, -dx, dy * cos_theta);
110 glTexCoord2f(norm_theta, pheight / max_height);
111 glVertex3f(pradius * sin_theta, pheight, pradius * cos_theta);
113 glTexCoord2f(norm_theta, height / max_height);
114 glVertex3f(radius * sin_theta, height, radius * cos_theta);
116 glNormal3f(dy * sin_ptheta, -dx, dy * cos_ptheta);
117 glTexCoord2f(norm_ptheta, height / max_height);
118 glVertex3f(radius * sin_ptheta, height, radius * cos_ptheta);
127 sin_ptheta = sin_theta;
128 cos_ptheta = cos_theta;
129 norm_ptheta = norm_theta;
134 void gen_model_lists(void) {
135 glNewList(KING, GL_COMPILE);
139 glNewList(QUEEN, GL_COMPILE);
143 glNewList(BISHOP, GL_COMPILE);
147 glNewList(KNIGHT, GL_COMPILE);
151 glNewList(ROOK, GL_COMPILE);
155 glNewList(PAWN, GL_COMPILE);
160 void draw_pawn(void) {
162 { 3.5, 3.5, 2.5, 2.5, 1.5, 1.0, 1.8, 1.0, 2.0, 1.0, 0.0, 0.0 };
164 { 0.0, 2.0, 3.0, 4.0, 6.0, 8.8, 8.8, 9.2, 11.6, 13.4, 13.4, 0.0 };
166 revolve_line(trace_r, trace_h, 0.0, ROT);
172 { 3.8, 3.8, 2.6, 2.0, 2.8, 2.8, 2.2, 2.2, 0.0, 0.0 };
174 { 0.0, 2.0, 5.0, 10.2, 10.2, 13.6, 13.6, 13.0, 13.0, 0.0 };
176 revolve_line(trace_r, trace_h, 0.0, ROT);
179 void draw_knight(void)
181 double trace_r[] = { 4.1, 4.1, 2.0, 2.0, 2.6, 0.0 };
182 double trace_h[] = { 0.0, 2.0, 3.6, 4.8, 5.8, 0.0 };
185 revolve_line(trace_r, trace_h, 17.8, ROT);
187 /* Non revolved pieces */
192 glNormal3f(0.0, -1.0, 0.0);
193 glTexCoord2f(0.0, 5.8 / 17.8 * piece_size);
194 glVertex3f(2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
195 glTexCoord2f(0.0, 5.8 / 17.8 * piece_size);
196 glVertex3f(-2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
197 glTexCoord2f(0.0, 5.8 / 17.8 * piece_size);
198 glVertex3f(-2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
199 glTexCoord2f(0.0, 5.8 / 17.8 * piece_size);
200 glVertex3f(2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
202 /* Upper edge of nose */
203 glNormal3f(0.0, 0.707107, 0.707107);
204 glTexCoord2f(0.0, 16.2 / 17.8 * piece_size);
205 glVertex3f(0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
206 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
207 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
208 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
209 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
210 glTexCoord2f(0.0, 16.2 / 17.8 * piece_size);
211 glVertex3f(-0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
214 glNormal3f(0.0, 1.0, 0.0);
216 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
217 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
218 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
219 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
220 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
221 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
222 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
223 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
225 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
226 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
227 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
228 glVertex3f(0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
229 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
230 glVertex3f(-0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
231 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
232 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
234 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
235 glVertex3f(0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
236 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
237 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
238 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
239 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
240 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
241 glVertex3f(-0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
243 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
244 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
245 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
246 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
247 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
248 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
249 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
250 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
252 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
253 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
254 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
255 glVertex3f(0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
256 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
257 glVertex3f(-0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
258 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
259 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
261 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
262 glVertex3f(0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
263 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
264 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
265 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
266 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
267 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
268 glVertex3f(-0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
270 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
271 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
272 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
273 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
274 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
275 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
276 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
277 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
280 glNormal3f(0.0, 0.0, -1.0);
281 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
282 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
283 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
284 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
285 glTexCoord2f(0.0, 15.0 / 17.8 * piece_size);
286 glVertex3f(1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
287 glTexCoord2f(0.0, 15.0 / 17.8 * piece_size);
288 glVertex3f(-1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
291 glNormal3f(0.0, 0.0, -1.0);
292 glTexCoord2f(0.0, 15.0 / 17.8 * piece_size);
293 glVertex3f(-1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
294 glTexCoord2f(0.0, 15.0 / 17.8 * piece_size);
295 glVertex3f(1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
296 glTexCoord2f(0.0, 14.8 / 17.8 * piece_size);
297 glVertex3f(0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
298 glTexCoord2f(0.0, 14.8 / 17.8 * piece_size);
299 glVertex3f(-0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
301 /* Right side of face */
302 glNormal3f(-0.933878, 0.128964, -0.333528);
303 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
304 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
305 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
306 glVertex3f(-0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
307 glTexCoord2f(0.0, 14.0 / 17.8 * piece_size);
308 glVertex3f(-1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
309 glTexCoord2f(0.0, 13.8 / 17.8 * piece_size);
310 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
312 glNormal3f(-0.966676, 0.150427, 0.207145);
313 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
314 glVertex3f(-0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
315 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
316 glVertex3f(-0.8 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
317 glTexCoord2f(0.0, 13.8 / 17.8 * piece_size);
318 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
319 glTexCoord2f(0.0, 14.0 / 17.8 * piece_size);
320 glVertex3f(-1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
322 /* (above and below eye) */
323 glNormal3f(-0.934057, 0.124541, -0.334704);
325 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
326 glVertex3f(-0.82666667 * piece_size, 16.6 * piece_size,
328 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
329 glVertex3f(-0.8 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
330 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
331 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
332 glTexCoord2f(0.0, 16.6 / 17.8 * piece_size);
333 glVertex3f(-1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
335 glTexCoord2f(0.0, 13.8 / 17.8 * piece_size);
336 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
337 glTexCoord2f(0.0, 16.2 / 17.8 * piece_size);
338 glVertex3f(-0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
339 glTexCoord2f(0.0, 16.2 / 17.8 * piece_size);
340 glVertex3f(-1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
341 glTexCoord2f(0.0, 13.6 / 17.8 * piece_size);
342 glVertex3f(-1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
344 glTexCoord2f(0.0, 13.6 / 17.8 * piece_size);
345 glVertex3f(-1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
346 glTexCoord2f(0.0, 16.2 / 17.8 * piece_size);
347 glVertex3f(-1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
348 glTexCoord2f(0.0, 15.8 / 17.8 * piece_size);
349 glVertex3f(-1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
350 glTexCoord2f(0.0, 14.0 / 17.8 * piece_size);
351 glVertex3f(-0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
353 glNormal3f(-0.970801, -0.191698, -0.144213);
354 glTexCoord2f(0.0, 16.8 / 17.8 * piece_size);
355 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
356 glTexCoord2f(0.0, 14.8 / 17.8 * piece_size);
357 glVertex3f(-0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
358 glTexCoord2f(0.0, 14.0 / 17.8 * piece_size);
359 glVertex3f(-0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
360 glTexCoord2f(0.0, 15.8 / 17.8 * piece_size);
361 glVertex3f(-1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
363 glNormal3f(-0.975610, 0.219512, 0.0);
364 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
365 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
366 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
367 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
368 glTexCoord2f(0.0f * piece_size, 15.0f / 17.8f * piece_size);
369 glVertex3f(-1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
370 glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
371 glVertex3f(-0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
373 /* Left side of face */
374 glNormal3f(0.933878, 0.128964, -0.333528);
375 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
376 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
377 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
378 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
379 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
380 glVertex3f(1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
381 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
382 glVertex3f(0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
384 glNormal3f(0.966676, 0.150427, 0.207145);
385 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
386 glVertex3f(0.5 * piece_size, 16.8 * piece_size, 1.6 * piece_size);
387 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
388 glVertex3f(1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
389 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
390 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
391 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
392 glVertex3f(0.8 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
394 /* (above and below eye) */
395 glNormal3f(0.934057, 0.124541, -0.334704);
397 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
398 glVertex3f(0.82666667 * piece_size, 16.6 * piece_size, 0.2 * piece_size);
399 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
400 glVertex3f(1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
401 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
402 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
403 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
404 glVertex3f(0.8 * piece_size, 16.8 * piece_size, 0.2 * piece_size);
406 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
407 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
408 glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
409 glVertex3f(1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
410 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
411 glVertex3f(1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
412 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
413 glVertex3f(0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
415 glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
416 glVertex3f(1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
417 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
418 glVertex3f(0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
419 glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
420 glVertex3f(1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
421 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
422 glVertex3f(1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
424 glNormal3f(0.970801, -0.191698, -0.144213);
425 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
426 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
427 glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
428 glVertex3f(1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
429 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
430 glVertex3f(0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
431 glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
432 glVertex3f(0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
434 glNormal3f(0.975610, -0.219512, 0.0);
435 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
436 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
437 glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
438 glVertex3f(0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
439 glTexCoord2f(0.0f * piece_size, 15.0f / 17.8f * piece_size);
440 glVertex3f(1.0 * piece_size, 15.0 * piece_size, -4.4 * piece_size);
441 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
442 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
445 glNormal3f(0.598246, 0.797665, 0.076372);
446 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
447 glVertex3f(0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
448 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
449 glVertex3f(1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
450 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
451 glVertex3f(0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
452 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
453 glVertex3f(0.61333334 * piece_size, 16.4 * piece_size, 0.2 * piece_size);
455 glNormal3f(0.670088, -0.714758, 0.200256);
456 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
457 glVertex3f(0.61333334 * piece_size, 16.4 * piece_size, 0.2 * piece_size);
458 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
459 glVertex3f(0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
460 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
461 glVertex3f(1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
462 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
463 glVertex3f(0.82666667 * piece_size, 16.6 * piece_size, 0.2 * piece_size);
465 glNormal3f(-0.598246, 0.797665, 0.076372);
466 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
467 glVertex3f(-0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
468 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
469 glVertex3f(-0.61333334 * piece_size, 16.4 * piece_size,
471 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
472 glVertex3f(-0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
473 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
474 glVertex3f(-1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
476 glNormal3f(-0.670088, -0.714758, 0.200256);
477 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
478 glVertex3f(-0.61333334 * piece_size, 16.4 * piece_size,
480 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
481 glVertex3f(-0.82666667 * piece_size, 16.6 * piece_size,
483 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
484 glVertex3f(-1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
485 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
486 glVertex3f(-0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
489 glNormal3f(0.0, 1.0, 0.0);
490 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
491 glVertex3f(0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
492 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
493 glVertex3f(0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
494 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
495 glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
496 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
497 glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
499 glNormal3f(1.0, 0.0, 0.0);
500 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
501 glVertex3f(0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
502 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
503 glVertex3f(0.35 * piece_size, 16.8 * piece_size, -0.8 * piece_size);
504 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
505 glVertex3f(0.35 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
506 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
507 glVertex3f(0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
509 glNormal3f(-1.0, 0.0, 0.0);
510 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
511 glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
512 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
513 glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
514 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
515 glVertex3f(-0.35 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
516 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
517 glVertex3f(-0.35 * piece_size, 16.8 * piece_size, -0.8 * piece_size);
519 glNormal3f(0.0, 0.0, 1.0);
520 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
521 glVertex3f(0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
522 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
523 glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -0.8 * piece_size);
524 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
525 glVertex3f(-0.35 * piece_size, 16.8 * piece_size, -0.8 * piece_size);
526 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
527 glVertex3f(0.35 * piece_size, 16.8 * piece_size, -0.8 * piece_size);
529 glNormal3f(0.0, 0.0, -1.0);
530 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
531 glVertex3f(0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
532 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
533 glVertex3f(0.35 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
534 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
535 glVertex3f(-0.35 * piece_size, 16.8 * piece_size, -4.4 * piece_size);
536 glTexCoord2f(0.0f * piece_size, 17.8f / 17.8f * piece_size);
537 glVertex3f(-0.35 * piece_size, 17.8 * piece_size, -4.4 * piece_size);
540 glNormal3f(0.0, -0.853282, 0.521450);
541 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
542 glVertex3f(-1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
543 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
544 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
545 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
546 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
547 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
548 glVertex3f(1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
550 glNormal3f(0.0, -0.983870, -0.178885);
551 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
552 glVertex3f(-1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
553 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
554 glVertex3f(1.0 * piece_size, 14.0 * piece_size, 1.3 * piece_size);
555 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
556 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
557 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
558 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
563 glNormal3f(-0.788443, 0.043237, -0.613587);
564 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
565 glVertex3f(-2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
566 glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
567 glVertex3f(-0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
568 glTexCoord2f(0.0f * piece_size, 15.0f / 17.8f * piece_size);
569 glVertex3f(0.0, 15.0 * piece_size, -3.6 * piece_size);
570 glTexCoord2f(0.0f * piece_size, 7.8f / 17.8f * piece_size);
571 glVertex3f(0.0, 7.8 * piece_size, -4.0 * piece_size);
574 glNormal3f(0.788443, 0.043237, -0.613587);
575 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
576 glVertex3f(2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
577 glTexCoord2f(0.0f * piece_size, 7.8f / 17.8f * piece_size);
578 glVertex3f(0.0, 7.8 * piece_size, -4.0 * piece_size);
579 glTexCoord2f(0.0f * piece_size, 15.0f / 17.8f * piece_size);
580 glVertex3f(0.0, 15.0 * piece_size, -3.6 * piece_size);
581 glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
582 glVertex3f(0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
586 glNormal3f(0.0, 0.584305, 0.811534);
587 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
588 glVertex3f(-0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
589 glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
590 glVertex3f(-2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
591 glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
592 glVertex3f(2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
593 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
594 glVertex3f(0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
597 glNormal3f(0.0, -0.422886, 0.906183);
598 glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
599 glVertex3f(-2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
600 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
601 glVertex3f(-2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
602 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
603 glVertex3f(2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
604 glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
605 glVertex3f(2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
608 glNormal3f(-0.969286, 0.231975, -0.081681);
609 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
610 glVertex3f(-0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
611 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
612 glVertex3f(-1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
613 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
614 glVertex3f(-2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
615 glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
616 glVertex3f(-2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
618 glNormal3f(-0.982872, 0.184289, 0.0);
619 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
620 glVertex3f(-1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
621 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
622 glVertex3f(-1.1422222222 * piece_size, 12.2 * piece_size,
623 -2.2222222222 * piece_size);
624 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
625 glVertex3f(-2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
626 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
627 glVertex3f(-2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
629 glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
630 glVertex3f(-0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
631 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
632 glVertex3f(-1.1422222222 * piece_size, 12.2 * piece_size,
633 -2.2222222222 * piece_size);
634 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
635 glVertex3f(-1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
636 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
637 glVertex3f(-0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
640 glNormal3f(0.969286, 0.231975, -0.081681);
641 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
642 glVertex3f(0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
643 glTexCoord2f(0.0f * piece_size, 8.8f / 17.8f * piece_size);
644 glVertex3f(2.0 * piece_size, 8.8 * piece_size, 4.0 * piece_size);
645 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
646 glVertex3f(2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
647 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
648 glVertex3f(1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
650 glNormal3f(0.982872, 0.184289, 0.0);
651 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
652 glVertex3f(1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
653 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
654 glVertex3f(2.6 * piece_size, 5.8 * piece_size, 2.6 * piece_size);
655 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
656 glVertex3f(2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
657 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
658 glVertex3f(1.1422222222 * piece_size, 12.2 * piece_size,
659 -2.2222222222 * piece_size);
661 glTexCoord2f(0.0f * piece_size, 14.8f / 17.8f * piece_size);
662 glVertex3f(0.55 * piece_size, 14.8 * piece_size, -2.8 * piece_size);
663 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
664 glVertex3f(0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
665 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
666 glVertex3f(1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
667 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
668 glVertex3f(1.1422222222 * piece_size, 12.2 * piece_size,
669 -2.2222222222 * piece_size);
673 glBegin(GL_TRIANGLES);
676 glNormal3f(0.819890, -0.220459, -0.528373);
677 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
678 glVertex3f(2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
679 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
680 glVertex3f(1.44 * piece_size, 5.8 * piece_size, -2.6 * piece_size);
681 glTexCoord2f(0.0f * piece_size, 7.8f / 17.8f * piece_size);
682 glVertex3f(0.0, 7.8 * piece_size, -4.0 * piece_size);
684 glNormal3f(0.0, -0.573462, -0.819232);
685 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
686 glVertex3f(1.44 * piece_size, 5.8 * piece_size, -2.6 * piece_size);
687 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
688 glVertex3f(-1.44 * piece_size, 5.8 * piece_size, -2.6 * piece_size);
689 glTexCoord2f(0.0f * piece_size, 7.8f / 17.8f * piece_size);
690 glVertex3f(0.0, 7.8 * piece_size, -4.0 * piece_size);
692 glNormal3f(-0.819890, -0.220459, -0.528373);
693 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
694 glVertex3f(-2.6 * piece_size, 5.8 * piece_size, -0.8 * piece_size);
695 glTexCoord2f(0.0f * piece_size, 7.8f / 17.8f * piece_size);
696 glVertex3f(0.0, 7.8 * piece_size, -4.0 * piece_size);
697 glTexCoord2f(0.0f * piece_size, 5.8f / 17.8f * piece_size);
698 glVertex3f(-1.44 * piece_size, 5.8 * piece_size, -2.6 * piece_size);
701 glNormal3f(0.0, 0.0, 1.0);
702 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
703 glVertex3f(0.0, 14.0 * piece_size, 4.0 * piece_size);
704 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
705 glVertex3f(0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
706 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
707 glVertex3f(-0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
710 glNormal3f(-0.752714, -0.273714, 0.598750);
711 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
712 glVertex3f(0.0, 14.0 * piece_size, 4.0 * piece_size);
713 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
714 glVertex3f(-0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
715 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
716 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
718 glNormal3f(-0.957338, 0.031911, 0.287202);
719 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
720 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
721 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
722 glVertex3f(-0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
723 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
724 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
726 glNormal3f(-0.997785, 0.066519, 0.0);
727 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
728 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
729 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
730 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
731 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
732 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
735 glNormal3f(0.752714, -0.273714, 0.598750);
736 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
737 glVertex3f(0.0, 14.0 * piece_size, 4.0 * piece_size);
738 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
739 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
740 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
741 glVertex3f(0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
743 glNormal3f(0.957338, 0.031911, 0.287202);
744 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
745 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
746 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
747 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
748 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
749 glVertex3f(0.8 * piece_size, 16.2 * piece_size, 4.0 * piece_size);
751 glNormal3f(0.997785, 0.066519, 0.0);
752 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
753 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
754 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
755 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.0 * piece_size);
756 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
757 glVertex3f(1.0 * piece_size, 16.8 * piece_size, 3.4 * piece_size);
760 glNormal3f(0.0, -0.992278, 0.124035);
761 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
762 glVertex3f(0.0, 14.0 * piece_size, 4.0 * piece_size);
763 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
764 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
765 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
766 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 2.4 * piece_size);
769 glNormal3f(-0.854714, 0.484047, 0.187514);
770 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
771 glVertex3f(-0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
772 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
773 glVertex3f(-1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
774 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
775 glVertex3f(-0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
777 glNormal3f(-0.853747, 0.515805, -0.071146);
778 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
779 glVertex3f(-0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
780 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
781 glVertex3f(-1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
782 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
783 glVertex3f(-0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
785 glNormal3f(0.854714, 0.484047, 0.187514);
786 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
787 glVertex3f(0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
788 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
789 glVertex3f(0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
790 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
791 glVertex3f(1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
793 glNormal3f(0.853747, 0.515805, -0.071146);
794 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
795 glVertex3f(0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
796 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
797 glVertex3f(0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
798 glTexCoord2f(0.0f * piece_size, 12.2f / 17.8f * piece_size);
799 glVertex3f(1.4 * piece_size, 12.2 * piece_size, -0.4 * piece_size);
802 glNormal3f(0.252982, -0.948683, -0.189737);
803 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
804 glVertex3f(0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
805 glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
806 glVertex3f(1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
807 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
808 glVertex3f(0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
810 glNormal3f(0.257603, -0.966012, 0.021467);
811 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
812 glVertex3f(0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
813 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
814 glVertex3f(0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
815 glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
816 glVertex3f(1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
818 glNormal3f(0.126745, -0.887214, 0.443607);
819 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
820 glVertex3f(0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
821 glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
822 glVertex3f(1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
823 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
824 glVertex3f(1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
826 glNormal3f(-0.252982, -0.948683, -0.189737);
827 glTexCoord2f(0.0f * piece_size, 14.0f / 17.8f * piece_size);
828 glVertex3f(-0.6 * piece_size, 14.0 * piece_size, -1.4 * piece_size);
829 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
830 glVertex3f(-0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
831 glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
832 glVertex3f(-1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
834 glNormal3f(-0.257603, -0.966012, 0.021467);
835 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
836 glVertex3f(-0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
837 glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
838 glVertex3f(-1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
839 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
840 glVertex3f(-0.45 * piece_size, 13.8 * piece_size, -0.2 * piece_size);
842 glNormal3f(-0.126745, -0.887214, 0.443607);
843 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
844 glVertex3f(-0.5 * piece_size, 13.8 * piece_size, 0.4 * piece_size);
845 glTexCoord2f(0.0f * piece_size, 13.8f / 17.8f * piece_size);
846 glVertex3f(-1.2 * piece_size, 13.8 * piece_size, 0.2 * piece_size);
847 glTexCoord2f(0.0f * piece_size, 13.6f / 17.8f * piece_size);
848 glVertex3f(-1.2 * piece_size, 13.6 * piece_size, -0.2 * piece_size);
851 glNormal3f(0.0, 0.0, -1.0);
852 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
853 glVertex3f(0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
854 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
855 glVertex3f(0.61333334 * piece_size, 16.4 * piece_size, 0.2 * piece_size);
856 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
857 glVertex3f(0.82666667 * piece_size, 16.6 * piece_size, 0.2 * piece_size);
859 glNormal3f(0.000003, -0.668965, 0.743294);
860 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
861 glVertex3f(1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
862 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
863 glVertex3f(1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
864 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
865 glVertex3f(0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
867 glNormal3f(0.0, 0.0, -1.0);
868 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
869 glVertex3f(-0.88 * piece_size, 16.2 * piece_size, 0.2 * piece_size);
870 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
871 glVertex3f(-0.82666667 * piece_size, 16.6 * piece_size,
873 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
874 glVertex3f(-0.61333334 * piece_size, 16.4 * piece_size,
877 glNormal3f(-0.000003, -0.668965, 0.743294);
878 glTexCoord2f(0.0f * piece_size, 16.2f / 17.8f * piece_size);
879 glVertex3f(-1.0 * piece_size, 16.2 * piece_size, -0.74 * piece_size);
880 glTexCoord2f(0.0f * piece_size, 16.4f / 17.8f * piece_size);
881 glVertex3f(-0.8 * piece_size, 16.4 * piece_size, -0.56 * piece_size);
882 glTexCoord2f(0.0f * piece_size, 16.6f / 17.8f * piece_size);
883 glVertex3f(-1.0 * piece_size, 16.6 * piece_size, -0.38 * piece_size);
887 glNormal3f(-0.997484, 0.070735, 0.004796);
888 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
889 glVertex3f(-0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
890 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
891 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
892 glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
893 glVertex3f(-1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
895 glNormal3f(-0.744437, 0.446663, -0.496292);
896 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
897 glVertex3f(-1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
898 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
899 glVertex3f(-0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
900 glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
901 glVertex3f(-1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
904 glNormal3f(0.997484, 0.070735, 0.004796);
905 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
906 glVertex3f(0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
907 glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
908 glVertex3f(1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
909 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
910 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -2.0 * piece_size);
912 glNormal3f(0.744437, 0.446663, -0.496292);
913 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
914 glVertex3f(1.0 * piece_size, 16.8 * piece_size, -0.2 * piece_size);
915 glTexCoord2f(0.0f * piece_size, 15.8f / 17.8f * piece_size);
916 glVertex3f(1.0 * piece_size, 15.8 * piece_size, -1.1 * piece_size);
917 glTexCoord2f(0.0f * piece_size, 16.8f / 17.8f * piece_size);
918 glVertex3f(0.4 * piece_size, 16.8 * piece_size, -1.1 * piece_size);
923 void draw_bishop(void)
926 { 4.0, 4.0, 2.5, 2.5, 1.5, 1.2, 2.5, 1.7, 1.7, 2.2, 2.2,
927 1.0, 0.8, 1.2, 0.8, 0.0, 0.0
930 { 0.0, 2.0, 3.0, 4.0, 7.0, 9.4, 9.4, 11.0, 12.2, 13.2,
931 14.8, 16.0, 17.0, 17.7, 18.4, 18.4, 0.0
934 revolve_line(trace_r, trace_h, 0.0, ROT);
937 void draw_queen(void)
940 { 4.8, 4.8, 3.4, 3.4, 1.8, 1.4, 2.9, 1.8, 1.8, 2.0, 2.7,
941 2.4, 1.7, 0.95, 0.7, 0.9, 0.7, 0.0, 0.0
944 { 0.0, 2.2, 4.0, 5.0, 8.0, 11.8, 11.8, 13.6, 15.2, 17.8,
945 19.2, 20.0, 20.0, 20.8, 20.8, 21.4, 22.0, 22.0, 0.0
948 revolve_line(trace_r, trace_h, 0.0, ROT);
954 { 5.0, 5.0, 3.5, 3.5, 2.0, 1.4, 3.0, 2.0, 2.0, 2.8, 1.6,
958 { 0.0, 2.0, 3.0, 4.6, 7.6, 12.6, 12.6, 14.6, 15.6, 19.1,
959 19.7, 20.1, 20.1, 0.0
962 revolve_line(trace_r, trace_h, 0.0, ROT);
967 glNormal3f(0.0, 0.0, 1.0);
969 glVertex3f(-0.3 * piece_size, 20.1 * piece_size, 0.351 * piece_size);
970 glVertex3f(0.3 * piece_size, 20.1 * piece_size, 0.35 * piece_size);
971 glVertex3f(0.3 * piece_size, 23.1 * piece_size, 0.35 * piece_size);
972 glVertex3f(-0.3 * piece_size, 23.1 * piece_size, 0.35 * piece_size);
974 glVertex3f(-0.9 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
975 glVertex3f(-0.3 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
976 glVertex3f(-0.3 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
977 glVertex3f(-0.9 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
979 glVertex3f(0.9 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
980 glVertex3f(0.9 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
981 glVertex3f(0.3 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
982 glVertex3f(0.3 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
985 glNormal3f(0.0, 0.0, -1.0);
987 glVertex3f(0.3 * piece_size, 20.1 * piece_size, -0.35 * piece_size);
988 glVertex3f(-0.3 * piece_size, 20.1 * piece_size, -0.35 * piece_size);
989 glVertex3f(-0.3 * piece_size, 23.1 * piece_size, -0.35 * piece_size);
990 glVertex3f(0.3 * piece_size, 23.1 * piece_size, -0.35 * piece_size);
992 glVertex3f(-0.3 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
993 glVertex3f(-0.9 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
994 glVertex3f(-0.9 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
995 glVertex3f(-0.3 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
997 glVertex3f(0.3 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
998 glVertex3f(0.3 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
999 glVertex3f(0.9 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
1000 glVertex3f(0.9 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
1003 glNormal3f(-1.0, 0.0, 0.0);
1005 glVertex3f(-0.9 * piece_size, 21.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, 22.1 * piece_size, -0.35 * piece_size);
1008 glVertex3f(-0.9 * piece_size, 21.1 * piece_size, -0.35 * piece_size);
1010 glVertex3f(-0.3 * piece_size, 20.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, 21.1 * piece_size, -0.35 * piece_size);
1013 glVertex3f(-0.3 * piece_size, 20.1 * piece_size, -0.35 * piece_size);
1015 glVertex3f(-0.3 * piece_size, 22.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, 23.1 * piece_size, -0.3 * piece_size);
1018 glVertex3f(-0.3 * piece_size, 22.1 * piece_size, -0.3 * piece_size);
1021 glNormal3f(1.0, 0.0, 0.0);
1023 glVertex3f(0.9 * piece_size, 21.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, 22.1 * piece_size, 0.35 * piece_size);
1026 glVertex3f(0.9 * piece_size, 21.1 * piece_size, 0.35 * piece_size);
1028 glVertex3f(0.3 * piece_size, 20.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, 21.1 * piece_size, 0.35 * piece_size);
1031 glVertex3f(0.3 * piece_size, 20.1 * piece_size, 0.35 * piece_size);
1033 glVertex3f(0.3 * piece_size, 22.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, 23.1 * piece_size, 0.35 * piece_size);
1036 glVertex3f(0.3 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
1039 glNormal3f(0.0, 1.0, 0.0);
1041 glVertex3f(-0.9 * piece_size, 22.1 * piece_size, -0.35 * piece_size);
1042 glVertex3f(-0.9 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
1043 glVertex3f(-0.3 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
1044 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.3 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
1048 glVertex3f(0.9 * piece_size, 22.1 * piece_size, 0.35 * piece_size);
1049 glVertex3f(0.9 * piece_size, 22.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);
1054 glVertex3f(0.3 * piece_size, 23.1 * piece_size, -0.35 * piece_size);