More glext-e fun. Do you love it? DO YA!!
[crack-attack.git] / src / obj_swapper.cxx
blob22454dd48752e971c4abe81c7400bf090af51390
1 /*
2 * swapper.c_xx
3 * Daniel Nelson 9/22/0
5 * Copyright (C) 2000 Daniel Nelson
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (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.
21 * Daniel Nelson - aluminumangel.org
22 * 174 W. 18th Ave.
23 * Columbus, OH 43210
25 * Generates the swapper's displa_y list.
28 #include <GL/glut.h>
30 #include "glext.h"
32 using namespace std;
34 #include "Game.h"
35 #include "Displayer.h"
37 // swapper's geometric constants
38 #define SG_A (0.1f)
39 #define SG_B (2.0f * SG_A / 2.414214f)
40 #define SG_C (0.8f)
41 #define SG_D (0.1f)
42 #define SG_E (1.0f)
43 #define SG_F (0.4f)
44 #define SG_H (1.0f)
45 #define SG_I (0.1f)
46 #define SG_J (0.16f)
47 #define SG_S (1.0f)
49 GLuint Displayer::swapper_list;
51 void Displayer::drawTriangle ( float a_x, float a_y, float a_z,
52 float b_x, float b_y, float b_z, float c_x, float c_y, float c_z )
54 float n_x = (c_y - a_y) * (a_z - b_z) - (a_y - b_y) * (c_z - a_z);
55 float n_y = (c_z - a_z) * (a_x - b_x) - (a_z - b_z) * (c_x - a_x);
56 float n_z = (c_x - a_x) * (a_y - b_y) - (a_x - b_x) * (c_y - a_y);
58 float norm = sqrt(n_x * n_x + n_y * n_y + n_z * n_z);
59 n_x /= norm;
60 n_y /= norm;
61 n_z /= norm;
63 glNormal3f(n_x, n_y, n_z);
65 glVertex3f(a_x, a_y, a_z);
66 glVertex3f(b_x, b_y, b_z);
67 glVertex3f(c_x, c_y, c_z);
70 void Displayer::generateSwapperList ( )
72 swapper_list = glGenLists(1);
74 glNewList(swapper_list, GL_COMPILE);
76 glBegin(GL_TRIANGLES);
78 // not the fastest method, but this is at start up and may change
79 // someday; plus, if you have a super cool compiler, it could do it at
80 // compile time; plus, if you're going to complain, why don't you buy me
81 // a copy of 3D Studio Max
83 drawTriangle(SG_S + SG_E - SG_C, -SG_E, SG_H,
84 SG_S + SG_E - SG_C + SG_J, -SG_E, SG_H + SG_I,
85 SG_S + SG_E - SG_C + SG_D, -SG_E + SG_A, SG_H);
87 drawTriangle(SG_S + SG_E - SG_C + SG_D, -SG_E + SG_A, SG_H,
88 SG_S + SG_E - SG_C + SG_J, -SG_E, SG_H + SG_I,
89 SG_S + SG_E - SG_F, -SG_E + SG_A, SG_H);
91 drawTriangle(SG_S + SG_E - SG_F, -SG_E + SG_A, SG_H,
92 SG_S + SG_E - SG_C + SG_J, -SG_E, SG_H + SG_I,
93 SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I);
95 drawTriangle(SG_S + SG_E - SG_F, -SG_E + SG_A, SG_H,
96 SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I,
97 SG_S + SG_E - SG_A, -SG_E + SG_F, SG_H);
99 drawTriangle(SG_S + SG_E - SG_A, -SG_E + SG_F, SG_H,
100 SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I,
101 SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I);
103 drawTriangle(SG_S + SG_E - SG_A, -SG_E + SG_F, SG_H,
104 SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I,
105 SG_S + SG_E - SG_A, -SG_E + SG_C - SG_D, SG_H);
107 drawTriangle(SG_S + SG_E - SG_A, -SG_E + SG_C - SG_D, SG_H,
108 SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I,
109 SG_S + SG_E, -SG_E + SG_C - SG_J, SG_H + SG_I);
111 drawTriangle(SG_S + SG_E - SG_A, -SG_E + SG_C - SG_D, SG_H,
112 SG_S + SG_E, -SG_E + SG_C - SG_J, SG_H + SG_I,
113 SG_S + SG_E, -SG_E + SG_C, SG_H);
115 drawTriangle(SG_S + SG_E - SG_C, -SG_E, SG_H,
116 SG_S + SG_E - SG_C + SG_D, -SG_E - SG_A, SG_H,
117 SG_S + SG_E - SG_C + SG_J, -SG_E, SG_H + SG_I);
119 drawTriangle(SG_S + SG_E - SG_C + SG_J, -SG_E, SG_H + SG_I,
120 SG_S + SG_E - SG_C + SG_D, -SG_E - SG_A, SG_H,
121 SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I);
123 drawTriangle(SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I,
124 SG_S + SG_E - SG_C + SG_D, -SG_E - SG_A, SG_H,
125 SG_S + SG_E - SG_F + SG_B, -SG_E - SG_A, SG_H);
127 drawTriangle(SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I,
128 SG_S + SG_E - SG_F + SG_B, -SG_E - SG_A, SG_H,
129 SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I);
131 drawTriangle(SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I,
132 SG_S + SG_E - SG_F + SG_B, -SG_E - SG_A, SG_H,
133 SG_S + SG_E + SG_A, -SG_E + SG_F - SG_B, SG_H);
135 drawTriangle(SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I,
136 SG_S + SG_E + SG_A, -SG_E + SG_F - SG_B, SG_H,
137 SG_S + SG_E, -SG_E + SG_C - SG_J, SG_H + SG_I);
139 drawTriangle(SG_S + SG_E, -SG_E + SG_C - SG_J, SG_H + SG_I,
140 SG_S + SG_E + SG_A, -SG_E + SG_F - SG_B, SG_H,
141 SG_S + SG_E + SG_A, -SG_E + SG_C - SG_D, SG_H);
143 drawTriangle(SG_S + SG_E, -SG_E + SG_C, SG_H,
144 SG_S+ SG_E, -SG_E + SG_C - SG_J, SG_H + SG_I,
145 SG_S + SG_E + SG_A, -SG_E + SG_C - SG_D, SG_H);
147 glEnd();
149 glEndList();