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.
33 #include "Displayer.h"
35 // swapper's geometric constants
37 #define SG_B (2.0f * SG_A / 2.414214f)
47 GLuint
Displayer::swapper_list
;
49 void Displayer::drawTriangle ( float a_x
, float a_y
, float a_z
,
50 float b_x
, float b_y
, float b_z
, float c_x
, float c_y
, float c_z
)
52 float n_x
= (c_y
- a_y
) * (a_z
- b_z
) - (a_y
- b_y
) * (c_z
- a_z
);
53 float n_y
= (c_z
- a_z
) * (a_x
- b_x
) - (a_z
- b_z
) * (c_x
- a_x
);
54 float n_z
= (c_x
- a_x
) * (a_y
- b_y
) - (a_x
- b_x
) * (c_y
- a_y
);
56 float norm
= sqrt(n_x
* n_x
+ n_y
* n_y
+ n_z
* n_z
);
61 glNormal3f(n_x
, n_y
, n_z
);
63 glVertex3f(a_x
, a_y
, a_z
);
64 glVertex3f(b_x
, b_y
, b_z
);
65 glVertex3f(c_x
, c_y
, c_z
);
68 void Displayer::generateSwapperList ( )
70 swapper_list
= glGenLists(1);
72 glNewList(swapper_list
, GL_COMPILE
);
74 glBegin(GL_TRIANGLES
);
76 // not the fastest method, but this is at start up and may change
77 // someday; plus, if you have a super cool compiler, it could do it at
78 // compile time; plus, if you're going to complain, why don't you buy me
79 // a copy of 3D Studio Max
81 drawTriangle(SG_S
+ SG_E
- SG_C
, -SG_E
, SG_H
,
82 SG_S
+ SG_E
- SG_C
+ SG_J
, -SG_E
, SG_H
+ SG_I
,
83 SG_S
+ SG_E
- SG_C
+ SG_D
, -SG_E
+ SG_A
, SG_H
);
85 drawTriangle(SG_S
+ SG_E
- SG_C
+ SG_D
, -SG_E
+ SG_A
, SG_H
,
86 SG_S
+ SG_E
- SG_C
+ SG_J
, -SG_E
, SG_H
+ SG_I
,
87 SG_S
+ SG_E
- SG_F
, -SG_E
+ SG_A
, SG_H
);
89 drawTriangle(SG_S
+ SG_E
- SG_F
, -SG_E
+ SG_A
, SG_H
,
90 SG_S
+ SG_E
- SG_C
+ SG_J
, -SG_E
, SG_H
+ SG_I
,
91 SG_S
+ SG_E
- SG_F
+ SG_B
/ 2.0f
, -SG_E
, SG_H
+ SG_I
);
93 drawTriangle(SG_S
+ SG_E
- SG_F
, -SG_E
+ SG_A
, SG_H
,
94 SG_S
+ SG_E
- SG_F
+ SG_B
/ 2.0f
, -SG_E
, SG_H
+ SG_I
,
95 SG_S
+ SG_E
- SG_A
, -SG_E
+ SG_F
, SG_H
);
97 drawTriangle(SG_S
+ SG_E
- SG_A
, -SG_E
+ SG_F
, SG_H
,
98 SG_S
+ SG_E
- SG_F
+ SG_B
/ 2.0f
, -SG_E
, SG_H
+ SG_I
,
99 SG_S
+ SG_E
, -SG_E
+ SG_F
- SG_B
/ 2.0f
, SG_H
+ SG_I
);
101 drawTriangle(SG_S
+ SG_E
- SG_A
, -SG_E
+ SG_F
, SG_H
,
102 SG_S
+ SG_E
, -SG_E
+ SG_F
- SG_B
/ 2.0f
, SG_H
+ SG_I
,
103 SG_S
+ SG_E
- SG_A
, -SG_E
+ SG_C
- SG_D
, SG_H
);
105 drawTriangle(SG_S
+ SG_E
- SG_A
, -SG_E
+ SG_C
- SG_D
, SG_H
,
106 SG_S
+ SG_E
, -SG_E
+ SG_F
- SG_B
/ 2.0f
, SG_H
+ SG_I
,
107 SG_S
+ SG_E
, -SG_E
+ SG_C
- SG_J
, SG_H
+ SG_I
);
109 drawTriangle(SG_S
+ SG_E
- SG_A
, -SG_E
+ SG_C
- SG_D
, SG_H
,
110 SG_S
+ SG_E
, -SG_E
+ SG_C
- SG_J
, SG_H
+ SG_I
,
111 SG_S
+ SG_E
, -SG_E
+ SG_C
, SG_H
);
113 drawTriangle(SG_S
+ SG_E
- SG_C
, -SG_E
, SG_H
,
114 SG_S
+ SG_E
- SG_C
+ SG_D
, -SG_E
- SG_A
, SG_H
,
115 SG_S
+ SG_E
- SG_C
+ SG_J
, -SG_E
, SG_H
+ SG_I
);
117 drawTriangle(SG_S
+ SG_E
- SG_C
+ SG_J
, -SG_E
, SG_H
+ SG_I
,
118 SG_S
+ SG_E
- SG_C
+ SG_D
, -SG_E
- SG_A
, SG_H
,
119 SG_S
+ SG_E
- SG_F
+ SG_B
/ 2.0f
, -SG_E
, SG_H
+ SG_I
);
121 drawTriangle(SG_S
+ SG_E
- SG_F
+ SG_B
/ 2.0f
, -SG_E
, SG_H
+ SG_I
,
122 SG_S
+ SG_E
- SG_C
+ SG_D
, -SG_E
- SG_A
, SG_H
,
123 SG_S
+ SG_E
- SG_F
+ SG_B
, -SG_E
- SG_A
, SG_H
);
125 drawTriangle(SG_S
+ SG_E
- SG_F
+ SG_B
/ 2.0f
, -SG_E
, SG_H
+ SG_I
,
126 SG_S
+ SG_E
- SG_F
+ SG_B
, -SG_E
- SG_A
, SG_H
,
127 SG_S
+ SG_E
, -SG_E
+ SG_F
- SG_B
/ 2.0f
, SG_H
+ SG_I
);
129 drawTriangle(SG_S
+ SG_E
, -SG_E
+ SG_F
- SG_B
/ 2.0f
, SG_H
+ SG_I
,
130 SG_S
+ SG_E
- SG_F
+ SG_B
, -SG_E
- SG_A
, SG_H
,
131 SG_S
+ SG_E
+ SG_A
, -SG_E
+ SG_F
- SG_B
, SG_H
);
133 drawTriangle(SG_S
+ SG_E
, -SG_E
+ SG_F
- SG_B
/ 2.0f
, SG_H
+ SG_I
,
134 SG_S
+ SG_E
+ SG_A
, -SG_E
+ SG_F
- SG_B
, SG_H
,
135 SG_S
+ SG_E
, -SG_E
+ SG_C
- SG_J
, SG_H
+ SG_I
);
137 drawTriangle(SG_S
+ SG_E
, -SG_E
+ SG_C
- SG_J
, SG_H
+ SG_I
,
138 SG_S
+ SG_E
+ SG_A
, -SG_E
+ SG_F
- SG_B
, SG_H
,
139 SG_S
+ SG_E
+ SG_A
, -SG_E
+ SG_C
- SG_D
, SG_H
);
141 drawTriangle(SG_S
+ SG_E
, -SG_E
+ SG_C
, SG_H
,
142 SG_S
+ SG_E
, -SG_E
+ SG_C
- SG_J
, SG_H
+ SG_I
,
143 SG_S
+ SG_E
+ SG_A
, -SG_E
+ SG_C
- SG_D
, SG_H
);