5 * Copyright (C) 2000 Daniel Nelson
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
25 * Generates the swapper's displa_y list.
38 #include "Displayer.h"
40 // swapper's geometric constants
42 #define SG_B (2.0f * SG_A / 2.414214f)
52 GLuint
Displayer::swapper_list
;
54 void Displayer::drawTriangle ( float a_x
, float a_y
, float a_z
,
55 float b_x
, float b_y
, float b_z
, float c_x
, float c_y
, float c_z
)
57 float n_x
= (c_y
- a_y
) * (a_z
- b_z
) - (a_y
- b_y
) * (c_z
- a_z
);
58 float n_y
= (c_z
- a_z
) * (a_x
- b_x
) - (a_z
- b_z
) * (c_x
- a_x
);
59 float n_z
= (c_x
- a_x
) * (a_y
- b_y
) - (a_x
- b_x
) * (c_y
- a_y
);
61 float norm
= sqrt(n_x
* n_x
+ n_y
* n_y
+ n_z
* n_z
);
66 glNormal3f(n_x
, n_y
, n_z
);
68 glVertex3f(a_x
, a_y
, a_z
);
69 glVertex3f(b_x
, b_y
, b_z
);
70 glVertex3f(c_x
, c_y
, c_z
);
73 void Displayer::generateSwapperList ( )
75 swapper_list
= glGenLists(1);
77 glNewList(swapper_list
, GL_COMPILE
);
79 glBegin(GL_TRIANGLES
);
81 // not the fastest method, but this is at start up and may change
82 // someday; plus, if you have a super cool compiler, it could do it at
83 // compile time; plus, if you're going to complain, why don't you buy me
84 // a copy of 3D Studio Max
86 drawTriangle(SG_S
+ SG_E
- SG_C
, -SG_E
, SG_H
,
87 SG_S
+ SG_E
- SG_C
+ SG_J
, -SG_E
, SG_H
+ SG_I
,
88 SG_S
+ SG_E
- SG_C
+ SG_D
, -SG_E
+ SG_A
, SG_H
);
90 drawTriangle(SG_S
+ SG_E
- SG_C
+ SG_D
, -SG_E
+ SG_A
, SG_H
,
91 SG_S
+ SG_E
- SG_C
+ SG_J
, -SG_E
, SG_H
+ SG_I
,
92 SG_S
+ SG_E
- SG_F
, -SG_E
+ SG_A
, SG_H
);
94 drawTriangle(SG_S
+ SG_E
- SG_F
, -SG_E
+ SG_A
, SG_H
,
95 SG_S
+ SG_E
- SG_C
+ SG_J
, -SG_E
, SG_H
+ SG_I
,
96 SG_S
+ SG_E
- SG_F
+ SG_B
/ 2.0f
, -SG_E
, SG_H
+ SG_I
);
98 drawTriangle(SG_S
+ SG_E
- SG_F
, -SG_E
+ SG_A
, SG_H
,
99 SG_S
+ SG_E
- SG_F
+ SG_B
/ 2.0f
, -SG_E
, SG_H
+ SG_I
,
100 SG_S
+ SG_E
- SG_A
, -SG_E
+ SG_F
, SG_H
);
102 drawTriangle(SG_S
+ SG_E
- SG_A
, -SG_E
+ SG_F
, SG_H
,
103 SG_S
+ SG_E
- SG_F
+ SG_B
/ 2.0f
, -SG_E
, SG_H
+ SG_I
,
104 SG_S
+ SG_E
, -SG_E
+ SG_F
- SG_B
/ 2.0f
, SG_H
+ SG_I
);
106 drawTriangle(SG_S
+ SG_E
- SG_A
, -SG_E
+ SG_F
, SG_H
,
107 SG_S
+ SG_E
, -SG_E
+ SG_F
- SG_B
/ 2.0f
, SG_H
+ SG_I
,
108 SG_S
+ SG_E
- SG_A
, -SG_E
+ SG_C
- SG_D
, SG_H
);
110 drawTriangle(SG_S
+ SG_E
- SG_A
, -SG_E
+ SG_C
- SG_D
, SG_H
,
111 SG_S
+ SG_E
, -SG_E
+ SG_F
- SG_B
/ 2.0f
, SG_H
+ SG_I
,
112 SG_S
+ SG_E
, -SG_E
+ SG_C
- SG_J
, SG_H
+ SG_I
);
114 drawTriangle(SG_S
+ SG_E
- SG_A
, -SG_E
+ SG_C
- SG_D
, SG_H
,
115 SG_S
+ SG_E
, -SG_E
+ SG_C
- SG_J
, SG_H
+ SG_I
,
116 SG_S
+ SG_E
, -SG_E
+ SG_C
, SG_H
);
118 drawTriangle(SG_S
+ SG_E
- SG_C
, -SG_E
, SG_H
,
119 SG_S
+ SG_E
- SG_C
+ SG_D
, -SG_E
- SG_A
, SG_H
,
120 SG_S
+ SG_E
- SG_C
+ SG_J
, -SG_E
, SG_H
+ SG_I
);
122 drawTriangle(SG_S
+ SG_E
- SG_C
+ SG_J
, -SG_E
, SG_H
+ SG_I
,
123 SG_S
+ SG_E
- SG_C
+ SG_D
, -SG_E
- SG_A
, SG_H
,
124 SG_S
+ SG_E
- SG_F
+ SG_B
/ 2.0f
, -SG_E
, SG_H
+ SG_I
);
126 drawTriangle(SG_S
+ SG_E
- SG_F
+ SG_B
/ 2.0f
, -SG_E
, SG_H
+ SG_I
,
127 SG_S
+ SG_E
- SG_C
+ SG_D
, -SG_E
- SG_A
, SG_H
,
128 SG_S
+ SG_E
- SG_F
+ SG_B
, -SG_E
- SG_A
, SG_H
);
130 drawTriangle(SG_S
+ SG_E
- SG_F
+ SG_B
/ 2.0f
, -SG_E
, SG_H
+ SG_I
,
131 SG_S
+ SG_E
- SG_F
+ SG_B
, -SG_E
- SG_A
, SG_H
,
132 SG_S
+ SG_E
, -SG_E
+ SG_F
- SG_B
/ 2.0f
, SG_H
+ SG_I
);
134 drawTriangle(SG_S
+ SG_E
, -SG_E
+ SG_F
- SG_B
/ 2.0f
, SG_H
+ SG_I
,
135 SG_S
+ SG_E
- SG_F
+ SG_B
, -SG_E
- SG_A
, SG_H
,
136 SG_S
+ SG_E
+ SG_A
, -SG_E
+ SG_F
- SG_B
, SG_H
);
138 drawTriangle(SG_S
+ SG_E
, -SG_E
+ SG_F
- SG_B
/ 2.0f
, SG_H
+ SG_I
,
139 SG_S
+ SG_E
+ SG_A
, -SG_E
+ SG_F
- SG_B
, SG_H
,
140 SG_S
+ SG_E
, -SG_E
+ SG_C
- SG_J
, SG_H
+ SG_I
);
142 drawTriangle(SG_S
+ SG_E
, -SG_E
+ SG_C
- SG_J
, SG_H
+ SG_I
,
143 SG_S
+ SG_E
+ SG_A
, -SG_E
+ SG_F
- SG_B
, SG_H
,
144 SG_S
+ SG_E
+ SG_A
, -SG_E
+ SG_C
- SG_D
, SG_H
);
146 drawTriangle(SG_S
+ SG_E
, -SG_E
+ SG_C
, SG_H
,
147 SG_S
+ SG_E
, -SG_E
+ SG_C
- SG_J
, SG_H
+ SG_I
,
148 SG_S
+ SG_E
+ SG_A
, -SG_E
+ SG_C
- SG_D
, SG_H
);