fermisurfer Git
Revision | 651057f3cab4a24d881086605ece97f2b4187609 (tree) |
---|---|
Zeit | 2017-08-07 18:29:38 |
Autor | ![]() |
Commiter | mitsuaki1987 |
Backup
@@ -40,6 +40,7 @@ THE SOFTWARE. | ||
40 | 40 | |
41 | 41 | #include <math.h> |
42 | 42 | #include "variable.h" |
43 | +#include <stdio.h> | |
43 | 44 | /** |
44 | 45 | @brief Draw Fermi surfaces |
45 | 46 |
@@ -83,10 +84,6 @@ static void draw_fermi() { | ||
83 | 84 | /* |
84 | 85 | Second, draw each triangle |
85 | 86 | */ |
86 | - glEnableClientState(GL_VERTEX_ARRAY); | |
87 | - glEnableClientState(GL_NORMAL_ARRAY); | |
88 | - glEnableClientState(GL_COLOR_ARRAY); | |
89 | - glEnable(GL_COLOR_MATERIAL); | |
90 | 87 | for (ib = 0; ib < nb; ib++) { |
91 | 88 | if (draw_band[ib] == 1) { |
92 | 89 | for (itri = 0; itri < ntri[ib]; ++itri) { |
@@ -95,18 +92,14 @@ static void draw_fermi() { | ||
95 | 92 | for (k = 0; k < 3; ++k) vertices[k + 3 * i] = kvp_rot[ib][itri][i][k]; |
96 | 93 | for (k = 0; k < 4; ++k) colors[k + 4 * i] = clr[ib][itri][i][k]; |
97 | 94 | }/*for (i = 0; i < 3; ++i)*/ |
98 | - glVertexPointer(3, GL_FLOAT, 0, vertices); | |
99 | - glNormalPointer(GL_FLOAT, 0, normals); | |
100 | - glColorPointer(4, GL_FLOAT, 0,colors); | |
95 | + glVertexPointer(3, GL_FLOAT, 0, vertices); | |
96 | + glNormalPointer(GL_FLOAT, 0, normals); | |
97 | + glColorPointer(4, GL_FLOAT, 0,colors); | |
101 | 98 | glDrawArrays(GL_TRIANGLES, 0, 3); |
102 | 99 | }/*for (itri = 0; itri < ntri[ib]; ++itri)*/ |
103 | 100 | //glEnd(); |
104 | 101 | }/*if (draw_band[ib] == 1)*/ |
105 | 102 | }/*for (ib = 0; ib < nb; ib++)*/ |
106 | - glDisable(GL_COLOR_MATERIAL); | |
107 | - glDisableClientState(GL_COLOR_ARRAY); | |
108 | - glDisableClientState(GL_NORMAL_ARRAY); | |
109 | - glDisableClientState(GL_VERTEX_ARRAY); | |
110 | 103 | /* |
111 | 104 | Nodeline |
112 | 105 | */ |
@@ -141,17 +134,23 @@ static void draw_fermi() { | ||
141 | 134 | Second, draw each lines |
142 | 135 | */ |
143 | 136 | glLineWidth(3.0f*scl); |
144 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black); | |
145 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black); | |
146 | - glBegin(GL_LINES); | |
137 | + for (i = 0; i < 2; i++) { | |
138 | + for (k = 0; k < 4; k++) colors[k + 4 * i] = black[k]; | |
139 | + for (k = 0; k < 2; k++) normals[k + 3 * i] = 0.0f; | |
140 | + normals[2 + 3 * i] = 0.0f; | |
141 | + } | |
147 | 142 | for (ib = 0; ib < nb; ib++) { |
148 | 143 | if (draw_band[ib] == 1) { |
149 | 144 | for (itri = 0; itri < nnl[ib]; ++itri) { |
150 | - for (i = 0; i < 2; ++i) glVertex3fv(kvnl_rot[ib][itri][i]); | |
145 | + for (i = 0; i < 2; ++i) | |
146 | + for (k = 0; k < 3; ++k) vertices[k + 3 * i] = kvnl_rot[ib][itri][i][k]; | |
147 | + glVertexPointer(3, GL_FLOAT, 0, vertices); | |
148 | + glNormalPointer(GL_FLOAT, 0, normals); | |
149 | + glColorPointer(4, GL_FLOAT, 0, colors); | |
150 | + glDrawArrays(GL_LINES, 0, 2); | |
151 | 151 | }/*for (itri = 0; itri < nnl[ib]; ++itri)*/ |
152 | 152 | }/*if (draw_band[ib] == 1)*/ |
153 | 153 | }/* for (ib = 0; ib < nb; ib++)*/ |
154 | - glEnd(); | |
155 | 154 | }/*if (nodeline == 1)*/ |
156 | 155 | }/*void draw_fermi*/ |
157 | 156 | /** |
@@ -159,7 +158,8 @@ static void draw_fermi() { | ||
159 | 158 | */ |
160 | 159 | static void draw_bz_lines() { |
161 | 160 | int ibzl, i, j; |
162 | - GLfloat bzl2[3], bvec2[3][3], linecolor[4]; | |
161 | + GLfloat bzl2[3], bvec2[3][3], linecolor[4], secvec2[3]; | |
162 | + GLfloat vertices[300], colors[400], normals[300]; | |
163 | 163 | /* |
164 | 164 | Line color is oposit of BG color |
165 | 165 | */ |
@@ -169,13 +169,15 @@ static void draw_bz_lines() { | ||
169 | 169 | for (i = 0; i<4; i++) linecolor[i] = black[i]; |
170 | 170 | /**/ |
171 | 171 | glLineWidth(3.0f*scl); |
172 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, linecolor); | |
173 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, linecolor); | |
172 | + for (i = 0; i < 18; ++i) { | |
173 | + for (j = 0; j < 4; j++) colors[j + i * 4] = linecolor[j]; | |
174 | + for (j = 0; j < 2; j++) normals[j + i * 3] = 0.0f; | |
175 | + normals[2 + i * 3] = 1.0f; | |
176 | + }/*for (i = 0; i < 2; ++i)*/ | |
174 | 177 | /* |
175 | 178 | First Brillouin zone mode |
176 | 179 | */ |
177 | 180 | if (fbz == 1) { |
178 | - glBegin(GL_LINES); | |
179 | 181 | for (ibzl = 0; ibzl < nbzl; ++ibzl) { |
180 | 182 | for (i = 0; i< 2; ++i) { |
181 | 183 | for (j = 0; j < 3; ++j) |
@@ -183,10 +185,13 @@ static void draw_bz_lines() { | ||
183 | 185 | + rot[j][1] * bzl[ibzl][i][1] |
184 | 186 | + rot[j][2] * bzl[ibzl][i][2] |
185 | 187 | + trans[j]; |
186 | - glVertex3fv(bzl2); | |
188 | + for (j = 0; j < 3; j++) vertices[j + 3 * i] = bzl2[j]; | |
187 | 189 | }/*for (i = 0; i< 2; ++i)*/ |
190 | + glVertexPointer(3, GL_FLOAT, 0, vertices); | |
191 | + glNormalPointer(GL_FLOAT, 0, normals); | |
192 | + glColorPointer(4, GL_FLOAT, 0, colors); | |
193 | + glDrawArrays(GL_LINES, 0, 2); | |
188 | 194 | }/*for (ibzl = 0; ibzl < nbzl; ++ibzl)*/ |
189 | - glEnd(); | |
190 | 195 | }/*if (fbz == 1)*/ |
191 | 196 | else { |
192 | 197 | /* |
@@ -197,46 +202,54 @@ static void draw_bz_lines() { | ||
197 | 202 | bvec2[i][j] = rot[j][0] * bvec[i][0] |
198 | 203 | + rot[j][1] * bvec[i][1] |
199 | 204 | + rot[j][2] * bvec[i][2]; |
200 | - } | |
201 | - } | |
202 | - glBegin(GL_LINE_STRIP); | |
203 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i]; glVertex3fv(bzl2); | |
204 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[0][i]; glVertex3fv(bzl2); | |
205 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[0][i] + bvec2[1][i]; glVertex3fv(bzl2); | |
206 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[0][i] + bvec2[1][i] + bvec2[2][i]; glVertex3fv(bzl2); | |
207 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[1][i] + bvec2[2][i]; glVertex3fv(bzl2); | |
208 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[1][i]; glVertex3fv(bzl2); | |
209 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i]; glVertex3fv(bzl2); | |
210 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[2][i]; glVertex3fv(bzl2); | |
211 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[0][i] + bvec2[2][i]; glVertex3fv(bzl2); | |
212 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[0][i] + bvec2[1][i] + bvec2[2][i]; glVertex3fv(bzl2); | |
213 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[0][i] + bvec2[2][i]; glVertex3fv(bzl2); | |
214 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[0][i]; glVertex3fv(bzl2); | |
215 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i]; glVertex3fv(bzl2); | |
216 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[2][i]; glVertex3fv(bzl2); | |
217 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[1][i] + bvec2[2][i]; glVertex3fv(bzl2); | |
218 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[1][i]; glVertex3fv(bzl2); | |
219 | - for (i = 0; i<3; ++i) bzl2[i] = trans[i] + bvec2[0][i] + bvec2[1][i]; glVertex3fv(bzl2); | |
220 | - glEnd(); | |
205 | + }/*for (j = 0; j < 3; ++j)*/ | |
206 | + }/*for (i = 0; i < 3; ++i)*/ | |
207 | + for (i = 0; i<3; ++i) vertices[i] = trans[i]; | |
208 | + for (i = 0; i<3; ++i) vertices[i+3] = trans[i] + bvec2[0][i]; | |
209 | + for (i = 0; i<3; ++i) vertices[i+3*2] = trans[i] + bvec2[0][i] + bvec2[1][i]; | |
210 | + for (i = 0; i<3; ++i) vertices[i+3*3] = trans[i] + bvec2[0][i] + bvec2[1][i] + bvec2[2][i]; | |
211 | + for (i = 0; i<3; ++i) vertices[i+3*4] = trans[i] + bvec2[1][i] + bvec2[2][i]; | |
212 | + for (i = 0; i<3; ++i) vertices[i+3*5] = trans[i] + bvec2[1][i]; | |
213 | + for (i = 0; i<3; ++i) vertices[i+3*6] = trans[i]; | |
214 | + for (i = 0; i<3; ++i) vertices[i+3*7] = trans[i] + bvec2[2][i]; | |
215 | + for (i = 0; i<3; ++i) vertices[i+3*8] = trans[i] + bvec2[0][i] + bvec2[2][i]; | |
216 | + for (i = 0; i<3; ++i) vertices[i+3*9] = trans[i] + bvec2[0][i] + bvec2[1][i] + bvec2[2][i]; | |
217 | + for (i = 0; i<3; ++i) vertices[i+3*10] = trans[i] + bvec2[0][i] + bvec2[2][i]; | |
218 | + for (i = 0; i<3; ++i) vertices[i+3*11] = trans[i] + bvec2[0][i]; | |
219 | + for (i = 0; i<3; ++i) vertices[i+3*12] = trans[i]; | |
220 | + for (i = 0; i<3; ++i) vertices[i+3*13] = trans[i] + bvec2[2][i]; | |
221 | + for (i = 0; i<3; ++i) vertices[i+3*14] = trans[i] + bvec2[1][i] + bvec2[2][i]; | |
222 | + for (i = 0; i<3; ++i) vertices[i+3*15] = trans[i] + bvec2[1][i]; | |
223 | + for (i = 0; i<3; ++i) vertices[i+3*16] = trans[i] + bvec2[0][i] + bvec2[1][i]; | |
224 | + glVertexPointer(3, GL_FLOAT, 0, vertices); | |
225 | + glNormalPointer(GL_FLOAT, 0, normals); | |
226 | + glColorPointer(4, GL_FLOAT, 0, colors); | |
227 | + glDrawArrays(GL_LINE_STRIP, 0, 17); | |
221 | 228 | }/*if (fbz != 1)*/ |
222 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black); | |
223 | 229 | /* |
224 | 230 | Section for the 2D Fermi line |
225 | 231 | */ |
226 | 232 | if (lsection == 1) { |
227 | - glBegin(GL_POLYGON); | |
228 | - glNormal3fv(secvec); | |
229 | - if (blackback == 1) glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, white); | |
230 | - else glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black); | |
233 | + for (j = 0; j < 3; ++j) | |
234 | + secvec2[j] = rot[j][0] * secvec[0] | |
235 | + + rot[j][1] * secvec[1] | |
236 | + + rot[j][2] * secvec[2]; | |
237 | + for (i = 0; i < nbzl2d; ++i) { | |
238 | + for (j = 0; j < 4; j++) colors[j + i * 4] = gray[j]; | |
239 | + for (j = 0; j < 3; j++) normals[j + i * 3] = secvec2[j]; | |
240 | + } | |
231 | 241 | for (ibzl = 0; ibzl < nbzl2d; ++ibzl) { |
232 | 242 | for (j = 0; j < 3; ++j) |
233 | 243 | bzl2[j] = rot[j][0] * bzl2d[ibzl][0] |
234 | 244 | + rot[j][1] * bzl2d[ibzl][1] |
235 | 245 | + rot[j][2] * bzl2d[ibzl][2] |
236 | 246 | + trans[j]; |
237 | - glVertex3fv(bzl2); | |
247 | + for (j = 0; j < 3; j++)vertices[j + 3 * ibzl] = bzl2[j]; | |
238 | 248 | }/*for (ibzl = 0; ibzl < nbzl2d; ++ibzl)*/ |
239 | - glEnd(); | |
249 | + glVertexPointer(3, GL_FLOAT, 0, vertices); | |
250 | + glNormalPointer(GL_FLOAT, 0, normals); | |
251 | + glColorPointer(4, GL_FLOAT, 0, colors); | |
252 | + glDrawArrays(GL_TRIANGLE_FAN, 0, nbzl2d); | |
240 | 253 | }/*if (lsection == 1)*/ |
241 | 254 | }/*draw bz_lines */ |
242 | 255 | /** |
@@ -245,10 +258,9 @@ static void draw_bz_lines() { | ||
245 | 258 | */ |
246 | 259 | static void draw_colorbar() |
247 | 260 | { |
248 | - int i, j; | |
249 | - GLfloat mat2, barcolor[4]; | |
261 | + int i, j, k; | |
262 | + GLfloat mat2, barcolor[4], vertices[300], normals[300], colors[400]; | |
250 | 263 | GLfloat colorbar[13][3] = { |
251 | - { 0.0f, 0.0f, 1.0f }, | |
252 | 264 | { -1.0f, -1.0f, 0.0f }, |
253 | 265 | { -1.0f, -1.0f - 0.1f, 0.0f }, |
254 | 266 | { -0.5f, -1.0f, 0.0f }, |
@@ -264,24 +276,25 @@ static void draw_colorbar() | ||
264 | 276 | }; |
265 | 277 | /**/ |
266 | 278 | if (fcscl == 1 || fcscl == 2) { |
267 | - glBegin(GL_TRIANGLE_STRIP); | |
268 | - glNormal3fv(colorbar[0]); | |
269 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, blue); | |
270 | - glVertex3fv(colorbar[1]); | |
271 | - glVertex3fv(colorbar[2]); | |
272 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, cyan); | |
273 | - glVertex3fv(colorbar[3]); | |
274 | - glVertex3fv(colorbar[4]); | |
275 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, green); | |
276 | - glVertex3fv(colorbar[5]); | |
277 | - glVertex3fv(colorbar[6]); | |
278 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, yellow); | |
279 | - glVertex3fv(colorbar[7]); | |
280 | - glVertex3fv(colorbar[8]); | |
281 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, red); | |
282 | - glVertex3fv(colorbar[9]); | |
283 | - glVertex3fv(colorbar[10]); | |
284 | - glEnd(); | |
279 | + for (i = 0; i < 10; i++) { | |
280 | + for (j = 0; j < 3; j++) vertices[j + i * 3] = colorbar[i][j]; | |
281 | + for (j = 0; j < 2; j++) normals[j + i * 3] = 0.0f; | |
282 | + normals[j + i * 3] = 1.0f; | |
283 | + }/*for (i = 0; i < 10; i++)*/ | |
284 | + for (j = 0; j < 4; j++) colors[j] = blue[j]; | |
285 | + for (j = 0; j < 4; j++) colors[j + 4] = blue[j]; | |
286 | + for (j = 0; j < 4; j++) colors[j + 4 * 2] = cyan[j]; | |
287 | + for (j = 0; j < 4; j++) colors[j + 4 * 3] = cyan[j]; | |
288 | + for (j = 0; j < 4; j++) colors[j + 4 * 4] = green[j]; | |
289 | + for (j = 0; j < 4; j++) colors[j + 4 * 5] = green[j]; | |
290 | + for (j = 0; j < 4; j++) colors[j + 4 * 6] = yellow[j]; | |
291 | + for (j = 0; j < 4; j++) colors[j + 4 * 7] = yellow[j]; | |
292 | + for (j = 0; j < 4; j++) colors[j + 4 * 8] = red[j]; | |
293 | + for (j = 0; j < 4; j++) colors[j + 4 * 9] = red[j]; | |
294 | + glVertexPointer(3, GL_FLOAT, 0, vertices); | |
295 | + glNormalPointer(GL_FLOAT, 0, normals); | |
296 | + glColorPointer(4, GL_FLOAT, 0, colors); | |
297 | + glDrawArrays(GL_TRIANGLE_STRIP, 0, 10); | |
285 | 298 | }/*if (fcscl == 1 || fcscl == 2)*/ |
286 | 299 | else if (fcscl == 4) { |
287 | 300 | /* |
@@ -315,22 +328,28 @@ static void draw_colorbar() | ||
315 | 328 | for (j = 0; j<4; ++j) barcolor[j] = red[j] * mat2 + magenta[j] * (1.0f - mat2); |
316 | 329 | } |
317 | 330 | /**/ |
318 | - glBegin(GL_TRIANGLES); | |
319 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, barcolor); | |
320 | - glNormal3fv(colorbar[0]); | |
321 | - glVertex3f(0.15f * cosf((GLfloat)(i + 1) / 60.0f * 6.283185307f), | |
322 | - 0.15f * sinf((GLfloat)(i + 1) / 60.0f * 6.283185307f) - 1.0f, 0.0); | |
323 | - glVertex3f(0.15f * cosf((GLfloat)i / 60.0f * 6.283185307f), | |
324 | - 0.15f * sinf((GLfloat)i / 60.0f * 6.283185307f) - 1.0f, 0.0); | |
325 | - glVertex3f(0.2f * cosf((GLfloat)i / 60.0f * 6.283185307f), | |
326 | - 0.2f * sinf((GLfloat)i / 60.0f * 6.283185307f) - 1.0f, 0.0); | |
327 | - glVertex3f(0.2f * cosf((GLfloat)i / 60.0f * 6.283185307f), | |
328 | - 0.2f * sinf((GLfloat)i / 60.0f * 6.283185307f) - 1.0f, 0.0); | |
329 | - glVertex3f(0.2f * cosf((GLfloat)(i + 1) / 60.0f * 6.283185307f), | |
330 | - 0.2f * sinf((GLfloat)(i + 1) / 60.0f * 6.283185307f) - 1.0f, 0.0); | |
331 | - glVertex3f(0.15f * cosf((GLfloat)(i + 1) / 60.0f * 6.283185307f), | |
332 | - 0.15f * sinf((GLfloat)(i + 1) / 60.0f * 6.283185307f) - 1.0f, 0.0); | |
333 | - glEnd(); | |
331 | + vertices[0 + 0 * 3] = 0.15f * cosf((GLfloat)(i + 1) / 60.0f * 6.283185307f); | |
332 | + vertices[1 + 0 * 3] = 0.15f * sinf((GLfloat)(i + 1) / 60.0f * 6.283185307f) - 1.0f; | |
333 | + vertices[0 + 1 * 3] = 0.15f * cosf((GLfloat)i / 60.0f * 6.283185307f); | |
334 | + vertices[1 + 1 * 3] = 0.15f * sinf((GLfloat)i / 60.0f * 6.283185307f) - 1.0f; | |
335 | + vertices[0 + 2 * 3] = 0.2f * cosf((GLfloat)i / 60.0f * 6.283185307f); | |
336 | + vertices[1 + 2 * 3] = 0.2f * sinf((GLfloat)i / 60.0f * 6.283185307f) - 1.0f; | |
337 | + vertices[0 + 3 * 3] = 0.2f * cosf((GLfloat)i / 60.0f * 6.283185307f); | |
338 | + vertices[1 + 3 * 3] = 0.2f * sinf((GLfloat)i / 60.0f * 6.283185307f) - 1.0f; | |
339 | + vertices[0 + 4 * 3] = 0.2f * cosf((GLfloat)(i + 1) / 60.0f * 6.283185307f); | |
340 | + vertices[1 + 4 * 3] = 0.2f * sinf((GLfloat)(i + 1) / 60.0f * 6.283185307f) - 1.0f; | |
341 | + vertices[0 + 5 * 3] = 0.15f * cosf((GLfloat)(i + 1) / 60.0f * 6.283185307f); | |
342 | + vertices[1 + 5 * 3] = 0.15f * sinf((GLfloat)(i + 1) / 60.0f * 6.283185307f) - 1.0f; | |
343 | + for (k = 0; k < 6; k++) { | |
344 | + vertices[2 + k * 3] = 0.0f; | |
345 | + for (j = 0; j < 2; j++) normals[j + k * 3] = 0.0f; | |
346 | + normals[j + k * 3] = 1.0f; | |
347 | + for (j = 0; j < 4; j++) colors[j + k * 4] = barcolor[j]; | |
348 | + }/*for (i = 0; i < 10; i++)*/ | |
349 | + glVertexPointer(3, GL_FLOAT, 0, vertices); | |
350 | + glNormalPointer(GL_FLOAT, 0, normals); | |
351 | + glColorPointer(4, GL_FLOAT, 0, colors); | |
352 | + glDrawArrays(GL_TRIANGLES, 0, 6); | |
334 | 353 | }/*for (i = 0; i <= 60; i++)*/ |
335 | 354 | }/*else if (fcscl == 4)*/ |
336 | 355 | }/*void draw_colorbar*/ |
@@ -340,44 +359,42 @@ static void draw_colorbar() | ||
340 | 359 | static void draw_circles( |
341 | 360 | GLfloat dx2d //!< [in] Translation used for the section-mode |
342 | 361 | ) { |
343 | - int i; | |
344 | - GLfloat r; | |
362 | + int i, j; | |
363 | + GLfloat r, vertices[66], colors[88], normals[66]; | |
345 | 364 | /**/ |
346 | 365 | r = 0.05f; |
347 | 366 | /**/ |
348 | - if (blackback == 1) { | |
349 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, white); | |
350 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, white); | |
351 | - } | |
352 | - else { | |
353 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black); | |
354 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black); | |
355 | - } | |
367 | + for (i = 0; i < 22; i++) { | |
368 | + for (j = 0; j < 2; j++)normals[j + i * 3] = 0.0f; | |
369 | + normals[2 + i * 3] = 1.0f; | |
370 | + vertices[2 + i * 3] = 0.0f; | |
371 | + if (blackback == 1)for (j = 0; j < 4; j++) colors[j + i * 4] = white[j]; | |
372 | + else for (j = 0; j < 4; j++) colors[j + i * 4] = black[j]; | |
373 | + }/*for (i = 0; i < 22; i++)*/ | |
356 | 374 | /**/ |
357 | - glBegin(GL_TRIANGLE_FAN); | |
358 | - glNormal3f(0.0, 0.0, 1.0); | |
359 | - glVertex3f(0.7f - dx2d, scl, 0.0f); | |
375 | + vertices[0] = 0.7f - dx2d; | |
376 | + vertices[1] = scl; | |
360 | 377 | for (i = 0; i <= 20; i++) { |
361 | - glVertex3f(r * cosf((GLfloat)i / 20.0f * 6.283185307f) + 0.7f - dx2d, | |
362 | - r * sinf((GLfloat)i / 20.0f * 6.283185307f) + scl, 0.0f); | |
363 | - } | |
364 | - glEnd(); | |
378 | + vertices[0 + (i + 1) * 3] = r * cosf((GLfloat)i / 20.0f * 6.283185307f) + 0.7f - dx2d; | |
379 | + vertices[1 + (i + 1) * 3] = r * sinf((GLfloat)i / 20.0f * 6.283185307f) + scl; | |
380 | + }/*for (i = 0; i <= 20; i++)*/ | |
381 | + glVertexPointer(3, GL_FLOAT, 0, vertices); | |
382 | + glNormalPointer(GL_FLOAT, 0, normals); | |
383 | + glColorPointer(4, GL_FLOAT, 0, colors); | |
384 | + glDrawArrays(GL_TRIANGLE_FAN, 0, 22); | |
365 | 385 | /**/ |
366 | - glBegin(GL_TRIANGLE_FAN); | |
367 | - glNormal3f(0.0, 0.0, 1.0); | |
368 | - glVertex3f(-0.7f - dx2d, scl, 0.0f); | |
369 | - for (i = 0; i <= 20; i++) { | |
370 | - glVertex3f(r * cosf((GLfloat)i / 20.0f * 6.283185307f) - 0.7f - dx2d, | |
371 | - r * sinf((GLfloat)i / 20.0f * 6.283185307f) + scl, 0.0f); | |
372 | - } | |
373 | - glEnd(); | |
386 | + for (i = 0; i < 22; i++) vertices[3 * i] += -1.4f; | |
387 | + glVertexPointer(3, GL_FLOAT, 0, vertices); | |
388 | + glNormalPointer(GL_FLOAT, 0, normals); | |
389 | + glColorPointer(4, GL_FLOAT, 0, colors); | |
390 | + glDrawArrays(GL_TRIANGLE_FAN, 0, 22); | |
374 | 391 | }/*void draw_circles*/ |
375 | 392 | /** |
376 | 393 | @brief Draw 2D Fermi lines |
377 | 394 | */ |
378 | 395 | static void draw_fermi_line() { |
379 | - int i, ib, ibzl, itri; | |
380 | - GLfloat linecolor[4]; | |
396 | + int i, j, ib, ibzl, itri; | |
397 | + GLfloat linecolor[4], vertices[60], normals[60], colors[80]; | |
381 | 398 | /* |
382 | 399 | Draw 2D BZ lines |
383 | 400 | */ |
@@ -387,29 +404,36 @@ static void draw_fermi_line() { | ||
387 | 404 | for (i = 0; i<4; i++) linecolor[i] = black[i]; |
388 | 405 | /**/ |
389 | 406 | glLineWidth(3.0f*scl); |
390 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, linecolor); | |
391 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, linecolor); | |
392 | - glBegin(GL_LINE_LOOP); | |
393 | - for (ibzl = 0; ibzl < nbzl2d; ++ibzl) glVertex3fv(bzl2d_proj[ibzl]); | |
394 | - glEnd(); | |
407 | + for (ibzl = 0; ibzl < nbzl2d; ++ibzl) { | |
408 | + for (i = 0; i < 3; i++) vertices[i + 3 * ibzl] = bzl2d_proj[ibzl][i]; | |
409 | + for (i = 0; i < 4; i++) colors[i + 4 * ibzl] = linecolor[i]; | |
410 | + for (i = 0; i < 2; i++) normals[i + 3 * ibzl] = 0.0f; | |
411 | + normals[2 + 3 * ibzl] = 1.0f; | |
412 | + }/*for (ibzl = 0; ibzl < nbzl2d; ++ibzl)*/ | |
413 | + glVertexPointer(3, GL_FLOAT, 0, vertices); | |
414 | + glNormalPointer(GL_FLOAT, 0, normals); | |
415 | + glColorPointer(4, GL_FLOAT, 0, colors); | |
416 | + glDrawArrays(GL_LINE_LOOP, 0, nbzl2d); | |
395 | 417 | /* |
396 | 418 | Draw Fermi lines |
397 | 419 | */ |
398 | 420 | glLineWidth(3.0f*scl); |
399 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black); | |
400 | - glBegin(GL_LINES); | |
401 | 421 | for (ib = 0; ib < nb; ib++) { |
402 | 422 | if (draw_band[ib] == 1) { |
403 | 423 | for (itri = 0; itri < n2d[ib]; ++itri) { |
404 | 424 | for (i = 0; i < 2; ++i) { |
405 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, clr2d[ib][itri][i]); | |
406 | - glVertex3fv(kv2d[ib][itri][i]); | |
425 | + for (j = 0; j < 3; j++) vertices[j + 3 * i] = kv2d[ib][itri][i][j]; | |
426 | + for (j = 0; j < 4; j++) colors[j + 4 * i] = clr2d[ib][itri][i][j]; | |
427 | + for (j = 0; j < 2; j++) normals[j + 3 * i] = 0.0f; | |
428 | + normals[2 + 3 * i] = 1.0f; | |
407 | 429 | }/*for (i = 0; i < 2; ++i)*/ |
430 | + glVertexPointer(3, GL_FLOAT, 0, vertices); | |
431 | + glNormalPointer(GL_FLOAT, 0, normals); | |
432 | + glColorPointer(4, GL_FLOAT, 0, colors); | |
433 | + glDrawArrays(GL_LINES, 0, 2); | |
408 | 434 | }/*for (itri = 0; itri < nnl[ib]; ++itri)*/ |
409 | 435 | }/*if (draw_band[ib] == 1)*/ |
410 | 436 | }/* for (ib = 0; ib < nb; ib++)*/ |
411 | - glEnd(); | |
412 | - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black); | |
413 | 437 | }/*void draw_fermi_line*/ |
414 | 438 | /** |
415 | 439 | @brief Glut Display function |
@@ -97,7 +97,10 @@ void init(void) | ||
97 | 97 | glEnable(GL_LIGHT0); |
98 | 98 | glEnable(GL_LIGHT1); |
99 | 99 | glEnable(GL_NORMALIZE); |
100 | - //glEnable(GL_COLOR_MATERIAL); | |
100 | + glEnableClientState(GL_VERTEX_ARRAY); | |
101 | + glEnableClientState(GL_NORMAL_ARRAY); | |
102 | + glEnableClientState(GL_COLOR_ARRAY); | |
103 | + glEnable(GL_COLOR_MATERIAL); | |
101 | 104 | /* Menu */ |
102 | 105 | FS_CreateMenu(); |
103 | 106 | } /* init */ |