draw_lamp.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:28k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /*
  2.  * (c) Copyright 1993, Silicon Graphics, Inc.
  3.  * ALL RIGHTS RESERVED 
  4.  * Permission to use, copy, modify, and distribute this software for 
  5.  * any purpose and without fee is hereby granted, provided that the above
  6.  * copyright notice appear in all copies and that both the copyright notice
  7.  * and this permission notice appear in supporting documentation, and that 
  8.  * the name of Silicon Graphics, Inc. not be used in advertising
  9.  * or publicity pertaining to distribution of the software without specific,
  10.  * written prior permission. 
  11.  *
  12.  * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
  13.  * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
  14.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
  15.  * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
  16.  * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
  17.  * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
  18.  * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
  19.  * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
  20.  * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
  21.  * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
  22.  * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
  23.  * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
  24.  * 
  25.  * US Government Users Restricted Rights 
  26.  * Use, duplication, or disclosure by the Government is subject to
  27.  * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
  28.  * (c)(1)(ii) of the Rights in Technical Data and Computer Software
  29.  * clause at DFARS 252.227-7013 and/or in similar or successor
  30.  * clauses in the FAR or the DOD or NASA FAR Supplement.
  31.  * Unpublished-- rights reserved under the copyright laws of the
  32.  * United States.  Contractor/manufacturer is Silicon Graphics,
  33.  * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
  34.  *
  35.  * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
  36.  */
  37. #include <GL/glut.h>
  38. #include "objects.h"
  39. /*
  40. #define glNormal3fv(v)  
  41.   printf("%g, %g, %g --> %.10fn", 
  42.  v[0], v[1], v[2], v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); 
  43.   glNormal3fv(v); 
  44. }
  45. */
  46. float hp[6][13][3] = {
  47.     {
  48. {0.000000, 0.000000, 1.000000},
  49. {0.000000, 0.000000, 1.000000},
  50. {0.000000, 0.000000, 1.000000},
  51. {0.000000, 0.000000, 1.000000},
  52. {0.000000, 0.000000, 1.000000},
  53. {0.000000, 0.000000, 1.000000},
  54. {0.000000, 0.000000, 1.000000},
  55. {0.000000, 0.000000, 1.000000},
  56. {0.000000, 0.000000, 1.000000},
  57. {0.000000, 0.000000, 1.000000},
  58. {0.000000, 0.000000, 1.000000},
  59. {0.000000, 0.000000, 1.000000},
  60. {0.000000, 0.000000, 1.000000},
  61.     },
  62.     {
  63. {0.438371, 0.000000, 0.898794},
  64. {0.379641, 0.219186, 0.898794},
  65. {0.219186, 0.379641, 0.898794},
  66. {0.000000, 0.438371, 0.898794},
  67. {-0.219186, 0.379641, 0.898794},
  68. {-0.379641, 0.219186, 0.898794},
  69. {-0.438371, 0.000000, 0.898794},
  70. {-0.379641, -0.219186, 0.898794},
  71. {-0.219186, -0.379641, 0.898794},
  72. {0.000000, -0.438371, 0.898794},
  73. {0.219186, -0.379641, 0.898794},
  74. {0.379641, -0.219186, 0.898794},
  75. {0.438371, 0.000000, 0.898794},
  76.     },
  77.     {
  78. {0.788011, 0.000000, 0.615662},
  79. {0.682437, 0.394005, 0.615662},
  80. {0.394005, 0.682437, 0.615662},
  81. {0.000000, 0.788011, 0.615662},
  82. {-0.394005, 0.682437, 0.615662},
  83. {-0.682437, 0.394005, 0.615662},
  84. {-0.788011, 0.000000, 0.615662},
  85. {-0.682437, -0.394005, 0.615662},
  86. {-0.394005, -0.682437, 0.615662},
  87. {0.000000, -0.788011, 0.615662},
  88. {0.394005, -0.682437, 0.615662},
  89. {0.682437, -0.394005, 0.615662},
  90. {0.788011, 0.000000, 0.615662},
  91.     },
  92.     {
  93. {0.978148, 0.000000, 0.207912},
  94. {0.847101, 0.489074, 0.207912},
  95. {0.489074, 0.847101, 0.207912},
  96. {0.000000, 0.978148, 0.207912},
  97. {-0.489074, 0.847101, 0.207912},
  98. {-0.847101, 0.489074, 0.207912},
  99. {-0.978148, 0.000000, 0.207912},
  100. {-0.847101, -0.489074, 0.207912},
  101. {-0.489074, -0.847101, 0.207912},
  102. {0.000000, -0.978148, 0.207912},
  103. {0.489074, -0.847101, 0.207912},
  104. {0.847101, -0.489074, 0.207912},
  105. {0.978148, 0.000000, 0.207912},
  106.     },
  107.     {
  108. {0.970296, 0.000000, -0.241922},
  109. {0.840301, 0.485148, -0.241922},
  110. {0.485148, 0.840301, -0.241922},
  111. {0.000000, 0.970296, -0.241922},
  112. {-0.485148, 0.840301, -0.241922},
  113. {-0.840301, 0.485148, -0.241922},
  114. {-0.970296, 0.000000, -0.241922},
  115. {-0.840301, -0.485148, -0.241922},
  116. {-0.485148, -0.840301, -0.241922},
  117. {0.000000, -0.970296, -0.241922},
  118. {0.485148, -0.840301, -0.241922},
  119. {0.840301, -0.485148, -0.241922},
  120. {0.970296, 0.000000, -0.241922},
  121.     },
  122.     {
  123. {0.766044, 0.000000, -0.642788},
  124. {0.663414, 0.383022, -0.642788},
  125. {0.383022, 0.663414, -0.642788},
  126. {0.000000, 0.766044, -0.642788},
  127. {-0.383022, 0.663414, -0.642788},
  128. {-0.663414, 0.383022, -0.642788},
  129. {-0.766044, 0.000000, -0.642788},
  130. {-0.663414, -0.383022, -0.642788},
  131. {-0.383022, -0.663414, -0.642788},
  132. {0.000000, -0.766044, -0.642788},
  133. {0.383022, -0.663414, -0.642788},
  134. {0.663414, -0.383022, -0.642788},
  135. {0.766044, 0.000000, -0.642788},
  136.     },
  137. };
  138. float ltp[9][25][3] = {
  139.      {
  140. {10.000000, 0.000000, 1.000000},
  141. {9.659258, -2.588191, 1.000000},
  142. {8.660254, -5.000000, 1.000000},
  143. {7.071068, -7.071068, 1.000000},
  144. {5.000000, -8.660254, 1.000000},
  145. {2.588191, -9.659258, 1.000000},
  146. {0.000000, -10.000000, 1.000000},
  147. {-2.588191, -9.659258, 1.000000},
  148. {-5.000000, -8.660254, 1.000000},
  149. {-7.071068, -7.071068, 1.000000},
  150. {-8.660254, -5.000000, 1.000000},
  151. {-9.659258, -2.588191, 1.000000},
  152. {-10.000000, 0.000000, 1.000000},
  153. {-9.659258, 2.588191, 1.000000},
  154. {-8.660254, 5.000000, 1.000000},
  155. {-7.071068, 7.071068, 1.000000},
  156. {-5.000000, 8.660254, 1.000000},
  157. {-2.588191, 9.659258, 1.000000},
  158. {0.000000, 10.000000, 1.000000},
  159. {2.588191, 9.659258, 1.000000},
  160. {5.000000, 8.660254, 1.000000},
  161. {7.071068, 7.071068, 1.000000},
  162. {8.660254, 5.000000, 1.000000},
  163. {9.659258, 2.588191, 1.000000},
  164. {10.000000, 0.000000, 1.000000},
  165.     },
  166.      {
  167. {10.707107, 0.000000, 0.707107},
  168. {10.342271, -2.771203, 0.707107},
  169. {9.272627, -5.353553, 0.707107},
  170. {7.571068, -7.571068, 0.707107},
  171. {5.353553, -9.272627, 0.707107},
  172. {2.771203, -10.342271, 0.707107},
  173. {0.000000, -10.707107, 0.707107},
  174. {-2.771203, -10.342271, 0.707107},
  175. {-5.353553, -9.272627, 0.707107},
  176. {-7.571068, -7.571068, 0.707107},
  177. {-9.272627, -5.353553, 0.707107},
  178. {-10.342271, -2.771203, 0.707107},
  179. {-10.707107, 0.000000, 0.707107},
  180. {-10.342271, 2.771203, 0.707107},
  181. {-9.272627, 5.353553, 0.707107},
  182. {-7.571068, 7.571068, 0.707107},
  183. {-5.353553, 9.272627, 0.707107},
  184. {-2.771203, 10.342271, 0.707107},
  185. {0.000000, 10.707107, 0.707107},
  186. {2.771203, 10.342271, 0.707107},
  187. {5.353553, 9.272627, 0.707107},
  188. {7.571068, 7.571068, 0.707107},
  189. {9.272627, 5.353553, 0.707107},
  190. {10.342271, 2.771203, 0.707107},
  191. {10.707107, 0.000000, 0.707107},
  192.     },
  193.      {
  194. {11.000000, 0.000000, 0.000000},
  195. {10.625184, -2.847009, 0.000000},
  196. {9.526279, -5.500000, 0.000000},
  197. {7.778174, -7.778174, 0.000000},
  198. {5.500000, -9.526279, 0.000000},
  199. {2.847009, -10.625184, 0.000000},
  200. {0.000000, -11.000000, 0.000000},
  201. {-2.847009, -10.625184, 0.000000},
  202. {-5.500000, -9.526279, 0.000000},
  203. {-7.778174, -7.778174, 0.000000},
  204. {-9.526279, -5.500000, 0.000000},
  205. {-10.625184, -2.847009, 0.000000},
  206. {-11.000000, 0.000000, 0.000000},
  207. {-10.625184, 2.847009, 0.000000},
  208. {-9.526279, 5.500000, 0.000000},
  209. {-7.778174, 7.778174, 0.000000},
  210. {-5.500000, 9.526279, 0.000000},
  211. {-2.847009, 10.625184, 0.000000},
  212. {0.000000, 11.000000, 0.000000},
  213. {2.847009, 10.625184, 0.000000},
  214. {5.500000, 9.526279, 0.000000},
  215. {7.778174, 7.778174, 0.000000},
  216. {9.526279, 5.500000, 0.000000},
  217. {10.625184, 2.847009, 0.000000},
  218. {11.000000, 0.000000, 0.000000},
  219.     },
  220.      {
  221. {10.707107, 0.000000, -0.707107},
  222. {10.342271, -2.771203, -0.707107},
  223. {9.272627, -5.353553, -0.707107},
  224. {7.571068, -7.571068, -0.707107},
  225. {5.353553, -9.272627, -0.707107},
  226. {2.771203, -10.342271, -0.707107},
  227. {0.000000, -10.707107, -0.707107},
  228. {-2.771203, -10.342271, -0.707107},
  229. {-5.353553, -9.272627, -0.707107},
  230. {-7.571068, -7.571068, -0.707107},
  231. {-9.272627, -5.353553, -0.707107},
  232. {-10.342271, -2.771203, -0.707107},
  233. {-10.707107, 0.000000, -0.707107},
  234. {-10.342271, 2.771203, -0.707107},
  235. {-9.272627, 5.353553, -0.707107},
  236. {-7.571068, 7.571068, -0.707107},
  237. {-5.353553, 9.272627, -0.707107},
  238. {-2.771203, 10.342271, -0.707107},
  239. {0.000000, 10.707107, -0.707107},
  240. {2.771203, 10.342271, -0.707107},
  241. {5.353553, 9.272627, -0.707107},
  242. {7.571068, 7.571068, -0.707107},
  243. {9.272627, 5.353553, -0.707107},
  244. {10.342271, 2.771203, -0.707107},
  245. {10.707107, 0.000000, -0.707107},
  246.     },
  247.      {
  248. {10.000000, 0.000000, -1.000000},
  249. {9.659258, -2.588191, -1.000000},
  250. {8.660254, -5.000000, -1.000000},
  251. {7.071068, -7.071068, -1.000000},
  252. {5.000000, -8.660254, -1.000000},
  253. {2.588191, -9.659258, -1.000000},
  254. {0.000000, -10.000000, -1.000000},
  255. {-2.588191, -9.659258, -1.000000},
  256. {-5.000000, -8.660254, -1.000000},
  257. {-7.071068, -7.071068, -1.000000},
  258. {-8.660254, -5.000000, -1.000000},
  259. {-9.659258, -2.588191, -1.000000},
  260. {-10.000000, 0.000000, -1.000000},
  261. {-9.659258, 2.588191, -1.000000},
  262. {-8.660254, 5.000000, -1.000000},
  263. {-7.071068, 7.071068, -1.000000},
  264. {-5.000000, 8.660254, -1.000000},
  265. {-2.588191, 9.659258, -1.000000},
  266. {0.000000, 10.000000, -1.000000},
  267. {2.588191, 9.659258, -1.000000},
  268. {5.000000, 8.660254, -1.000000},
  269. {7.071068, 7.071068, -1.000000},
  270. {8.660254, 5.000000, -1.000000},
  271. {9.659258, 2.588191, -1.000000},
  272. {10.000000, 0.000000, -1.000000},
  273.     },
  274.      {
  275. {9.292893, 0.000000, -0.707107},
  276. {8.976246, -2.405178, -0.707107},
  277. {8.047881, -4.646447, -0.707107},
  278. {6.571068, -6.571068, -0.707107},
  279. {4.646447, -8.047881, -0.707107},
  280. {2.405178, -8.976246, -0.707107},
  281. {0.000000, -9.292893, -0.707107},
  282. {-2.405178, -8.976246, -0.707107},
  283. {-4.646447, -8.047881, -0.707107},
  284. {-6.571068, -6.571068, -0.707107},
  285. {-8.047881, -4.646447, -0.707107},
  286. {-8.976246, -2.405178, -0.707107},
  287. {-9.292893, 0.000000, -0.707107},
  288. {-8.976246, 2.405178, -0.707107},
  289. {-8.047881, 4.646447, -0.707107},
  290. {-6.571068, 6.571068, -0.707107},
  291. {-4.646447, 8.047881, -0.707107},
  292. {-2.405178, 8.976246, -0.707107},
  293. {0.000000, 9.292893, -0.707107},
  294. {2.405178, 8.976246, -0.707107},
  295. {4.646447, 8.047881, -0.707107},
  296. {6.571068, 6.571068, -0.707107},
  297. {8.047881, 4.646447, -0.707107},
  298. {8.976246, 2.405178, -0.707107},
  299. {9.292893, 0.000000, -0.707107},
  300.     },
  301.      {
  302. {9.000000, 0.000000, 0.000000},
  303. {8.693333, -2.329371, 0.000000},
  304. {7.794229, -4.500000, 0.000000},
  305. {6.363961, -6.363961, 0.000000},
  306. {4.500000, -7.794229, 0.000000},
  307. {2.329371, -8.693333, 0.000000},
  308. {0.000000, -9.000000, 0.000000},
  309. {-2.329371, -8.693333, 0.000000},
  310. {-4.500000, -7.794229, 0.000000},
  311. {-6.363961, -6.363961, 0.000000},
  312. {-7.794229, -4.500000, 0.000000},
  313. {-8.693333, -2.329371, 0.000000},
  314. {-9.000000, 0.000000, 0.000000},
  315. {-8.693333, 2.329371, 0.000000},
  316. {-7.794229, 4.500000, 0.000000},
  317. {-6.363961, 6.363961, 0.000000},
  318. {-4.500000, 7.794229, 0.000000},
  319. {-2.329371, 8.693333, 0.000000},
  320. {0.000000, 9.000000, 0.000000},
  321. {2.329371, 8.693333, 0.000000},
  322. {4.500000, 7.794229, 0.000000},
  323. {6.363961, 6.363961, 0.000000},
  324. {7.794229, 4.500000, 0.000000},
  325. {8.693333, 2.329371, 0.000000},
  326. {9.000000, 0.000000, 0.000000},
  327.     },
  328.      {
  329. {9.292893, 0.000000, 0.707107},
  330. {8.976246, -2.405178, 0.707107},
  331. {8.047881, -4.646447, 0.707107},
  332. {6.571068, -6.571068, 0.707107},
  333. {4.646447, -8.047881, 0.707107},
  334. {2.405178, -8.976246, 0.707107},
  335. {0.000000, -9.292893, 0.707107},
  336. {-2.405178, -8.976246, 0.707107},
  337. {-4.646447, -8.047881, 0.707107},
  338. {-6.571068, -6.571068, 0.707107},
  339. {-8.047881, -4.646447, 0.707107},
  340. {-8.976246, -2.405178, 0.707107},
  341. {-9.292893, 0.000000, 0.707107},
  342. {-8.976246, 2.405178, 0.707107},
  343. {-8.047881, 4.646447, 0.707107},
  344. {-6.571068, 6.571068, 0.707107},
  345. {-4.646447, 8.047881, 0.707107},
  346. {-2.405178, 8.976246, 0.707107},
  347. {0.000000, 9.292893, 0.707107},
  348. {2.405178, 8.976246, 0.707107},
  349. {4.646447, 8.047881, 0.707107},
  350. {6.571068, 6.571068, 0.707107},
  351. {8.047881, 4.646447, 0.707107},
  352. {8.976246, 2.405178, 0.707107},
  353. {9.292893, 0.000000, 0.707107},
  354.     },
  355.      {
  356. {10.000000, 0.000000, 1.000000},
  357. {9.659258, -2.588191, 1.000000},
  358. {8.660254, -5.000000, 1.000000},
  359. {7.071068, -7.071068, 1.000000},
  360. {5.000000, -8.660254, 1.000000},
  361. {2.588191, -9.659258, 1.000000},
  362. {0.000000, -10.000000, 1.000000},
  363. {-2.588191, -9.659258, 1.000000},
  364. {-5.000000, -8.660254, 1.000000},
  365. {-7.071068, -7.071068, 1.000000},
  366. {-8.660254, -5.000000, 1.000000},
  367. {-9.659258, -2.588191, 1.000000},
  368. {-10.000000, 0.000000, 1.000000},
  369. {-9.659258, 2.588191, 1.000000},
  370. {-8.660254, 5.000000, 1.000000},
  371. {-7.071068, 7.071068, 1.000000},
  372. {-5.000000, 8.660254, 1.000000},
  373. {-2.588191, 9.659258, 1.000000},
  374. {0.000000, 10.000000, 1.000000},
  375. {2.588191, 9.659258, 1.000000},
  376. {5.000000, 8.660254, 1.000000},
  377. {7.071068, 7.071068, 1.000000},
  378. {8.660254, 5.000000, 1.000000},
  379. {9.659258, 2.588191, 1.000000},
  380. {10.000000, 0.000000, 1.000000},
  381.     },
  382. };
  383. float ltn[9][25][3] = {
  384.     {
  385. {0.000000, 0.000000, 1.000000},
  386. {0.000000, 0.000000, 1.000000},
  387. {0.000000, 0.000000, 1.000000},
  388. {0.000000, 0.000000, 1.000000},
  389. {0.000000, 0.000000, 1.000000},
  390. {0.000000, 0.000000, 1.000000},
  391. {0.000000, 0.000000, 1.000000},
  392. {0.000000, 0.000000, 1.000000},
  393. {0.000000, 0.000000, 1.000000},
  394. {0.000000, 0.000000, 1.000000},
  395. {0.000000, 0.000000, 1.000000},
  396. {0.000000, 0.000000, 1.000000},
  397. {0.000000, 0.000000, 1.000000},
  398. {0.000000, 0.000000, 1.000000},
  399. {0.000000, 0.000000, 1.000000},
  400. {0.000000, 0.000000, 1.000000},
  401. {0.000000, 0.000000, 1.000000},
  402. {0.000000, 0.000000, 1.000000},
  403. {0.000000, 0.000000, 1.000000},
  404. {0.000000, 0.000000, 1.000000},
  405. {0.000000, 0.000000, 1.000000},
  406. {0.000000, 0.000000, 1.000000},
  407. {0.000000, 0.000000, 1.000000},
  408. {0.000000, 0.000000, 1.000000},
  409. {0.000000, 0.000000, 1.000000},
  410.     },
  411.     {
  412. {0.707107, 0.000000, 0.707107},
  413. {0.683013, -0.183013, 0.707107},
  414. {0.612372, -0.353553, 0.707107},
  415. {0.500000, -0.500000, 0.707107},
  416. {0.353553, -0.612372, 0.707107},
  417. {0.183013, -0.683013, 0.707107},
  418. {0.000000, -0.707107, 0.707107},
  419. {-0.183013, -0.683013, 0.707107},
  420. {-0.353553, -0.612372, 0.707107},
  421. {-0.500000, -0.500000, 0.707107},
  422. {-0.612372, -0.353553, 0.707107},
  423. {-0.683013, -0.183013, 0.707107},
  424. {-0.707107, 0.000000, 0.707107},
  425. {-0.683013, 0.183013, 0.707107},
  426. {-0.612372, 0.353553, 0.707107},
  427. {-0.500000, 0.500000, 0.707107},
  428. {-0.353553, 0.612372, 0.707107},
  429. {-0.183013, 0.683013, 0.707107},
  430. {0.000000, 0.707107, 0.707107},
  431. {0.183013, 0.683013, 0.707107},
  432. {0.353553, 0.612372, 0.707107},
  433. {0.500000, 0.500000, 0.707107},
  434. {0.612372, 0.353553, 0.707107},
  435. {0.683013, 0.183013, 0.707107},
  436. {0.707107, 0.000000, 0.707107},
  437.     },
  438.     {
  439. {1.000000, 0.000000, 0.000000},
  440. {0.965926, -0.258819, 0.000000},
  441. {0.866025, -0.500000, 0.000000},
  442. {0.707107, -0.707107, 0.000000},
  443. {0.500000, -0.866025, 0.000000},
  444. {0.258819, -0.965926, 0.000000},
  445. {0.000000, -1.000000, 0.000000},
  446. {-0.258819, -0.965926, 0.000000},
  447. {-0.500000, -0.866025, 0.000000},
  448. {-0.707107, -0.707107, 0.000000},
  449. {-0.866025, -0.500000, 0.000000},
  450. {-0.965926, -0.258819, 0.000000},
  451. {-1.000000, 0.000000, 0.000000},
  452. {-0.965926, 0.258819, 0.000000},
  453. {-0.866025, 0.500000, 0.000000},
  454. {-0.707107, 0.707107, 0.000000},
  455. {-0.500000, 0.866025, 0.000000},
  456. {-0.258819, 0.965926, 0.000000},
  457. {0.000000, 1.000000, 0.000000},
  458. {0.258819, 0.965926, 0.000000},
  459. {0.500000, 0.866025, 0.000000},
  460. {0.707107, 0.707107, 0.000000},
  461. {0.866025, 0.500000, 0.000000},
  462. {0.965926, 0.258819, 0.000000},
  463. {1.000000, 0.000000, 0.000000},
  464.     },
  465.     {
  466. {0.707107, 0.000000, -0.707107},
  467. {0.683013, -0.183013, -0.707107},
  468. {0.612372, -0.353553, -0.707107},
  469. {0.500000, -0.500000, -0.707107},
  470. {0.353553, -0.612372, -0.707107},
  471. {0.183013, -0.683013, -0.707107},
  472. {0.000000, -0.707107, -0.707107},
  473. {-0.183013, -0.683013, -0.707107},
  474. {-0.353553, -0.612372, -0.707107},
  475. {-0.500000, -0.500000, -0.707107},
  476. {-0.612372, -0.353553, -0.707107},
  477. {-0.683013, -0.183013, -0.707107},
  478. {-0.707107, 0.000000, -0.707107},
  479. {-0.683013, 0.183013, -0.707107},
  480. {-0.612372, 0.353553, -0.707107},
  481. {-0.500000, 0.500000, -0.707107},
  482. {-0.353553, 0.612372, -0.707107},
  483. {-0.183013, 0.683013, -0.707107},
  484. {0.000000, 0.707107, -0.707107},
  485. {0.183013, 0.683013, -0.707107},
  486. {0.353553, 0.612372, -0.707107},
  487. {0.500000, 0.500000, -0.707107},
  488. {0.612372, 0.353553, -0.707107},
  489. {0.683013, 0.183013, -0.707107},
  490. {0.707107, 0.000000, -0.707107},
  491.     },
  492.     {
  493. {0.000000, 0.000000, -1.000000},
  494. {0.000000, 0.000000, -1.000000},
  495. {0.000000, 0.000000, -1.000000},
  496. {0.000000, 0.000000, -1.000000},
  497. {0.000000, 0.000000, -1.000000},
  498. {0.000000, 0.000000, -1.000000},
  499. {0.000000, 0.000000, -1.000000},
  500. {0.000000, 0.000000, -1.000000},
  501. {0.000000, 0.000000, -1.000000},
  502. {0.000000, 0.000000, -1.000000},
  503. {0.000000, 0.000000, -1.000000},
  504. {0.000000, 0.000000, -1.000000},
  505. {0.000000, 0.000000, -1.000000},
  506. {0.000000, 0.000000, -1.000000},
  507. {0.000000, 0.000000, -1.000000},
  508. {0.000000, 0.000000, -1.000000},
  509. {0.000000, 0.000000, -1.000000},
  510. {0.000000, 0.000000, -1.000000},
  511. {0.000000, 0.000000, -1.000000},
  512. {0.000000, 0.000000, -1.000000},
  513. {0.000000, 0.000000, -1.000000},
  514. {0.000000, 0.000000, -1.000000},
  515. {0.000000, 0.000000, -1.000000},
  516. {0.000000, 0.000000, -1.000000},
  517. {0.000000, 0.000000, -1.000000},
  518.     },
  519.     {
  520. {-0.707107, 0.000000, -0.707107},
  521. {-0.683013, 0.183013, -0.707107},
  522. {-0.612372, 0.353553, -0.707107},
  523. {-0.500000, 0.500000, -0.707107},
  524. {-0.353553, 0.612372, -0.707107},
  525. {-0.183013, 0.683013, -0.707107},
  526. {0.000000, 0.707107, -0.707107},
  527. {0.183013, 0.683013, -0.707107},
  528. {0.353553, 0.612372, -0.707107},
  529. {0.500000, 0.500000, -0.707107},
  530. {0.612372, 0.353553, -0.707107},
  531. {0.683013, 0.183013, -0.707107},
  532. {0.707107, 0.000000, -0.707107},
  533. {0.683013, -0.183013, -0.707107},
  534. {0.612372, -0.353553, -0.707107},
  535. {0.500000, -0.500000, -0.707107},
  536. {0.353553, -0.612372, -0.707107},
  537. {0.183013, -0.683013, -0.707107},
  538. {0.000000, -0.707107, -0.707107},
  539. {-0.183013, -0.683013, -0.707107},
  540. {-0.353553, -0.612372, -0.707107},
  541. {-0.500000, -0.500000, -0.707107},
  542. {-0.612372, -0.353553, -0.707107},
  543. {-0.683013, -0.183013, -0.707107},
  544. {-0.707107, 0.000000, -0.707107},
  545.     },
  546.     {
  547. {-1.000000, 0.000000, 0.000000},
  548. {-0.965926, 0.258819, 0.000000},
  549. {-0.866025, 0.500000, 0.000000},
  550. {-0.707107, 0.707107, 0.000000},
  551. {-0.500000, 0.866025, 0.000000},
  552. {-0.258819, 0.965926, 0.000000},
  553. {0.000000, 1.000000, 0.000000},
  554. {0.258819, 0.965926, 0.000000},
  555. {0.500000, 0.866025, 0.000000},
  556. {0.707107, 0.707107, 0.000000},
  557. {0.866025, 0.500000, 0.000000},
  558. {0.965926, 0.258819, 0.000000},
  559. {1.000000, 0.000000, 0.000000},
  560. {0.965926, -0.258819, 0.000000},
  561. {0.866025, -0.500000, 0.000000},
  562. {0.707107, -0.707107, 0.000000},
  563. {0.500000, -0.866025, 0.000000},
  564. {0.258819, -0.965926, 0.000000},
  565. {0.000000, -1.000000, 0.000000},
  566. {-0.258819, -0.965926, 0.000000},
  567. {-0.500000, -0.866025, 0.000000},
  568. {-0.707107, -0.707107, 0.000000},
  569. {-0.866025, -0.500000, 0.000000},
  570. {-0.965926, -0.258819, 0.000000},
  571. {-1.000000, 0.000000, 0.000000},
  572.     },
  573.     {
  574. {-0.707107, 0.000000, 0.707107},
  575. {-0.683013, 0.183013, 0.707107},
  576. {-0.612372, 0.353553, 0.707107},
  577. {-0.500000, 0.500000, 0.707107},
  578. {-0.353553, 0.612372, 0.707107},
  579. {-0.183013, 0.683013, 0.707107},
  580. {0.000000, 0.707107, 0.707107},
  581. {0.183013, 0.683013, 0.707107},
  582. {0.353553, 0.612372, 0.707107},
  583. {0.500000, 0.500000, 0.707107},
  584. {0.612372, 0.353553, 0.707107},
  585. {0.683013, 0.183013, 0.707107},
  586. {0.707107, 0.000000, 0.707107},
  587. {0.683013, -0.183013, 0.707107},
  588. {0.612372, -0.353553, 0.707107},
  589. {0.500000, -0.500000, 0.707107},
  590. {0.353553, -0.612372, 0.707107},
  591. {0.183013, -0.683013, 0.707107},
  592. {0.000000, -0.707107, 0.707107},
  593. {-0.183013, -0.683013, 0.707107},
  594. {-0.353553, -0.612372, 0.707107},
  595. {-0.500000, -0.500000, 0.707107},
  596. {-0.612372, -0.353553, 0.707107},
  597. {-0.683013, -0.183013, 0.707107},
  598. {-0.707107, 0.000000, 0.707107},
  599.     },
  600.     {
  601. {0.000000, 0.000000, 1.000000},
  602. {0.000000, 0.000000, 1.000000},
  603. {0.000000, 0.000000, 1.000000},
  604. {0.000000, 0.000000, 1.000000},
  605. {0.000000, 0.000000, 1.000000},
  606. {0.000000, 0.000000, 1.000000},
  607. {0.000000, 0.000000, 1.000000},
  608. {0.000000, 0.000000, 1.000000},
  609. {0.000000, 0.000000, 1.000000},
  610. {0.000000, 0.000000, 1.000000},
  611. {0.000000, 0.000000, 1.000000},
  612. {0.000000, 0.000000, 1.000000},
  613. {0.000000, 0.000000, 1.000000},
  614. {0.000000, 0.000000, 1.000000},
  615. {0.000000, 0.000000, 1.000000},
  616. {0.000000, 0.000000, 1.000000},
  617. {0.000000, 0.000000, 1.000000},
  618. {0.000000, 0.000000, 1.000000},
  619. {0.000000, 0.000000, 1.000000},
  620. {0.000000, 0.000000, 1.000000},
  621. {0.000000, 0.000000, 1.000000},
  622. {0.000000, 0.000000, 1.000000},
  623. {0.000000, 0.000000, 1.000000},
  624. {0.000000, 0.000000, 1.000000},
  625. {0.000000, 0.000000, 1.000000},
  626.     },
  627. };
  628. void draw_hemisphere(void) {
  629.   glCallList(MAT_HEMISPHERE);
  630.   glEnable(GL_LIGHTING);
  631.   /* CF damn! */
  632.   /* glEnable(GL_NORMALIZE); */
  633. glBegin(GL_TRIANGLE_STRIP);
  634.     glNormal3fv(hp[0][0]); glVertex3fv(hp[0][0]);
  635.     glNormal3fv(hp[1][0]); glVertex3fv(hp[1][0]);
  636.     glNormal3fv(hp[0][1]); glVertex3fv(hp[0][1]);
  637.     glNormal3fv(hp[1][1]); glVertex3fv(hp[1][1]);
  638.     glNormal3fv(hp[0][2]); glVertex3fv(hp[0][2]);
  639.     glNormal3fv(hp[1][2]); glVertex3fv(hp[1][2]);
  640.     glNormal3fv(hp[0][3]); glVertex3fv(hp[0][3]);
  641.     glNormal3fv(hp[1][3]); glVertex3fv(hp[1][3]);
  642.     glNormal3fv(hp[0][4]); glVertex3fv(hp[0][4]);
  643.     glNormal3fv(hp[1][4]); glVertex3fv(hp[1][4]);
  644.     glNormal3fv(hp[0][5]); glVertex3fv(hp[0][5]);
  645.     glNormal3fv(hp[1][5]); glVertex3fv(hp[1][5]);
  646.     glNormal3fv(hp[0][6]); glVertex3fv(hp[0][6]);
  647.     glNormal3fv(hp[1][6]); glVertex3fv(hp[1][6]);
  648.     glNormal3fv(hp[0][7]); glVertex3fv(hp[0][7]);
  649.     glNormal3fv(hp[1][7]); glVertex3fv(hp[1][7]);
  650.     glNormal3fv(hp[0][8]); glVertex3fv(hp[0][8]);
  651.     glNormal3fv(hp[1][8]); glVertex3fv(hp[1][8]);
  652.     glNormal3fv(hp[0][9]); glVertex3fv(hp[0][9]);
  653.     glNormal3fv(hp[1][9]); glVertex3fv(hp[1][9]);
  654.     glNormal3fv(hp[0][10]); glVertex3fv(hp[0][10]);
  655.     glNormal3fv(hp[1][10]); glVertex3fv(hp[1][10]);
  656.     glNormal3fv(hp[0][11]); glVertex3fv(hp[0][11]);
  657.     glNormal3fv(hp[1][11]); glVertex3fv(hp[1][11]);
  658.     glNormal3fv(hp[0][12]); glVertex3fv(hp[0][12]);
  659.     glNormal3fv(hp[1][12]); glVertex3fv(hp[1][12]);
  660. glEnd();
  661. glBegin(GL_TRIANGLE_STRIP);
  662.     glNormal3fv(hp[1][0]); glVertex3fv(hp[1][0]);
  663.     glNormal3fv(hp[2][0]); glVertex3fv(hp[2][0]);
  664.     glNormal3fv(hp[1][1]); glVertex3fv(hp[1][1]);
  665.     glNormal3fv(hp[2][1]); glVertex3fv(hp[2][1]);
  666.     glNormal3fv(hp[1][2]); glVertex3fv(hp[1][2]);
  667.     glNormal3fv(hp[2][2]); glVertex3fv(hp[2][2]);
  668.     glNormal3fv(hp[1][3]); glVertex3fv(hp[1][3]);
  669.     glNormal3fv(hp[2][3]); glVertex3fv(hp[2][3]);
  670.     glNormal3fv(hp[1][4]); glVertex3fv(hp[1][4]);
  671.     glNormal3fv(hp[2][4]); glVertex3fv(hp[2][4]);
  672.     glNormal3fv(hp[1][5]); glVertex3fv(hp[1][5]);
  673.     glNormal3fv(hp[2][5]); glVertex3fv(hp[2][5]);
  674.     glNormal3fv(hp[1][6]); glVertex3fv(hp[1][6]);
  675.     glNormal3fv(hp[2][6]); glVertex3fv(hp[2][6]);
  676.     glNormal3fv(hp[1][7]); glVertex3fv(hp[1][7]);
  677.     glNormal3fv(hp[2][7]); glVertex3fv(hp[2][7]);
  678.     glNormal3fv(hp[1][8]); glVertex3fv(hp[1][8]);
  679.     glNormal3fv(hp[2][8]); glVertex3fv(hp[2][8]);
  680.     glNormal3fv(hp[1][9]); glVertex3fv(hp[1][9]);
  681.     glNormal3fv(hp[2][9]); glVertex3fv(hp[2][9]);
  682.     glNormal3fv(hp[1][10]); glVertex3fv(hp[1][10]);
  683.     glNormal3fv(hp[2][10]); glVertex3fv(hp[2][10]);
  684.     glNormal3fv(hp[1][11]); glVertex3fv(hp[1][11]);
  685.     glNormal3fv(hp[2][11]); glVertex3fv(hp[2][11]);
  686.     glNormal3fv(hp[1][12]); glVertex3fv(hp[1][12]);
  687.     glNormal3fv(hp[2][12]); glVertex3fv(hp[2][12]);
  688. glEnd();
  689. glBegin(GL_TRIANGLE_STRIP);
  690.     glNormal3fv(hp[2][0]); glVertex3fv(hp[2][0]);
  691.     glNormal3fv(hp[3][0]); glVertex3fv(hp[3][0]);
  692.     glNormal3fv(hp[2][1]); glVertex3fv(hp[2][1]);
  693.     glNormal3fv(hp[3][1]); glVertex3fv(hp[3][1]);
  694.     glNormal3fv(hp[2][2]); glVertex3fv(hp[2][2]);
  695.     glNormal3fv(hp[3][2]); glVertex3fv(hp[3][2]);
  696.     glNormal3fv(hp[2][3]); glVertex3fv(hp[2][3]);
  697.     glNormal3fv(hp[3][3]); glVertex3fv(hp[3][3]);
  698.     glNormal3fv(hp[2][4]); glVertex3fv(hp[2][4]);
  699.     glNormal3fv(hp[3][4]); glVertex3fv(hp[3][4]);
  700.     glNormal3fv(hp[2][5]); glVertex3fv(hp[2][5]);
  701.     glNormal3fv(hp[3][5]); glVertex3fv(hp[3][5]);
  702.     glNormal3fv(hp[2][6]); glVertex3fv(hp[2][6]);
  703.     glNormal3fv(hp[3][6]); glVertex3fv(hp[3][6]);
  704.     glNormal3fv(hp[2][7]); glVertex3fv(hp[2][7]);
  705.     glNormal3fv(hp[3][7]); glVertex3fv(hp[3][7]);
  706.     glNormal3fv(hp[2][8]); glVertex3fv(hp[2][8]);
  707.     glNormal3fv(hp[3][8]); glVertex3fv(hp[3][8]);
  708.     glNormal3fv(hp[2][9]); glVertex3fv(hp[2][9]);
  709.     glNormal3fv(hp[3][9]); glVertex3fv(hp[3][9]);
  710.     glNormal3fv(hp[2][10]); glVertex3fv(hp[2][10]);
  711.     glNormal3fv(hp[3][10]); glVertex3fv(hp[3][10]);
  712.     glNormal3fv(hp[2][11]); glVertex3fv(hp[2][11]);
  713.     glNormal3fv(hp[3][11]); glVertex3fv(hp[3][11]);
  714.     glNormal3fv(hp[2][12]); glVertex3fv(hp[2][12]);
  715.     glNormal3fv(hp[3][12]); glVertex3fv(hp[3][12]);
  716. glEnd();
  717. glBegin(GL_TRIANGLE_STRIP);
  718.     glNormal3fv(hp[3][0]); glVertex3fv(hp[3][0]);
  719.     glNormal3fv(hp[4][0]); glVertex3fv(hp[4][0]);
  720.     glNormal3fv(hp[3][1]); glVertex3fv(hp[3][1]);
  721.     glNormal3fv(hp[4][1]); glVertex3fv(hp[4][1]);
  722.     glNormal3fv(hp[3][2]); glVertex3fv(hp[3][2]);
  723.     glNormal3fv(hp[4][2]); glVertex3fv(hp[4][2]);
  724.     glNormal3fv(hp[3][3]); glVertex3fv(hp[3][3]);
  725.     glNormal3fv(hp[4][3]); glVertex3fv(hp[4][3]);
  726.     glNormal3fv(hp[3][4]); glVertex3fv(hp[3][4]);
  727.     glNormal3fv(hp[4][4]); glVertex3fv(hp[4][4]);
  728.     glNormal3fv(hp[3][5]); glVertex3fv(hp[3][5]);
  729.     glNormal3fv(hp[4][5]); glVertex3fv(hp[4][5]);
  730.     glNormal3fv(hp[3][6]); glVertex3fv(hp[3][6]);
  731.     glNormal3fv(hp[4][6]); glVertex3fv(hp[4][6]);
  732.     glNormal3fv(hp[3][7]); glVertex3fv(hp[3][7]);
  733.     glNormal3fv(hp[4][7]); glVertex3fv(hp[4][7]);
  734.     glNormal3fv(hp[3][8]); glVertex3fv(hp[3][8]);
  735.     glNormal3fv(hp[4][8]); glVertex3fv(hp[4][8]);
  736.     glNormal3fv(hp[3][9]); glVertex3fv(hp[3][9]);
  737.     glNormal3fv(hp[4][9]); glVertex3fv(hp[4][9]);
  738.     glNormal3fv(hp[3][10]); glVertex3fv(hp[3][10]);
  739.     glNormal3fv(hp[4][10]); glVertex3fv(hp[4][10]);
  740.     glNormal3fv(hp[3][11]); glVertex3fv(hp[3][11]);
  741.     glNormal3fv(hp[4][11]); glVertex3fv(hp[4][11]);
  742.     glNormal3fv(hp[3][12]); glVertex3fv(hp[3][12]);
  743.     glNormal3fv(hp[4][12]); glVertex3fv(hp[4][12]);
  744. glEnd();
  745. glBegin(GL_TRIANGLE_STRIP);
  746.     glNormal3fv(hp[4][0]); glVertex3fv(hp[4][0]);
  747.     glNormal3fv(hp[5][0]); glVertex3fv(hp[5][0]);
  748.     glNormal3fv(hp[4][1]); glVertex3fv(hp[4][1]);
  749.     glNormal3fv(hp[5][1]); glVertex3fv(hp[5][1]);
  750.     glNormal3fv(hp[4][2]); glVertex3fv(hp[4][2]);
  751.     glNormal3fv(hp[5][2]); glVertex3fv(hp[5][2]);
  752.     glNormal3fv(hp[4][3]); glVertex3fv(hp[4][3]);
  753.     glNormal3fv(hp[5][3]); glVertex3fv(hp[5][3]);
  754.     glNormal3fv(hp[4][4]); glVertex3fv(hp[4][4]);
  755.     glNormal3fv(hp[5][4]); glVertex3fv(hp[5][4]);
  756.     glNormal3fv(hp[4][5]); glVertex3fv(hp[4][5]);
  757.     glNormal3fv(hp[5][5]); glVertex3fv(hp[5][5]);
  758.     glNormal3fv(hp[4][6]); glVertex3fv(hp[4][6]);
  759.     glNormal3fv(hp[5][6]); glVertex3fv(hp[5][6]);
  760.     glNormal3fv(hp[4][7]); glVertex3fv(hp[4][7]);
  761.     glNormal3fv(hp[5][7]); glVertex3fv(hp[5][7]);
  762.     glNormal3fv(hp[4][8]); glVertex3fv(hp[4][8]);
  763.     glNormal3fv(hp[5][8]); glVertex3fv(hp[5][8]);
  764.     glNormal3fv(hp[4][9]); glVertex3fv(hp[4][9]);
  765.     glNormal3fv(hp[5][9]); glVertex3fv(hp[5][9]);
  766.     glNormal3fv(hp[4][10]); glVertex3fv(hp[4][10]);
  767.     glNormal3fv(hp[5][10]); glVertex3fv(hp[5][10]);
  768.     glNormal3fv(hp[4][11]); glVertex3fv(hp[4][11]);
  769.     glNormal3fv(hp[5][11]); glVertex3fv(hp[5][11]);
  770.     glNormal3fv(hp[4][12]); glVertex3fv(hp[4][12]);
  771.     glNormal3fv(hp[5][12]); glVertex3fv(hp[5][12]);
  772. glEnd();
  773.   glDisable(GL_LIGHTING);
  774.   glColor3ub(255,  255,  255);
  775.   glBegin(GL_POLYGON);
  776.   glVertex3fv(hp[5][0]);
  777.   glVertex3fv(hp[5][1]);
  778.   glVertex3fv(hp[5][2]);
  779.   glVertex3fv(hp[5][3]);
  780.   glVertex3fv(hp[5][4]);
  781.   glVertex3fv(hp[5][5]);
  782.   glVertex3fv(hp[5][6]);
  783.   glVertex3fv(hp[5][7]);
  784.   glVertex3fv(hp[5][8]);
  785.   glVertex3fv(hp[5][9]);
  786.   glVertex3fv(hp[5][10]);
  787.   glVertex3fv(hp[5][11]);
  788.   glEnd();
  789.   /* CF damn! */
  790.   /* glDisable(GL_NORMALIZE); */
  791. }