<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>鬼の领地 &#187; OpenGL</title>
	<atom:link href="http://blog.upsuper.org/tag/opengl/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.upsuper.org</link>
	<description>the place where there are some ghost appearing...</description>
	<lastBuildDate>Wed, 19 Oct 2011 13:21:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>OpenGL 的小试验（五）</title>
		<link>http://blog.upsuper.org/opengl-small-test-5/</link>
		<comments>http://blog.upsuper.org/opengl-small-test-5/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 03:31:48 +0000</pubDate>
		<dc:creator>upsuper</dc:creator>
				<category><![CDATA[探究学习]]></category>
		<category><![CDATA[OpenGL]]></category>

		<guid isPermaLink="false">http://blog.upsuper.org/?p=707</guid>
		<description><![CDATA[在对光照和面的消除以及碰撞检测进行了些许研究后，改进的 3D Demo 再次出炉。 这次的立体感更强了，因为加入了光照去掉了混合并加上了深度测试。不过开始的时候，因为去掉了混合，不能搞半透明了，本来想直接判断视角然后不绘制立方体相应的面，结果后来无意中发现一个叫做 glCullFace 的东西可以直接去掉某一个平面的一个面（变成透明），于是就把它施在了那个立方体上。（当时参考的资料找不到了……）这样就有了这一个效果：你总是看到你本来看不到的面。 接着就是加光照。不用 CullFace 的情况下，光照没问题，可是一开就变得十分黯淡，不懂得为什么……开始觉得是不是这两个会冲突，但想想又觉得这两个没道理冲突啊……后来终于想到了——法线，因为法线是为外面的面设置的（朝向立方体外），我把所有法线掉一个头，瞬间效果就出来了…… 球什么的还按照原来的方法加好。这次的挑战其实主要是那个碰撞检测。我想了很久，觉得要几乎真实的模拟只有通过大规模的计算进行逐个测试，于是我就这么做了……但事实证明，这样做虽然效果看起来不差，不过由于有碰撞和没碰撞时计算量差异可能非常大，以致瞬间造成“卡”的感觉，同时，我发现所有球停下来后，会叠在一起，而不会像真实那样下面的滚开让上面的下来。不过后面这个就现在的模型来说也没什么办法，因为本来就不是模拟力的，只模拟了个加速度……至于前面那个，我暂时也没想出什么好办法解决，或许可以用一些更简陋的方法来计算，以求更高的速度？ 在 3D 中速度才是王道啊…… 这次还加入了即时显示 fps 的东西，试用了 Google 的 DroidSans 开源字体，体积上还是相当不错的~我基本上是设置了每 0.15s 更新一次显示的 fps。 最后，因为希望整个程序结构清晰一些，把原来的一大个文件分成了好多文件，所以这次必须打包了……还因此顺便又尝试写了个比较大的 Makefile…… 最最后是下载地址：myballs.rar (100.45 KB)]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.upsuper.org/wp-content/uploads/2009/03/myballs-300x234.png" alt="myballs" title="myballs" width="300" height="234" class="alignright size-medium wp-image-708" />在对光照和面的消除以及碰撞检测进行了些许研究后，改进的 3D Demo 再次出炉。</p>
<p>这次的立体感更强了，因为加入了光照去掉了混合并加上了深度测试。不过开始的时候，因为去掉了混合，不能搞半透明了，本来想直接判断视角然后不绘制立方体相应的面，结果后来无意中发现一个叫做 glCullFace 的东西可以直接去掉某一个平面的一个面（变成透明），于是就把它施在了那个立方体上。（当时参考的资料找不到了……）这样就有了这一个效果：你总是看到你本来看不到的面。</p>
<p>接着就是加光照。不用 CullFace 的情况下，光照没问题，可是一开就变得十分黯淡，不懂得为什么……开始觉得是不是这两个会冲突，但想想又觉得这两个没道理冲突啊……后来终于想到了——法线，因为法线是为外面的面设置的（朝向立方体外），我把所有法线掉一个头，瞬间效果就出来了……</p>
<p>球什么的还按照原来的方法加好。这次的挑战其实主要是那个碰撞检测。我想了很久，觉得要几乎真实的模拟只有通过大规模的计算进行逐个测试，于是我就这么做了……但事实证明，这样做虽然效果看起来不差，不过由于有碰撞和没碰撞时计算量差异可能非常大，以致瞬间造成“卡”的感觉，同时，我发现所有球停下来后，会叠在一起，而不会像真实那样下面的滚开让上面的下来。不过后面这个就现在的模型来说也没什么办法，因为本来就不是模拟力的，只模拟了个加速度……至于前面那个，我暂时也没想出什么好办法解决，或许可以用一些更简陋的方法来计算，以求更高的速度？</p>
<p>在 3D 中速度才是王道啊……</p>
<p>这次还加入了即时显示 fps 的东西，试用了 Google 的 DroidSans 开源字体，体积上还是相当不错的~我基本上是设置了每 0.15s 更新一次显示的 fps。</p>
<p>最后，因为希望整个程序结构清晰一些，把原来的一大个文件分成了好多文件，所以这次必须打包了……还因此顺便又尝试写了个比较大的 Makefile……</p>
<p>最最后是下载地址：<a href="http://down.upsuper.org/myballs.rar">myballs.rar</a> (100.45 KB)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.upsuper.org/opengl-small-test-5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OpenGL 的小试验（四）</title>
		<link>http://blog.upsuper.org/opengl-small-test-4/</link>
		<comments>http://blog.upsuper.org/opengl-small-test-4/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 12:10:57 +0000</pubDate>
		<dc:creator>upsuper</dc:creator>
				<category><![CDATA[探究学习]]></category>
		<category><![CDATA[OpenGL]]></category>

		<guid isPermaLink="false">http://blog.upsuper.org/?p=701</guid>
		<description><![CDATA[花了几天完全自己写了个小小的 Demo，本来想把球与球之间的碰撞也写出来的，结果写的太 bug 了，就暂时算了，先发这个了…… 由于这个主要在学校完成，所以就只生成了 for Windows 的版本。同时，为了稍微推广一下，还写了个前端…… 编译好的版本：test2.exe 前端：test2_ui.exe 把这两个放在一个目录就可以用了…… 这一次基本没再参考什么教程，不过等到我发觉我再也写不下去的时候，我才发现其实我要学的东西还很多。写这个看来要有相当好的数学和物理基础，特别是计算几何和运动学（我物理中最差的恰是运动学……）。这次的程序加入了许多控制键，模拟重力效果个人是比较满意的，显示效果等到以后学了再做得更好。 额外的，这个程序会在命令行中输出帧数，本来是用以测试一些优化是否有效的，这下也可以小试一下显卡。 还是先贴程序，编译方法见上一篇中的介绍。这次程序已经过500行了，不过个人感觉程序结构的组织还是比较有序的。中间注释掉的那一大段就是我写的很萎的两球相碰。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.upsuper.org/wp-content/uploads/2009/02/test21-300x232.png" alt="test21" title="test21" width="300" height="232" class="alignright size-medium wp-image-702" />花了几天完全自己写了个小小的 Demo，本来想把球与球之间的碰撞也写出来的，结果写的太 bug 了，就暂时算了，先发这个了……</p>
<p>由于这个主要在学校完成，所以就只生成了 for Windows 的版本。同时，为了稍微推广一下，还写了个前端……</p>
<p>编译好的版本：<a href="http://down.upsuper.org/test2.exe">test2.exe</a><br />
前端：<a href="http://down.upsuper.org/test2_ui.exe">test2_ui.exe</a><br />
把这两个放在一个目录就可以用了……</p>
<p>这一次基本没再参考什么教程，不过等到我发觉我再也写不下去的时候，我才发现其实我要学的东西还很多。写这个看来要有相当好的数学和物理基础，特别是计算几何和运动学（我物理中最差的恰是运动学……）。这次的程序加入了许多控制键，模拟重力效果个人是比较满意的，显示效果等到以后学了再做得更好。</p>
<p>额外的，这个程序会在命令行中输出帧数，本来是用以测试一些优化是否有效的，这下也可以小试一下显卡。<br />
<span id="more-701"></span><br />
还是先贴程序，编译方法见上一篇中的介绍。这次程序已经过500行了，不过个人感觉程序结构的组织还是比较有序的。中间注释掉的那一大段就是我写的很萎的两球相碰。</p>

<div class="wp_codebox"><table><tr id="p7012"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
</pre></td><td class="code" id="p701code2"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;time.h&gt;</span>
<span style="color: #339900;">#include &lt;GL/glfw.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">const</span> GLfloat PI <span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span><span style="color:#800080;">3.14159265358979323846264338327950288</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> point
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> x, y<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> ball
<span style="color: #008000;">&#123;</span>
	GLfloat x, y, z<span style="color: #008080;">;</span>
	GLfloat r, g, b<span style="color: #008080;">;</span>
	GLfloat vx, vy, vz<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> width <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span>, height <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> fullscreen <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> active <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> keys<span style="color: #008000;">&#91;</span>GLFW_KEY_LAST<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> no_gravity <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span>, no_collision_between_sphere <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
GLfloat speed <span style="color: #000080;">=</span> <span style="color:#800080;">1.0f</span><span style="color: #008080;">;</span>
&nbsp;
GLUquadricObj<span style="color: #000040;">*</span> quadratic<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> ball_number <span style="color: #000080;">=</span> <span style="color: #0000dd;">10</span><span style="color: #008080;">;</span>
point origin<span style="color: #008080;">;</span>
ball <span style="color: #000040;">*</span>balls<span style="color: #008080;">;</span>
&nbsp;
GLfloat gravity <span style="color: #000080;">=</span> <span style="color:#800080;">0.001f</span><span style="color: #008080;">;</span>
GLfloat radius <span style="color: #000080;">=</span> <span style="color:#800080;">0.1f</span>, diameter<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> sphere_ss<span style="color: #008080;">;</span>
GLfloat rx, ry, zoom<span style="color: #008080;">;</span>
GLfloat boxsize, hb<span style="color: #008080;">;</span>
GLfloat room1, room2<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> frames <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">double</span> starttime<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> i, j<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> initGLFW<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span>, <span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> GLfloat d2r<span style="color: #008000;">&#40;</span>GLfloat degree<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> degree <span style="color: #000040;">/</span> <span style="color:#800080;">180.0f</span> <span style="color: #000040;">*</span> PI<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> xAdd<span style="color: #008000;">&#40;</span>ball <span style="color: #000040;">&amp;</span>b, GLfloat dist<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	GLfloat ryd <span style="color: #000080;">=</span> d2r<span style="color: #008000;">&#40;</span>ry<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	b.<span style="color: #007788;">vx</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cos</span><span style="color: #008000;">&#40;</span>ryd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> dist<span style="color: #008080;">;</span>
	b.<span style="color: #007788;">vz</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #000040;">-</span>GLfloat<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">sin</span><span style="color: #008000;">&#40;</span>ryd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> dist<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> yAdd<span style="color: #008000;">&#40;</span>ball <span style="color: #000040;">&amp;</span>b, GLfloat dist<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	GLfloat rxd <span style="color: #000080;">=</span> d2r<span style="color: #008000;">&#40;</span>rx<span style="color: #008000;">&#41;</span>, ryd <span style="color: #000080;">=</span> d2r<span style="color: #008000;">&#40;</span>ry<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	b.<span style="color: #007788;">vy</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cos</span><span style="color: #008000;">&#40;</span>rxd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> dist<span style="color: #008080;">;</span>
	dist <span style="color: #000040;">*</span><span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">sin</span><span style="color: #008000;">&#40;</span>rxd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	b.<span style="color: #007788;">vx</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">sin</span><span style="color: #008000;">&#40;</span>ryd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> dist<span style="color: #008080;">;</span>
	b.<span style="color: #007788;">vz</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cos</span><span style="color: #008000;">&#40;</span>ryd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> dist<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> zAdd<span style="color: #008000;">&#40;</span>ball <span style="color: #000040;">&amp;</span>b, GLfloat dist<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	GLfloat rxd <span style="color: #000080;">=</span> <span style="color: #000040;">-</span>d2r<span style="color: #008000;">&#40;</span>rx<span style="color: #008000;">&#41;</span>, ryd <span style="color: #000080;">=</span> d2r<span style="color: #008000;">&#40;</span>ry<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	b.<span style="color: #007788;">vy</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">sin</span><span style="color: #008000;">&#40;</span>rxd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> dist<span style="color: #008080;">;</span>
	dist <span style="color: #000040;">*</span><span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cos</span><span style="color: #008000;">&#40;</span>rxd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	b.<span style="color: #007788;">vx</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">sin</span><span style="color: #008000;">&#40;</span>ryd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> dist<span style="color: #008080;">;</span>
	b.<span style="color: #007788;">vz</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cos</span><span style="color: #008000;">&#40;</span>ryd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> dist<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> GLfloat randf<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> GLfloat<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">/</span> <span style="color: #0000ff;">RAND_MAX</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> initBalls<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> ball_number<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> no_collision_between_sphere<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">int</span> try_count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			GLfloat tx, ty, tz<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>try_count <span style="color: #000080;">&lt;=</span> <span style="color: #0000dd;">10</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
&nbsp;
				<span style="color: #000040;">++</span>try_count<span style="color: #008080;">;</span>
				tx <span style="color: #000080;">=</span> randf<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> room1 <span style="color: #000040;">-</span> room2<span style="color: #008080;">;</span>
				ty <span style="color: #000080;">=</span> randf<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> room1 <span style="color: #000040;">-</span> room2<span style="color: #008080;">;</span>
				tz <span style="color: #000080;">=</span> randf<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> room1 <span style="color: #000040;">-</span> room2<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">bool</span> ok_flag <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> j <span style="color: #000080;">&lt;</span> i<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>j<span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					GLfloat dx <span style="color: #000080;">=</span> balls<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span> <span style="color: #000040;">-</span> tx,
							dy <span style="color: #000080;">=</span> balls<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span> <span style="color: #000040;">-</span> ty,
							dz <span style="color: #000080;">=</span> balls<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">z</span> <span style="color: #000040;">-</span> tz<span style="color: #008080;">;</span>
					dx <span style="color: #000040;">*</span><span style="color: #000080;">=</span> dx<span style="color: #008080;">;</span> dy <span style="color: #000040;">*</span><span style="color: #000080;">=</span> dy<span style="color: #008080;">;</span> dz <span style="color: #000040;">*</span><span style="color: #000080;">=</span> dz<span style="color: #008080;">;</span>
					GLfloat dist <span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">sqrt</span><span style="color: #008000;">&#40;</span>dx <span style="color: #000040;">+</span> dy <span style="color: #000040;">+</span> dz<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dist <span style="color: #000080;">&lt;</span> diameter<span style="color: #008000;">&#41;</span>
					<span style="color: #008000;">&#123;</span>
						ok_flag <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
						<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
					<span style="color: #008000;">&#125;</span>
				<span style="color: #008000;">&#125;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ok_flag<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>try_count <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">10</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Error: I cannot build more than %d ball%s.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, 
					i, i <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">1</span> <span style="color: #008080;">?</span> <span style="color: #FF0000;">&quot;s&quot;</span> <span style="color: #008080;">:</span> <span style="color: #FF0000;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				ball_number <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span> <span style="color: #000080;">=</span> tx<span style="color: #008080;">;</span> balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span> <span style="color: #000080;">=</span> ty<span style="color: #008080;">;</span> balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">z</span> <span style="color: #000080;">=</span> tz<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
		<span style="color: #008000;">&#123;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span> <span style="color: #000080;">=</span> randf<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> room1 <span style="color: #000040;">-</span> room2<span style="color: #008080;">;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span> <span style="color: #000080;">=</span> randf<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> room1 <span style="color: #000040;">-</span> room2<span style="color: #008080;">;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">z</span> <span style="color: #000080;">=</span> randf<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> room1 <span style="color: #000040;">-</span> room2<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vx</span> <span style="color: #000080;">=</span> <span style="color:#800080;">0.0f</span><span style="color: #008080;">;</span>
		balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vy</span> <span style="color: #000080;">=</span> <span style="color:#800080;">0.0f</span><span style="color: #008080;">;</span>
		balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vz</span> <span style="color: #000080;">=</span> <span style="color:#800080;">0.0f</span><span style="color: #008080;">;</span>
		balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">r</span> <span style="color: #000080;">=</span> randf<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">g</span> <span style="color: #000080;">=</span> randf<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">b</span> <span style="color: #000080;">=</span> randf<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> caleBalls<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>GLFW_KEY_HOME<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> ball_number<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> no_gravity<span style="color: #008000;">&#41;</span> yAdd<span style="color: #008000;">&#40;</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, <span style="color: #000040;">-</span>gravity<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vx</span> <span style="color: #000040;">*</span> speed<span style="color: #008080;">;</span>
		balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vy</span> <span style="color: #000040;">*</span> speed<span style="color: #008080;">;</span>
		balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">z</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vz</span> <span style="color: #000040;">*</span> speed<span style="color: #008080;">;</span>
&nbsp;
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span> <span style="color: #000080;">&lt;=</span> <span style="color: #000040;">-</span>room2<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span> <span style="color: #000080;">=</span> <span style="color: #000040;">-</span>room2 <span style="color: #000040;">*</span> <span style="color: #0000dd;">2</span> <span style="color: #000040;">-</span> balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vy</span> <span style="color: #000080;">=</span> <span style="color: #000040;">-</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vy</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span> <span style="color: #000080;">&gt;=</span> room2<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span> <span style="color: #000080;">=</span> room2 <span style="color: #000040;">*</span> <span style="color: #0000dd;">2</span> <span style="color: #000040;">-</span> balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vy</span> <span style="color: #000080;">=</span> <span style="color: #000040;">-</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vy</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span> <span style="color: #000080;">&lt;=</span> <span style="color: #000040;">-</span>room2<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span> <span style="color: #000080;">=</span> <span style="color: #000040;">-</span>room2 <span style="color: #000040;">*</span> <span style="color: #0000dd;">2</span> <span style="color: #000040;">-</span> balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vx</span> <span style="color: #000080;">=</span> <span style="color: #000040;">-</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vx</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span> <span style="color: #000080;">&gt;=</span> room2<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span> <span style="color: #000080;">=</span> room2 <span style="color: #000040;">*</span> <span style="color: #0000dd;">2</span> <span style="color: #000040;">-</span> balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vx</span> <span style="color: #000080;">=</span> <span style="color: #000040;">-</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vx</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">z</span> <span style="color: #000080;">&lt;=</span> <span style="color: #000040;">-</span>room2<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">z</span> <span style="color: #000080;">=</span> <span style="color: #000040;">-</span>room2 <span style="color: #000040;">*</span> <span style="color: #0000dd;">2</span> <span style="color: #000040;">-</span> balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">z</span><span style="color: #008080;">;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vz</span> <span style="color: #000080;">=</span> <span style="color: #000040;">-</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vz</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">z</span> <span style="color: #000080;">&gt;=</span> room2<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">z</span> <span style="color: #000080;">=</span> room2 <span style="color: #000040;">*</span> <span style="color: #0000dd;">2</span> <span style="color: #000040;">-</span> balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">z</span><span style="color: #008080;">;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vz</span> <span style="color: #000080;">=</span> <span style="color: #000040;">-</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vz</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
		<span style="color: #ff0000; font-style: italic;">/*for (j = 0; j &lt; i; ++j)
		{
			GLfloat dx = balls[i].x - balls[j].x,
					dy = balls[i].y - balls[j].y,
					dz = balls[i].z - balls[j].z;
			GLfloat dsq = dx * dx + dy * dy + dz * dz;
			GLfloat dist = GLfloat(sqrt(dsq));
			GLfloat lamda;
			if (dist &gt;= diameter) continue;
&nbsp;
			lamda = (balls[i].vx * dx
					+ balls[i].vy * dy
					+ balls[i].vz * dz) / dsq;
			GLfloat tx1 = lamda * dx,
					ty1 = lamda * dy,
					tz1 = lamda * dz;
			balls[i].vx -= tx1;
			balls[i].vy -= ty1;
			balls[i].vz -= tz1;
&nbsp;
			lamda = (balls[j].vx * dx
					+ balls[j].vy * dy
					+ balls[j].vz * dz) / dsq;
			GLfloat tx2 = lamda * dx,
					ty2 = lamda * dy,
					tz2 = lamda * dz;
			balls[j].vx -= tx2;
			balls[j].vy -= ty2;
			balls[j].vz -= tz2;
&nbsp;
			balls[i].vx += tx2;
			balls[i].vy += ty2;
			balls[i].vz += tz2;
			balls[j].vx += tx1;
			balls[j].vy += ty1;
			balls[j].vz += tz1;
&nbsp;
			dist = (diameter / dist - 1) * 2;
			dsq = GLfloat(fabs(dx * dist));
			if (balls[i].vx * balls[j].vx &lt; 0)
				dsq /= GLfloat(fabs(balls[i].vx) + fabs(balls[j].vx));
			balls[i].x += balls[i].vx * dsq * speed;
			balls[j].x += balls[j].vx * dsq * speed;
&nbsp;
			dsq = GLfloat(fabs(dy * dist));
			if (balls[i].vy * balls[j].vy &lt; 0)
				dsq /= GLfloat(fabs(balls[i].vy) + fabs(balls[j].vy));
			balls[i].y += balls[i].vy * dsq * speed;
			balls[j].y += balls[j].vy * dsq * speed;
&nbsp;
			dsq = GLfloat(fabs(dz * dist));
			if (balls[i].vz * balls[j].vz &lt; 0)
				dsq /= GLfloat(fabs(balls[i].vz) + fabs(balls[j].vz));
			balls[i].z += balls[i].vz * dsq * speed;
			balls[j].z += balls[j].vz * dsq * speed;
		}*/</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> printFPS<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #000040;">++</span>frames<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">double</span> dt <span style="color: #000080;">=</span> glfwGetTime<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">-</span> starttime<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dt <span style="color: #000080;">&gt;=</span> <span style="color:#800080;">5.0</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d frames in %3.1f seconds = %6.3f FPS<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, 
			frames, dt, <span style="color: #0000ff;">double</span><span style="color: #008000;">&#40;</span>frames<span style="color: #008000;">&#41;</span> <span style="color: #000040;">/</span> dt<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		frames <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> starttime <span style="color: #000080;">=</span> glfwGetTime<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> drawGLScene<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	glClear<span style="color: #008000;">&#40;</span>GL_COLOR_BUFFER_BIT <span style="color: #000040;">|</span> GL_DEPTH_BUFFER_BIT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	glLoadIdentity<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glTranslatef<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0</span>, <span style="color:#800080;">0.0</span>, <span style="color: #000040;">-</span>zoom<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glRotatef<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>rx, <span style="color:#800080;">1.0</span>, <span style="color:#800080;">0.0</span>, <span style="color:#800080;">0.0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glRotatef<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>ry, <span style="color:#800080;">0.0</span>, <span style="color:#800080;">1.0</span>, <span style="color:#800080;">0.0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	glBegin<span style="color: #008000;">&#40;</span>GL_QUADS<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor4f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.5f</span>, <span style="color:#800080;">0.3f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>hb, <span style="color: #000040;">-</span>hb,  hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> hb, <span style="color: #000040;">-</span>hb,  hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> hb,  hb,  hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>hb,  hb,  hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glColor4f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.5f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.3f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> hb, <span style="color: #000040;">-</span>hb,  hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> hb, <span style="color: #000040;">-</span>hb, <span style="color: #000040;">-</span>hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> hb,  hb, <span style="color: #000040;">-</span>hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> hb,  hb,  hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glColor4f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.5f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.3f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>hb,  hb,  hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> hb,  hb,  hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> hb,  hb, <span style="color: #000040;">-</span>hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>hb,  hb, <span style="color: #000040;">-</span>hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glColor4f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.5f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.3f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>hb, <span style="color: #000040;">-</span>hb, <span style="color: #000040;">-</span>hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>hb, <span style="color: #000040;">-</span>hb,  hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>hb,  hb,  hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>hb,  hb, <span style="color: #000040;">-</span>hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glColor4f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.5f</span>, <span style="color:#800080;">0.3f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> hb, <span style="color: #000040;">-</span>hb, <span style="color: #000040;">-</span>hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>hb, <span style="color: #000040;">-</span>hb, <span style="color: #000040;">-</span>hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>hb,  hb, <span style="color: #000040;">-</span>hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> hb,  hb, <span style="color: #000040;">-</span>hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glColor4f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.7f</span>, <span style="color:#800080;">0.7f</span>, <span style="color:#800080;">0.7f</span>, <span style="color:#800080;">0.5f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>hb, <span style="color: #000040;">-</span>hb, <span style="color: #000040;">-</span>hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> hb, <span style="color: #000040;">-</span>hb, <span style="color: #000040;">-</span>hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> hb, <span style="color: #000040;">-</span>hb,  hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>hb, <span style="color: #000040;">-</span>hb,  hb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glEnd<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	caleBalls<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> ball_number<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		glTranslatef<span style="color: #008000;">&#40;</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span>, balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span>, balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">z</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor4f<span style="color: #008000;">&#40;</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">r</span>, balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">g</span>, balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">b</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		gluSphere<span style="color: #008000;">&#40;</span>quadratic, radius, sphere_ss, sphere_ss<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTranslatef<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span>, <span style="color: #000040;">-</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span>, <span style="color: #000040;">-</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">z</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	printFPS<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> keyPress<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> key, <span style="color: #0000ff;">int</span> action<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	keys<span style="color: #008000;">&#91;</span>key<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> action <span style="color: #008080;">?</span> <span style="color: #0000ff;">true</span> <span style="color: #008080;">:</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>GLFW_KEY_ESC<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		active <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>GLFW_KEY_F11<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		keys<span style="color: #008000;">&#91;</span>GLFW_KEY_F11<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> GLFW_RELEASE<span style="color: #008080;">;</span>
		glfwTerminate<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		fullscreen <span style="color: #000080;">=</span> <span style="color: #000040;">!</span> fullscreen<span style="color: #008080;">;</span>
		initGLFW<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Upsuper's OpenGL Test&quot;</span>, width, height<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> keyPress<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>GLFW_KEY_KP_ADD<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> zoom <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color:#800080;">0.1f</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>GLFW_KEY_KP_SUBTRACT<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> zoom <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color:#800080;">0.1f</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>GLFW_KEY_PAGEUP<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> ball_number<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
			yAdd<span style="color: #008000;">&#40;</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, gravity <span style="color: #000040;">*</span> <span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>GLFW_KEY_PAGEDOWN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> ball_number<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
			yAdd<span style="color: #008000;">&#40;</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, <span style="color: #000040;">-</span>gravity <span style="color: #000040;">*</span> <span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>GLFW_KEY_UP<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> ball_number<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
			zAdd<span style="color: #008000;">&#40;</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, <span style="color: #000040;">-</span>gravity <span style="color: #000040;">*</span> <span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>GLFW_KEY_DOWN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> ball_number<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
			zAdd<span style="color: #008000;">&#40;</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, gravity <span style="color: #000040;">*</span> <span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>GLFW_KEY_LEFT<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> ball_number<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
			xAdd<span style="color: #008000;">&#40;</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, <span style="color: #000040;">-</span>gravity <span style="color: #000040;">*</span> <span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>GLFW_KEY_RIGHT<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> ball_number<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
			xAdd<span style="color: #008000;">&#40;</span>balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, gravity <span style="color: #000040;">*</span> <span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>GLFW_KEY_HOME<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> ball_number<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
			balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vx</span> <span style="color: #000080;">=</span> balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vy</span> <span style="color: #000080;">=</span> balls<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">vz</span> <span style="color: #000080;">=</span> <span style="color:#800080;">0.0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> checkDegree<span style="color: #008000;">&#40;</span>GLfloat <span style="color: #000040;">&amp;</span>degree<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>degree <span style="color: #000080;">&gt;</span> <span style="color:#800080;">180.0f</span><span style="color: #008000;">&#41;</span> degree <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color:#800080;">360.0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>degree <span style="color: #000080;">&lt;</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">180</span>.<span style="color: #007788;">f</span><span style="color: #008000;">&#41;</span> degree <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color:#800080;">360.0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> mouseMove<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> x, <span style="color: #0000ff;">int</span> y<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> dx <span style="color: #000080;">=</span> x <span style="color: #000040;">-</span> origin.<span style="color: #007788;">x</span>,
		dy <span style="color: #000080;">=</span> y <span style="color: #000040;">-</span> origin.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>
	glfwSetMousePos<span style="color: #008000;">&#40;</span>origin.<span style="color: #007788;">x</span>, origin.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	checkDegree<span style="color: #008000;">&#40;</span>rx <span style="color: #000040;">+</span><span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span>dy<span style="color: #008000;">&#41;</span> <span style="color: #000040;">/</span> <span style="color:#800080;">5.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	checkDegree<span style="color: #008000;">&#40;</span>ry <span style="color: #000040;">+</span><span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span>dx<span style="color: #008000;">&#41;</span> <span style="color: #000040;">/</span> <span style="color:#800080;">5.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> quit<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> status<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	glfwTerminate<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">exit</span><span style="color: #008000;">&#40;</span>status<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> quit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	quit<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> report_error<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> info<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">puts</span><span style="color: #008000;">&#40;</span>info<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	quit<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> resizeGLScene<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> width, <span style="color: #0000ff;">int</span> height<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>height <span style="color: #000080;">&lt;=</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> height <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
&nbsp;
	glViewport<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, width, height<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glMatrixMode<span style="color: #008000;">&#40;</span>GL_PROJECTION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glLoadIdentity<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	gluPerspective<span style="color: #008000;">&#40;</span><span style="color:#800080;">45.0f</span>, GLfloat<span style="color: #008000;">&#40;</span>width<span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span>GLfloat<span style="color: #008000;">&#40;</span>height<span style="color: #008000;">&#41;</span>, <span style="color:#800080;">0.1</span>, <span style="color:#800080;">100.0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	glMatrixMode<span style="color: #008000;">&#40;</span>GL_MODELVIEW<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glLoadIdentity<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> initGL<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> width, <span style="color: #0000ff;">int</span> height<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	glShadeModel<span style="color: #008000;">&#40;</span>GL_SMOOTH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glClearColor<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0</span>, <span style="color:#800080;">0.0</span>, <span style="color:#800080;">0.0</span>, <span style="color:#800080;">0.0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glClearDepth<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glDepthFunc<span style="color: #008000;">&#40;</span>GL_LEQUAL<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glHint<span style="color: #008000;">&#40;</span>GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glDisable<span style="color: #008000;">&#40;</span>GL_DEPTH_TEST<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glEnable<span style="color: #008000;">&#40;</span>GL_BLEND<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glBlendFunc<span style="color: #008000;">&#40;</span>GL_SRC_ALPHA, GL_ONE<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	quadratic <span style="color: #000080;">=</span> gluNewQuadric<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	gluQuadricNormals<span style="color: #008000;">&#40;</span>quadratic, GLU_SMOOTH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	gluQuadricTexture<span style="color: #008000;">&#40;</span>quadratic, GL_TRUE<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> initGLFW<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> title, <span style="color: #0000ff;">int</span> width, <span style="color: #0000ff;">int</span> height<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	glfwInit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glfwOpenWindowHint<span style="color: #008000;">&#40;</span>GLFW_WINDOW_NO_RESIZE, <span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> glfwOpenWindow<span style="color: #008000;">&#40;</span>width, height, <span style="color: #0000dd;">8</span>, <span style="color: #0000dd;">8</span>, <span style="color: #0000dd;">8</span>, <span style="color: #0000dd;">8</span>, <span style="color: #0000dd;">24</span>, <span style="color: #0000dd;">0</span>, 
			fullscreen <span style="color: #008080;">?</span> GLFW_FULLSCREEN <span style="color: #008080;">:</span> GLFW_WINDOW<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		report_error<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;ERROR: Cannot open a window.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glfwSetWindowTitle<span style="color: #008000;">&#40;</span>title<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glfwSetWindowPos<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	origin.<span style="color: #007788;">x</span> <span style="color: #000080;">=</span> width <span style="color: #000040;">/</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span> origin.<span style="color: #007788;">y</span> <span style="color: #000080;">=</span> height <span style="color: #000040;">/</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
	glfwSetMousePos<span style="color: #008000;">&#40;</span>origin.<span style="color: #007788;">x</span>, origin.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glfwDisable<span style="color: #008000;">&#40;</span>GLFW_MOUSE_CURSOR<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glfwSetMousePosCallback<span style="color: #008000;">&#40;</span>mouseMove<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	glfwEnable<span style="color: #008000;">&#40;</span>GLFW_AUTO_POLL_EVENTS<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glfwSetKeyCallback<span style="color: #008000;">&#40;</span>keyPress<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glfwSetWindowSizeCallback<span style="color: #008000;">&#40;</span>resizeGLScene<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	initGL<span style="color: #008000;">&#40;</span>width, height<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> argv<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> argc<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">strcmp</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, <span style="color: #FF0000;">&quot;--window-mode&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			fullscreen <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">strcmp</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, <span style="color: #FF0000;">&quot;--no-gravity&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			no_gravity <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">strcmp</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, <span style="color: #FF0000;">&quot;--no-collision-between-sphere&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			no_collision_between_sphere <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">strcmp</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, <span style="color: #FF0000;">&quot;--width&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			width <span style="color: #000080;">=</span> <span style="color: #0000dd;">atoi</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">strcmp</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, <span style="color: #FF0000;">&quot;--height&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			height <span style="color: #000080;">=</span> <span style="color: #0000dd;">atoi</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">strcmp</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, <span style="color: #FF0000;">&quot;--number&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			ball_number <span style="color: #000080;">=</span> <span style="color: #0000dd;">atoi</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">strcmp</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, <span style="color: #FF0000;">&quot;--box-size&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			boxsize <span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">atof</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">strcmp</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, <span style="color: #FF0000;">&quot;--gravity&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			gravity <span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">atof</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">strcmp</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, <span style="color: #FF0000;">&quot;--radius&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			radius <span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">atof</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">strcmp</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, <span style="color: #FF0000;">&quot;--speed&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			speed <span style="color: #000080;">=</span> GLfloat<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">atof</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>boxsize <span style="color: #000080;">==</span> <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span> boxsize <span style="color: #000080;">=</span> <span style="color:#800080;">5.0f</span><span style="color: #008080;">;</span>
	balls <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> ball<span style="color: #008000;">&#91;</span>ball_number<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
	diameter <span style="color: #000080;">=</span> radius <span style="color: #000040;">*</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
	sphere_ss <span style="color: #000080;">=</span> <span style="color: #0000ff;">int</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">sqrt</span><span style="color: #008000;">&#40;</span>radius<span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> <span style="color: #0000dd;">72</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	hb <span style="color: #000080;">=</span> boxsize <span style="color: #000040;">/</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
	zoom <span style="color: #000080;">=</span> boxsize <span style="color: #000040;">*</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">srand</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">time</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	room1 <span style="color: #000080;">=</span> boxsize <span style="color: #000040;">-</span> diameter<span style="color: #008080;">;</span>
	room2 <span style="color: #000080;">=</span> room1 <span style="color: #000040;">/</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
	initBalls<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	initGLFW<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Upsuper's OpenGL Demo -- Some Balls&quot;</span>, width, height<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	starttime <span style="color: #000080;">=</span> glfwGetTime<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">do</span>
	<span style="color: #008000;">&#123;</span>
		drawGLScene<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glfwSwapBuffers<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		keyPress<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>active<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	quit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.upsuper.org/opengl-small-test-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenGL 的小试验（三）</title>
		<link>http://blog.upsuper.org/opengl-small-test-3/</link>
		<comments>http://blog.upsuper.org/opengl-small-test-3/#comments</comments>
		<pubDate>Sat, 21 Feb 2009 15:53:01 +0000</pubDate>
		<dc:creator>upsuper</dc:creator>
				<category><![CDATA[探究学习]]></category>
		<category><![CDATA[C/C++/C#]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OpenGL]]></category>

		<guid isPermaLink="false">http://blog.upsuper.org/?p=695</guid>
		<description><![CDATA[今天回家本想在我的 Ubuntu 上玩玩 OpenGL，结果花了一个下午，终于研究出些东西了…… 在 NeHe 的源代码中似乎有 Linux 的，不过一个是用 glut、一个是用 SDL、一个是用 GLX，原本看到 glut 是 OpenGL 官方的一个夸平台的简单窗口系统，结果发现全屏不能……于是就找到了 GLFW 这个东西，据说比较简单，不过还是研究了一个下午。 下面说一下研究成果吧，首先，想要用 g++ 编译用 GLFW 写的程序，一定要加这些编译参数： -lglfw -lGL -lGLU -lXrandr，特别是最后一个，是其官方参考中没有的！这个是我查了许多资料，然后瞎猜猜到的……再说说头文件，这次不需要引用3个库了，只有一个 #include &#60;GL/glfw.h&#62; 就可以了，似乎把其他的库自动引用了。另外就是，画完要用 glfwSwapBuffers(); 刷新，不然不仅什么都不会显示，而且还会死机……除此之外，还要注意那个键盘的按键，不要想当然的和 Windows 下拿去类比，根据研究发现，键盘事件交出的 key 最大可以达到 318，而且特殊键都会以这些“大值”返回，所以一定要申请好内存…… 这次主要参考了： GLFW Reference OpenGL Tutorials &#8211; Basics 以及 NeHe 的 OpenGL 教程。 这个例子是一个转动的彩色四棱锥，只有 ESC 和 F11 的键盘处理，附加帧数计算。 1 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.upsuper.org/wp-content/uploads/2009/02/screenshot-opengl-300x234.png" alt="screenshot-opengl" title="screenshot-opengl" width="300" height="234" class="alignright size-medium wp-image-696" />今天回家本想在我的 Ubuntu 上玩玩 OpenGL，结果花了一个下午，终于研究出些东西了……</p>
<p>在 NeHe 的源代码中似乎有 Linux 的，不过一个是用 glut、一个是用 SDL、一个是用 GLX，原本看到 glut 是 OpenGL 官方的一个夸平台的简单窗口系统，结果发现全屏不能……于是就找到了 GLFW 这个东西，据说比较简单，不过还是研究了一个下午。</p>
<p>下面说一下研究成果吧，首先，想要用 g++ 编译用 GLFW 写的程序，一定要加这些编译参数： -lglfw -lGL -lGLU -lXrandr，特别是最后一个，是其官方参考中没有的！这个是我查了许多资料，然后瞎猜猜到的……再说说头文件，这次不需要引用3个库了，只有一个 #include &lt;GL/glfw.h&gt; 就可以了，似乎把其他的库自动引用了。另外就是，画完要用 glfwSwapBuffers(); 刷新，不然不仅什么都不会显示，而且还会死机……除此之外，还要注意那个键盘的按键，不要想当然的和 Windows 下拿去类比，根据研究发现，键盘事件交出的 key 最大可以达到 318，而且特殊键都会以这些“大值”返回，所以一定要申请好内存……</p>
<p>这次主要参考了：<br />
<a href="http://glfw.sourceforge.net/GLFWReference26.pdf">GLFW Reference</a><br />
<a href="http://glfw.sourceforge.net/tutorials/basics.html">OpenGL Tutorials &#8211; Basics</a><br />
以及 NeHe 的 OpenGL 教程。<br />
<span id="more-695"></span><br />
这个例子是一个转动的彩色四棱锥，只有 ESC 和 F11 的键盘处理，附加帧数计算。</p>

<div class="wp_codebox"><table><tr id="p6955"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
</pre></td><td class="code" id="p695code5"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #339900;">#include &lt;unistd.h&gt;</span>
<span style="color: #339900;">#include &lt;GL/glfw.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> fullscreen<span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> active <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> keys<span style="color: #008000;">&#91;</span>GLFW_KEY_LAST<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// 为键盘按键申请空间</span>
&nbsp;
GLfloat rtri<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> initGLFW<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span>, <span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// 帧数统计用</span>
<span style="color: #0000ff;">double</span> starttime<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> flames <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// 绘制代码</span>
<span style="color: #0000ff;">void</span> drawGLScene<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	glClear<span style="color: #008000;">&#40;</span>GL_COLOR_BUFFER_BIT <span style="color: #000040;">|</span> GL_DEPTH_BUFFER_BIT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glLoadIdentity<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	glTranslatef<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">5.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glRotatef<span style="color: #008000;">&#40;</span>rtri, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glBegin<span style="color: #008000;">&#40;</span>GL_TRIANGLES<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">0.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">0.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">0.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">0.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glEnd<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #000040;">++</span>flames<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">double</span> dt <span style="color: #000080;">=</span> glfwGetTime<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">-</span> starttime<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dt <span style="color: #000080;">&gt;=</span> <span style="color:#800080;">5.0f</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d frames in %.1lf seconds = %.3lf FPSn&quot;</span>, flames, dt, <span style="color: #0000ff;">double</span><span style="color: #008000;">&#40;</span>flames<span style="color: #008000;">&#41;</span> <span style="color: #000040;">/</span> dt<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		flames <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		st <span style="color: #000080;">=</span> glfwGetTime<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	rtri <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color:#800080;">0.15f</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">// 键盘处理</span>
<span style="color: #0000ff;">void</span> keyPress<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> key, <span style="color: #0000ff;">int</span> action<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	keys<span style="color: #008000;">&#91;</span>key<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> action<span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>GLFW_KEY_ESC<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		active <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>GLFW_KEY_F11<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		keys<span style="color: #008000;">&#91;</span>GLFW_KEY_F11<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> GLFW_RELEASE<span style="color: #008080;">;</span>
		glfwTerminate<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		fullscreen <span style="color: #000080;">=</span> <span style="color: #000040;">!</span> fullscreen<span style="color: #008080;">;</span>
		initGLFW<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Upsuper's OpenGL Test&quot;</span>, <span style="color: #0000dd;">640</span>, <span style="color: #0000dd;">480</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> quit<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> status<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	glfwTerminate<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">exit</span><span style="color: #008000;">&#40;</span>status<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> quit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	quit<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> report_error<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> info<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">puts</span><span style="color: #008000;">&#40;</span>info<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	quit<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> resizeGLScene<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> width, <span style="color: #0000ff;">int</span> height<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>height <span style="color: #000080;">&lt;=</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> height <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
&nbsp;
	glViewport<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, width, height<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glMatrixMode<span style="color: #008000;">&#40;</span>GL_PROJECTION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glLoadIdentity<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	gluPerspective<span style="color: #008000;">&#40;</span><span style="color:#800080;">45.0f</span>, GLfloat<span style="color: #008000;">&#40;</span>width<span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span>GLfloat<span style="color: #008000;">&#40;</span>height<span style="color: #008000;">&#41;</span>, <span style="color:#800080;">0.1f</span>, <span style="color:#800080;">100.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	glMatrixMode<span style="color: #008000;">&#40;</span>GL_MODELVIEW<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glLoadIdentity<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> initGL<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> width, <span style="color: #0000ff;">int</span> height<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	glShadeModel<span style="color: #008000;">&#40;</span>GL_SMOOTH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glClearColor<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glClearDepth<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glEnable<span style="color: #008000;">&#40;</span>GL_DEPTH_TEST<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glDepthFunc<span style="color: #008000;">&#40;</span>GL_LEQUAL<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glHint<span style="color: #008000;">&#40;</span>GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> initGLFW<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> title, <span style="color: #0000ff;">int</span> width, <span style="color: #0000ff;">int</span> height<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	glfwInit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> glfwOpenWindow<span style="color: #008000;">&#40;</span>width, height, <span style="color: #0000dd;">8</span>, <span style="color: #0000dd;">8</span>, <span style="color: #0000dd;">8</span>, <span style="color: #0000dd;">8</span>, <span style="color: #0000dd;">24</span>, <span style="color: #0000dd;">0</span>, 
			fullscreen <span style="color: #008080;">?</span> GLFW_FULLSCREEN <span style="color: #008080;">:</span> GLFW_WINDOW<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		report_error<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;ERROR: Cannot open a window.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glfwSetWindowTitle<span style="color: #008000;">&#40;</span>title<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glfwEnable<span style="color: #008000;">&#40;</span>GLFW_AUTO_POLL_EVENTS<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glfwSetKeyCallback<span style="color: #008000;">&#40;</span>keyPress<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glfwSetWindowSizeCallback<span style="color: #008000;">&#40;</span>resizeGLScene<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	initGL<span style="color: #008000;">&#40;</span>width, height<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">char</span><span style="color: #000040;">**</span> argv<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Would you like to run in fullscreen mode? [Y/n]&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> c <span style="color: #000080;">=</span> <span style="color: #0000dd;">getchar</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	fullscreen <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>c <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #FF0000;">'n'</span> <span style="color: #000040;">&amp;&amp;</span> c <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #FF0000;">'N'</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>keys, <span style="color: #0000ff;">false</span>, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	initGLFW<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Upsuper's OpenGL Test&quot;</span>, <span style="color: #0000dd;">640</span>, <span style="color: #0000dd;">480</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	st <span style="color: #000080;">=</span> glfwGetTime<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">do</span>
	<span style="color: #008000;">&#123;</span>
		drawGLScene<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glfwSwapBuffers<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>active<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	quit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>代码比 VC++ 的那个短好多，再次证明 Linux 是多么适用于编程……</p>
<p>同时根据帧数对比，印证了我的猜想——全屏下比较流畅！我这里全屏下 fps 达到了窗口模式的接近3倍。</p>
<p>附 makefile 文件（这也是我第一次写 makefile）：</p>

<div class="wp_codebox"><table><tr id="p6956"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p695code6"><pre class="make" style="font-family:monospace;">all<span style="color: #004400;">:</span> test1<span style="color: #004400;">.</span>cpp a<span style="color: #004400;">.</span>cpp
	g<span style="color: #004400;">++</span> test1<span style="color: #004400;">.</span>cpp <span style="color: #004400;">-</span>o test1 <span style="color: #004400;">-</span>lglfw <span style="color: #004400;">-</span>lGL <span style="color: #004400;">-</span>lGLU <span style="color: #004400;">-</span>lXrandr</pre></td></tr></table></div>

<p>最后，我还是十分高兴，那个绘制代码是我自己写出来的，不是抄的了！（虽然以前写过……）</p>
<p>写 OpenGL 就是爽……</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.upsuper.org/opengl-small-test-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenGL 的小试验（二）</title>
		<link>http://blog.upsuper.org/opengl-small-test-2/</link>
		<comments>http://blog.upsuper.org/opengl-small-test-2/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 11:49:23 +0000</pubDate>
		<dc:creator>upsuper</dc:creator>
				<category><![CDATA[探究学习]]></category>
		<category><![CDATA[C/C++/C#]]></category>
		<category><![CDATA[OpenGL]]></category>

		<guid isPermaLink="false">http://blog.upsuper.org/?p=692</guid>
		<description><![CDATA[今天又玩了玩，感觉到 OpenGL 实在太强大了！我也第一次遭到了买好显卡的重要意义：可以写 OpenGL 的程序！右边是效果图，有半透明、点光源效果。其实动起来会比较炫一点。 参考了下面教程（其实主要是抄）： OpenGL教程之纹理映射 OpenGL教程之纹理滤波方式 OpenGL教程之Alpha混合 除了教程里的功能，我还增加了按空格停止和按回车复位两个无聊功能…… 整个程序也已经由上一篇的将近400行增加到了超过500行。不过和新的的优美效果比起来，这点代码似乎不算什么~ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.upsuper.org/wp-content/uploads/2009/02/test2-300x234.png" alt="test2" title="test2" width="300" height="234" class="alignright size-medium wp-image-693" />今天又玩了玩，感觉到 OpenGL 实在太强大了！我也第一次遭到了买好显卡的重要意义：可以写 OpenGL 的程序！右边是效果图，有半透明、点光源效果。其实动起来会比较炫一点。</p>
<p>参考了下面教程（其实主要是抄）：<br />
<a href="http://blog.csdn.net/lovetangtang/archive/2006/01/16/580560.aspx">OpenGL教程之纹理映射</a><br />
<a href="http://blog.csdn.net/lovetangtang/archive/2006/01/16/580565.aspx">OpenGL教程之纹理滤波方式</a><br />
<a href="http://blog.csdn.net/lovetangtang/archive/2006/01/16/580568.aspx">OpenGL教程之Alpha混合</a></p>
<p>除了教程里的功能，我还增加了按空格停止和按回车复位两个无聊功能……</p>
<p>整个程序也已经由上一篇的将近400行增加到了超过500行。不过和新的的优美效果比起来，这点代码似乎不算什么~<br />
<span id="more-692"></span></p>

<div class="wp_codebox"><table><tr id="p6928"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
</pre></td><td class="code" id="p692code8"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;windows.h&gt;</span>
<span style="color: #339900;">#include &lt;stdio.h&gt;</span>
<span style="color: #339900;">#include &lt;gl\gl.h&gt;</span>
<span style="color: #339900;">#include &lt;gl\glu.h&gt;</span>
<span style="color: #339900;">#include &lt;gl\glaux.h&gt;</span>
&nbsp;
HGLRC hRC <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
HDC hDC <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
HWND hWnd <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
HINSTANCE hInstance<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> keys<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">256</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> active <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> fullscreen <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> light, blend, lp, fp, bp, f11p<span style="color: #008080;">;</span>
&nbsp;
GLfloat xrot, yrot, zrot<span style="color: #008080;">;</span>
GLfloat xspeed, yspeed<span style="color: #008080;">;</span>
GLfloat z <span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color:#800080;">5.0f</span><span style="color: #008080;">;</span>
&nbsp;
GLfloat lightAmbient<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span> <span style="color:#800080;">0.5f</span>, <span style="color:#800080;">0.5f</span>, <span style="color:#800080;">0.5f</span>, <span style="color:#800080;">1.0f</span> <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
GLfloat lightDiffuse<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span> <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">1.0f</span> <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
GLfloat lightPosition<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span> <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">2.0f</span>, <span style="color:#800080;">1.0f</span> <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
GLuint filter<span style="color: #008080;">;</span>
GLuint texture<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
LRESULT CALLBACK WndProc<span style="color: #008000;">&#40;</span>HWND, UINT, WPARAM, LPARAM<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
AUX_RGBImageRec <span style="color: #000040;">*</span>LoadBMP<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>filename<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">FILE</span> <span style="color: #000040;">*</span>file <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> filename<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
	file <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span>filename, <span style="color: #FF0000;">&quot;r&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> file<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fclose</span><span style="color: #008000;">&#40;</span>file<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> auxDIBImageLoad<span style="color: #008000;">&#40;</span>filename<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> LoadGLTextures<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> status <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	AUX_RGBImageRec <span style="color: #000040;">*</span>textureImage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>textureImage, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>textureImage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> LoadBMP<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;test2.bmp&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		status <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		glGenTextures<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>, <span style="color: #000040;">&amp;</span>texture<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glBindTexture<span style="color: #008000;">&#40;</span>GL_TEXTURE_2D, texture<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexParameteri<span style="color: #008000;">&#40;</span>GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexParameteri<span style="color: #008000;">&#40;</span>GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexImage2D<span style="color: #008000;">&#40;</span>GL_TEXTURE_2D, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">3</span>, 
			textureImage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sizeX, textureImage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sizeY,
			<span style="color: #0000dd;">0</span>, GL_RGB, GL_UNSIGNED_BYTE, textureImage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>data<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glBindTexture<span style="color: #008000;">&#40;</span>GL_TEXTURE_2D, texture<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexParameteri<span style="color: #008000;">&#40;</span>GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexParameteri<span style="color: #008000;">&#40;</span>GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexImage2D<span style="color: #008000;">&#40;</span>GL_TEXTURE_2D, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">3</span>, 
			textureImage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sizeX, textureImage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sizeY,
			<span style="color: #0000dd;">0</span>, GL_RGB, GL_UNSIGNED_BYTE, textureImage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>data<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glBindTexture<span style="color: #008000;">&#40;</span>GL_TEXTURE_2D, texture<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexParameteri<span style="color: #008000;">&#40;</span>GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexParameteri<span style="color: #008000;">&#40;</span>GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		gluBuild2DMipmaps<span style="color: #008000;">&#40;</span>GL_TEXTURE_2D, <span style="color: #0000dd;">3</span>,
			textureImage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sizeX, textureImage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sizeY,
			GL_RGB, GL_UNSIGNED_BYTE, textureImage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>data<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>textureImage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>textureImage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>data<span style="color: #008000;">&#41;</span>
			<span style="color: #0000dd;">free</span><span style="color: #008000;">&#40;</span>textureImage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>data<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000dd;">free</span><span style="color: #008000;">&#40;</span>textureImage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> status<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
GLvoid ReSizeGLScene<span style="color: #008000;">&#40;</span>GLsizei width, GLsizei height<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>height <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		height <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	glViewport<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, width, height<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	glMatrixMode<span style="color: #008000;">&#40;</span>GL_PROJECTION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glLoadIdentity<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	gluPerspective<span style="color: #008000;">&#40;</span><span style="color:#800080;">45.0f</span>, <span style="color: #008000;">&#40;</span>GLfloat<span style="color: #008000;">&#41;</span>width<span style="color: #000040;">/</span><span style="color: #008000;">&#40;</span>GLfloat<span style="color: #008000;">&#41;</span>height, <span style="color:#800080;">0.1f</span>, <span style="color:#800080;">100.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	glMatrixMode<span style="color: #008000;">&#40;</span>GL_MODELVIEW<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glLoadIdentity<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> InitGL<span style="color: #008000;">&#40;</span>GLvoid<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> LoadGLTextures<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
&nbsp;
	glColor4f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.5f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glBlendFunc<span style="color: #008000;">&#40;</span>GL_SRC_ALPHA, GL_ONE<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	glEnable<span style="color: #008000;">&#40;</span>GL_TEXTURE_2D<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glShadeModel<span style="color: #008000;">&#40;</span>GL_SMOOTH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glClearColor<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glClearDepth<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glEnable<span style="color: #008000;">&#40;</span>GL_DEPTH_TEST<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glDepthFunc<span style="color: #008000;">&#40;</span>GL_LEQUAL<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glHint<span style="color: #008000;">&#40;</span>GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	glLightfv<span style="color: #008000;">&#40;</span>GL_LIGHT1, GL_AMBIENT, lightAmbient<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glLightfv<span style="color: #008000;">&#40;</span>GL_LIGHT1, GL_DIFFUSE, lightDiffuse<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glLightfv<span style="color: #008000;">&#40;</span>GL_LIGHT1, GL_POSITION, lightPosition<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glEnable<span style="color: #008000;">&#40;</span>GL_LIGHT1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> DrawGLScene<span style="color: #008000;">&#40;</span>GLvoid<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	glClear<span style="color: #008000;">&#40;</span>GL_COLOR_BUFFER_BIT <span style="color: #000040;">|</span> GL_DEPTH_BUFFER_BIT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	glLoadIdentity<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glTranslatef<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, z<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glRotatef<span style="color: #008000;">&#40;</span>xrot, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glRotatef<span style="color: #008000;">&#40;</span>yrot, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #666666;">//glRotatef(zrot, 0.0f, 0.0f, 1.0f);</span>
	glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glBindTexture<span style="color: #008000;">&#40;</span>GL_TEXTURE_2D, texture<span style="color: #008000;">&#91;</span>filter<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glBegin<span style="color: #008000;">&#40;</span>GL_QUADS<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glNormal3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glNormal3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glNormal3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glNormal3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glNormal3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glNormal3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glTexCoord2f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glEnd<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">//xrot += 0.3f, yrot += 0.2f, zrot += 0.4f;</span>
	xrot <span style="color: #000040;">+</span><span style="color: #000080;">=</span> xspeed<span style="color: #008080;">;</span>
	yrot <span style="color: #000040;">+</span><span style="color: #000080;">=</span> yspeed<span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
GLvoid KillGLWindow<span style="color: #008000;">&#40;</span>GLvoid<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>fullscreen<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		ChangeDisplaySettings<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		ShowCursor<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>hRC<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> wglMakeCurrent<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Release Of DC And RC Failed.&quot;</span>,
				<span style="color: #FF0000;">&quot;SHUTDOWN ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONINFORMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> wglDeleteContext<span style="color: #008000;">&#40;</span>hRC<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Release Rendering Context Failed.&quot;</span>,
			<span style="color: #FF0000;">&quot;SHUTDOWN ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONINFORMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		hRC <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>hDC <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span> ReleaseDC<span style="color: #008000;">&#40;</span>hWnd, hDC<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Release Device Context Failed.&quot;</span>,
			<span style="color: #FF0000;">&quot;SHUTDOWN ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONINFORMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		hDC <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>hWnd <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span> DestroyWindow<span style="color: #008000;">&#40;</span>hWnd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Could Not Release hWnd.&quot;</span>,
			<span style="color: #FF0000;">&quot;SHUTDOWN ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONINFORMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		hWnd <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> CreateGLWindow<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> title, <span style="color: #0000ff;">int</span> width, <span style="color: #0000ff;">int</span> height, <span style="color: #0000ff;">int</span> bits, <span style="color: #0000ff;">bool</span> fullscreenflag<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	GLuint PixelFormat<span style="color: #008080;">;</span>
	WNDCLASS wc<span style="color: #008080;">;</span>
	DWORD dwExStyle<span style="color: #008080;">;</span>
	DWORD dwStyle<span style="color: #008080;">;</span>
&nbsp;
	RECT windowRect<span style="color: #008080;">;</span>
	windowRect.<span style="color: #007788;">left</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span><span style="color: #008000;">&#41;</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	windowRect.<span style="color: #007788;">right</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span><span style="color: #008000;">&#41;</span>width<span style="color: #008080;">;</span>
	windowRect.<span style="color: #007788;">top</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span><span style="color: #008000;">&#41;</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	windowRect.<span style="color: #007788;">bottom</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span><span style="color: #008000;">&#41;</span>height<span style="color: #008080;">;</span>
&nbsp;
	fullscreen <span style="color: #000080;">=</span> fullscreenflag<span style="color: #008080;">;</span>
&nbsp;
	hInstance <span style="color: #000080;">=</span> GetModuleHandle<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">style</span> <span style="color: #000080;">=</span> CS_HREDRAW <span style="color: #000040;">|</span> CS_VREDRAW <span style="color: #000040;">|</span> CS_OWNDC<span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">lpfnWndProc</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>WNDPROC<span style="color: #008000;">&#41;</span> WndProc<span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">cbClsExtra</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">cbWndExtra</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">hInstance</span> <span style="color: #000080;">=</span> hInstance<span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">hIcon</span> <span style="color: #000080;">=</span> LoadIcon<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, IDI_WINLOGO<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">hCursor</span> <span style="color: #000080;">=</span> LoadCursor<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, IDC_ARROW<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">hbrBackground</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">lpszMenuName</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">lpszClassName</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;OpenGL&quot;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> RegisterClass<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>wc<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Failed To Register The Windows Class.&quot;</span>,
			<span style="color: #FF0000;">&quot;ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>fullscreen<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		DEVMODE dmScreenSettings<span style="color: #008080;">;</span>
		<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>dmScreenSettings, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>dmScreenSettings<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		dmScreenSettings.<span style="color: #007788;">dmSize</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>dmScreenSettings<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		dmScreenSettings.<span style="color: #007788;">dmPelsWidth</span> <span style="color: #000080;">=</span> width<span style="color: #008080;">;</span>
		dmScreenSettings.<span style="color: #007788;">dmPelsHeight</span> <span style="color: #000080;">=</span> height<span style="color: #008080;">;</span>
		dmScreenSettings.<span style="color: #007788;">dmBitsPerPel</span> <span style="color: #000080;">=</span> bits<span style="color: #008080;">;</span>
		dmScreenSettings.<span style="color: #007788;">dmFields</span> <span style="color: #000080;">=</span> DM_BITSPERPEL <span style="color: #000040;">|</span> DM_PELSWIDTH <span style="color: #000040;">|</span> DM_PELSHEIGHT<span style="color: #008080;">;</span>
&nbsp;
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ChangeDisplaySettings<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>dmScreenSettings, 
			CDS_FULLSCREEN<span style="color: #008000;">&#41;</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span> DISP_CHANGE_SUCCESSFUL<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, 
				<span style="color: #FF0000;">&quot;The Requested Fullscreen Mode Is Not Supported By Your Video Card. Use Windowed Mode Instead?&quot;</span>,
				<span style="color: #FF0000;">&quot;OpenGL&quot;</span>, MB_YESNO <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> IDYES<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				fullscreen <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">else</span>
			<span style="color: #008000;">&#123;</span>
				MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Program Will Now Close.&quot;</span>,
					<span style="color: #FF0000;">&quot;ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONSTOP<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>fullscreen<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		dwExStyle <span style="color: #000080;">=</span> WS_EX_APPWINDOW<span style="color: #008080;">;</span>
		dwStyle <span style="color: #000080;">=</span> WS_POPUP<span style="color: #008080;">;</span>
		ShowCursor<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		dwExStyle <span style="color: #000080;">=</span> WS_EX_APPWINDOW <span style="color: #000040;">|</span> WS_EX_WINDOWEDGE<span style="color: #008080;">;</span>
		dwStyle <span style="color: #000080;">=</span> WS_OVERLAPPEDWINDOW<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	AdjustWindowRectEx<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>windowRect, dwStyle, <span style="color: #0000ff;">false</span>, dwExStyle<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> <span style="color: #008000;">&#40;</span>hWnd <span style="color: #000080;">=</span> CreateWindowEx<span style="color: #008000;">&#40;</span>dwExStyle, <span style="color: #FF0000;">&quot;OpenGL&quot;</span>, title,
		WS_CLIPSIBLINGS <span style="color: #000040;">|</span> WS_CLIPCHILDREN <span style="color: #000040;">|</span> dwStyle, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>,
		windowRect.<span style="color: #007788;">right</span> <span style="color: #000040;">-</span> windowRect.<span style="color: #007788;">left</span>,
		windowRect.<span style="color: #007788;">bottom</span> <span style="color: #000040;">-</span> windowRect.<span style="color: #007788;">top</span>,
		<span style="color: #0000ff;">NULL</span>, <span style="color: #0000ff;">NULL</span>, hInstance, <span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Window Creation Error.&quot;</span>, <span style="color: #FF0000;">&quot;ERROR&quot;</span>,
			MB_OK <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">static</span> PIXELFORMATDESCRIPTOR pfd <span style="color: #000080;">=</span> 
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>PIXELFORMATDESCRIPTOR<span style="color: #008000;">&#41;</span>, <span style="color: #0000dd;">1</span>,
		PFD_DRAW_TO_WINDOW <span style="color: #000040;">|</span> PFD_SUPPORT_OPENGL <span style="color: #000040;">|</span> PFD_DOUBLEBUFFER,
		PFD_TYPE_RGBA, bits, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>,
		<span style="color: #0000dd;">16</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, PFD_MAIN_PLANE, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>
	<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> <span style="color: #008000;">&#40;</span>hDC <span style="color: #000080;">=</span> GetDC<span style="color: #008000;">&#40;</span>hWnd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Can't Create A GL Device Context.&quot;</span>,
			<span style="color: #FF0000;">&quot;ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> <span style="color: #008000;">&#40;</span>PixelFormat <span style="color: #000080;">=</span> ChoosePixelFormat<span style="color: #008000;">&#40;</span>hDC, <span style="color: #000040;">&amp;</span>pfd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Can't Find A Suitable PixelFormat.&quot;</span>,
			<span style="color: #FF0000;">&quot;ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> SetPixelFormat<span style="color: #008000;">&#40;</span>hDC, PixelFormat, <span style="color: #000040;">&amp;</span>pfd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Can't Set The PixelFormat.&quot;</span>, <span style="color: #FF0000;">&quot;ERROR&quot;</span>,
			MB_OK <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> <span style="color: #008000;">&#40;</span>hRC <span style="color: #000080;">=</span> wglCreateContext<span style="color: #008000;">&#40;</span>hDC<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Can't Create A GL Rendering Context.&quot;</span>,
			<span style="color: #FF0000;">&quot;ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> wglMakeCurrent<span style="color: #008000;">&#40;</span>hDC, hRC<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Can't Activate The GL Rendering Context.&quot;</span>,
			<span style="color: #FF0000;">&quot;ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	ShowWindow<span style="color: #008000;">&#40;</span>hWnd, SW_SHOW<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	SetForegroundWindow<span style="color: #008000;">&#40;</span>hWnd<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	SetFocus<span style="color: #008000;">&#40;</span>hWnd<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	ReSizeGLScene<span style="color: #008000;">&#40;</span>width, height<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> InitGL<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Initialization Failed.&quot;</span>, <span style="color: #FF0000;">&quot;ERROR&quot;</span>,
			MB_OK <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
LRESULT CALLBACK WndProc<span style="color: #008000;">&#40;</span>HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">switch</span> <span style="color: #008000;">&#40;</span>uMsg<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">case</span> WM_ACTIVATE<span style="color: #008080;">:</span>
		active <span style="color: #000080;">=</span> <span style="color: #000040;">!</span> HIWORD<span style="color: #008000;">&#40;</span>wParam<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">case</span> WM_SYSCOMMAND<span style="color: #008080;">:</span>
		<span style="color: #0000ff;">switch</span> <span style="color: #008000;">&#40;</span>wParam<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">case</span> SC_SCREENSAVE<span style="color: #008080;">:</span> 
		<span style="color: #0000ff;">case</span> SC_MONITORPOWER<span style="color: #008080;">:</span>
			<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">case</span> WM_CLOSE<span style="color: #008080;">:</span>
		PostQuitMessage<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">case</span> WM_KEYDOWN<span style="color: #008080;">:</span>
		keys<span style="color: #008000;">&#91;</span>wParam<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">case</span> WM_KEYUP<span style="color: #008080;">:</span>
		keys<span style="color: #008000;">&#91;</span>wParam<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">case</span> WM_SIZE<span style="color: #008080;">:</span>
		ReSizeGLScene<span style="color: #008000;">&#40;</span>LOWORD<span style="color: #008000;">&#40;</span>lParam<span style="color: #008000;">&#41;</span>, HIWORD<span style="color: #008000;">&#40;</span>lParam<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> DefWindowProc<span style="color: #008000;">&#40;</span>hWnd, uMsg, wParam, lParam<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> WINAPI WinMain<span style="color: #008000;">&#40;</span>HINSTANCE hInstance, HINSTANCE hPrevInstance,
	LPSTR lpCmdLine, <span style="color: #0000ff;">int</span> nCmdShow<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	MSG msg<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">bool</span> done <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
&nbsp;
	fullscreen <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, 
		<span style="color: #FF0000;">&quot;Would You Like To Run In Fullscreen Mode?&quot;</span>,
		<span style="color: #FF0000;">&quot;Start Fullscreen?&quot;</span>, MB_YESNO <span style="color: #000040;">|</span> MB_ICONQUESTION<span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> IDYES<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> CreateGLWindow<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;OpenGL Test&quot;</span>, <span style="color: #0000dd;">640</span>, <span style="color: #0000dd;">480</span>, <span style="color: #0000dd;">16</span>, fullscreen<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> done<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>PeekMessage<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>msg, <span style="color: #0000ff;">NULL</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, PM_REMOVE<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>msg.<span style="color: #007788;">message</span> <span style="color: #000080;">==</span> WM_QUIT<span style="color: #008000;">&#41;</span>
				done <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span>
			<span style="color: #008000;">&#123;</span>
				TranslateMessage<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>msg<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				DispatchMessage<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>msg<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>active<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>VK_ESCAPE<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
					done <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">else</span>
				<span style="color: #008000;">&#123;</span>
					DrawGLScene<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
					SwapBuffers<span style="color: #008000;">&#40;</span>hDC<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span><span style="color: #FF0000;">'L'</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>lp<span style="color: #008000;">&#41;</span>
					<span style="color: #008000;">&#123;</span>
						lp <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
						light <span style="color: #000080;">=</span> <span style="color: #000040;">!</span> light<span style="color: #008080;">;</span>
						<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> light<span style="color: #008000;">&#41;</span>
							glDisable<span style="color: #008000;">&#40;</span>GL_LIGHTING<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
						<span style="color: #0000ff;">else</span>
							glEnable<span style="color: #008000;">&#40;</span>GL_LIGHTING<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
					<span style="color: #008000;">&#125;</span>
					<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> keys<span style="color: #008000;">&#91;</span><span style="color: #FF0000;">'L'</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
						lp <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
&nbsp;
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span><span style="color: #FF0000;">'F'</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>fp<span style="color: #008000;">&#41;</span>
					<span style="color: #008000;">&#123;</span>
						fp <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
						filter <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
						<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>filter <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span> filter <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
					<span style="color: #008000;">&#125;</span>
					<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> keys<span style="color: #008000;">&#91;</span><span style="color: #FF0000;">'F'</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
						fp <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
&nbsp;
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span><span style="color: #FF0000;">'B'</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>bp<span style="color: #008000;">&#41;</span>
					<span style="color: #008000;">&#123;</span>
						bp <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
						blend <span style="color: #000080;">=</span> <span style="color: #000040;">!</span> blend<span style="color: #008080;">;</span>
						<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>blend<span style="color: #008000;">&#41;</span>
						<span style="color: #008000;">&#123;</span>
							glEnable<span style="color: #008000;">&#40;</span>GL_BLEND<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
							glDisable<span style="color: #008000;">&#40;</span>GL_DEPTH_TEST<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
						<span style="color: #008000;">&#125;</span>
						<span style="color: #0000ff;">else</span>
						<span style="color: #008000;">&#123;</span>
							glDisable<span style="color: #008000;">&#40;</span>GL_BLEND<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
							glEnable<span style="color: #008000;">&#40;</span>GL_DEPTH_TEST<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
						<span style="color: #008000;">&#125;</span>
					<span style="color: #008000;">&#125;</span>
					<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> keys<span style="color: #008000;">&#91;</span><span style="color: #FF0000;">'B'</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
						bp <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
&nbsp;
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>VK_F11<span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>f11p<span style="color: #008000;">&#41;</span>
					<span style="color: #008000;">&#123;</span>
						f11p <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
						KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
						fullscreen <span style="color: #000080;">=</span> <span style="color: #000040;">!</span> fullscreen<span style="color: #008080;">;</span>
						<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> CreateGLWindow<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;OpenGL Test&quot;</span>, <span style="color: #0000dd;">640</span>, <span style="color: #0000dd;">480</span>, <span style="color: #0000dd;">16</span>, fullscreen<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
							<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
					<span style="color: #008000;">&#125;</span>
					<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>keys<span style="color: #008000;">&#91;</span>VK_F11<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
						f11p <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
&nbsp;
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>VK_PRIOR<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> z <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color:#800080;">0.02f</span><span style="color: #008080;">;</span>
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>VK_NEXT<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> z <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color:#800080;">0.02f</span><span style="color: #008080;">;</span>
&nbsp;
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>VK_UP<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> xspeed <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color:#800080;">0.01f</span><span style="color: #008080;">;</span>
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>VK_DOWN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> xspeed <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color:#800080;">0.01f</span><span style="color: #008080;">;</span>
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>VK_RIGHT<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> yspeed <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color:#800080;">0.01f</span><span style="color: #008080;">;</span>
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>VK_LEFT<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> yspeed <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color:#800080;">0.01f</span><span style="color: #008080;">;</span>
&nbsp;
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span><span style="color: #FF0000;">' '</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> xspeed <span style="color: #000080;">=</span> <span style="color:#800080;">0.0f</span>, yspeed <span style="color: #000080;">=</span> <span style="color:#800080;">0.0f</span><span style="color: #008080;">;</span>
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">13</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> z <span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color:#800080;">5.0f</span><span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>msg.<span style="color: #007788;">wParam</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.upsuper.org/opengl-small-test-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenGL 的小试验（一）</title>
		<link>http://blog.upsuper.org/opengl-small-test-1/</link>
		<comments>http://blog.upsuper.org/opengl-small-test-1/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 13:17:10 +0000</pubDate>
		<dc:creator>upsuper</dc:creator>
				<category><![CDATA[探究学习]]></category>
		<category><![CDATA[C/C++/C#]]></category>
		<category><![CDATA[OpenGL]]></category>

		<guid isPermaLink="false">http://blog.upsuper.org/?p=686</guid>
		<description><![CDATA[今天突然心血来潮想看看 OpenGL。找了个 OpenGL 的教程，看起来不错。不过这个教程着实吓了我一跳，第一篇的代码就超过了300行！先来一个效果图~ 我参考的教程有： OpenGL教程之新手上路 OpenGL教程之第一个多边形 OpenGL教程之着色 OpenGL教程之旋转 OpenGL教程之向3D进军 然后写了段小程序（不过大部分代码是直接抄的……而且我一点也不觉得小……398行……）： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.upsuper.org/wp-content/uploads/2009/02/test1-300x234.png" alt="test1" title="test1" width="300" height="234" class="alignright size-medium wp-image-688" />今天突然心血来潮想看看 OpenGL。找了个 OpenGL 的教程，看起来不错。不过这个教程着实吓了我一跳，第一篇的代码就超过了300行！先来一个效果图~</p>
<p>我参考的教程有：<br />
<a href="http://blog.csdn.net/lovetangtang/archive/2006/01/16/580530.aspx">OpenGL教程之新手上路</a><br />
<a href="http://blog.csdn.net/lovetangtang/archive/2006/01/16/580532.aspx">OpenGL教程之第一个多边形</a><br />
<a href="http://blog.csdn.net/lovetangtang/archive/2006/01/16/580533.aspx">OpenGL教程之着色</a><br />
<a href="http://blog.csdn.net/lovetangtang/archive/2006/01/16/580536.aspx">OpenGL教程之旋转</a><br />
<a href="http://blog.csdn.net/lovetangtang/archive/2006/01/16/580544.aspx">OpenGL教程之向3D进军</a><br />
<span id="more-686"></span><br />
然后写了段小程序（不过大部分代码是直接抄的……而且我一点也不觉得小……398行……）：</p>

<div class="wp_codebox"><table><tr id="p68610"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
</pre></td><td class="code" id="p686code10"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;windows.h&gt;</span>
<span style="color: #339900;">#include &lt;glgl.h&gt;</span>
<span style="color: #339900;">#include &lt;glglu.h&gt;</span>
<span style="color: #339900;">#include &lt;glglaux.h&gt;</span>
&nbsp;
HGLRC hRC <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
HDC hDC <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
HWND hWnd <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
HINSTANCE hInstance<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> keys<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">256</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> active <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> fullscreen <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
&nbsp;
GLfloat rtri<span style="color: #008080;">;</span>
GLfloat rquad<span style="color: #008080;">;</span>
&nbsp;
LRESULT CALLBACK WndProc<span style="color: #008000;">&#40;</span>HWND, UINT, WPARAM, LPARAM<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
GLvoid ReSizeGLScene<span style="color: #008000;">&#40;</span>GLsizei width, GLsizei height<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>height <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		height <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	glViewport<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, width, height<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	glMatrixMode<span style="color: #008000;">&#40;</span>GL_PROJECTION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glLoadIdentity<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	gluPerspective<span style="color: #008000;">&#40;</span><span style="color:#800080;">45.0f</span>, <span style="color: #008000;">&#40;</span>GLfloat<span style="color: #008000;">&#41;</span>width<span style="color: #000040;">/</span><span style="color: #008000;">&#40;</span>GLfloat<span style="color: #008000;">&#41;</span>height, <span style="color:#800080;">0.1f</span>, <span style="color:#800080;">100.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	glMatrixMode<span style="color: #008000;">&#40;</span>GL_MODELVIEW<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glLoadIdentity<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> InitGL<span style="color: #008000;">&#40;</span>GLvoid<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	glShadeModel<span style="color: #008000;">&#40;</span>GL_SMOOTH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glClearColor<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glClearDepth<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glEnable<span style="color: #008000;">&#40;</span>GL_DEPTH_TEST<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glDepthFunc<span style="color: #008000;">&#40;</span>GL_LEQUAL<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glHint<span style="color: #008000;">&#40;</span>GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> DrawGLScene<span style="color: #008000;">&#40;</span>GLvoid<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	glClear<span style="color: #008000;">&#40;</span>GL_COLOR_BUFFER_BIT <span style="color: #000040;">|</span> GL_DEPTH_BUFFER_BIT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	glLoadIdentity<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glTranslatef<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.5f</span>, <span style="color:#800080;">0.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">6.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glRotatef<span style="color: #008000;">&#40;</span>rtri, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glBegin<span style="color: #008000;">&#40;</span>GL_TRIANGLES<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">0.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">0.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">0.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">0.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glEnd<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	glBegin<span style="color: #008000;">&#40;</span>GL_QUADS<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glEnd<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	glLoadIdentity<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glTranslatef<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.5f</span>, <span style="color:#800080;">0.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">7.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glRotatef<span style="color: #008000;">&#40;</span>rquad, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glBegin<span style="color: #008000;">&#40;</span>GL_QUADS<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.5f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">0.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		glColor3f<span style="color: #008000;">&#40;</span><span style="color:#800080;">1.0f</span>, <span style="color:#800080;">0.0f</span>, <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>,  <span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		glVertex3f<span style="color: #008000;">&#40;</span> <span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span>, <span style="color: #000040;">-</span><span style="color:#800080;">1.0f</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	glEnd<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	rtri <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color:#800080;">0.2f</span><span style="color: #008080;">;</span>
	rquad <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color:#800080;">0.15f</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
GLvoid KillGLWindow<span style="color: #008000;">&#40;</span>GLvoid<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>fullscreen<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		ChangeDisplaySettings<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		ShowCursor<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>hRC<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> wglMakeCurrent<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Release Of DC And RC Failed.&quot;</span>,
				<span style="color: #FF0000;">&quot;SHUTDOWN ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONINFORMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> wglDeleteContext<span style="color: #008000;">&#40;</span>hRC<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Release Rendering Context Failed.&quot;</span>,
			<span style="color: #FF0000;">&quot;SHUTDOWN ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONINFORMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		hRC <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>hDC <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span> ReleaseDC<span style="color: #008000;">&#40;</span>hWnd, hDC<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Release Device Context Failed.&quot;</span>,
			<span style="color: #FF0000;">&quot;SHUTDOWN ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONINFORMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		hDC <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>hWnd <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span> DestroyWindow<span style="color: #008000;">&#40;</span>hWnd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Could Not Release hWnd.&quot;</span>,
			<span style="color: #FF0000;">&quot;SHUTDOWN ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONINFORMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		hWnd <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> CreateGLWindow<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> title, <span style="color: #0000ff;">int</span> width, <span style="color: #0000ff;">int</span> height, <span style="color: #0000ff;">int</span> bits, <span style="color: #0000ff;">bool</span> fullscreenflag<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	GLuint PixelFormat<span style="color: #008080;">;</span>
	WNDCLASS wc<span style="color: #008080;">;</span>
	DWORD dwExStyle<span style="color: #008080;">;</span>
	DWORD dwStyle<span style="color: #008080;">;</span>
&nbsp;
	RECT WindowRect<span style="color: #008080;">;</span>
	WindowRect.<span style="color: #007788;">left</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span><span style="color: #008000;">&#41;</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	WindowRect.<span style="color: #007788;">right</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span><span style="color: #008000;">&#41;</span>width<span style="color: #008080;">;</span>
	WindowRect.<span style="color: #007788;">top</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span><span style="color: #008000;">&#41;</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	WindowRect.<span style="color: #007788;">bottom</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span><span style="color: #008000;">&#41;</span>height<span style="color: #008080;">;</span>
&nbsp;
	fullscreen <span style="color: #000080;">=</span> fullscreenflag<span style="color: #008080;">;</span>
&nbsp;
	hInstance <span style="color: #000080;">=</span> GetModuleHandle<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">style</span> <span style="color: #000080;">=</span> CS_HREDRAW <span style="color: #000040;">|</span> CS_VREDRAW <span style="color: #000040;">|</span> CS_OWNDC<span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">lpfnWndProc</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>WNDPROC<span style="color: #008000;">&#41;</span> WndProc<span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">cbClsExtra</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">cbWndExtra</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">hInstance</span> <span style="color: #000080;">=</span> hInstance<span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">hIcon</span> <span style="color: #000080;">=</span> LoadIcon<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, IDI_WINLOGO<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">hCursor</span> <span style="color: #000080;">=</span> LoadCursor<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, IDC_ARROW<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">hbrBackground</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">lpszMenuName</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
	wc.<span style="color: #007788;">lpszClassName</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;OpenGL&quot;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> RegisterClass<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>wc<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Failed To Register The Windows Class.&quot;</span>,
			<span style="color: #FF0000;">&quot;ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>fullscreen<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		DEVMODE dmScreenSettings<span style="color: #008080;">;</span>
		<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>dmScreenSettings, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>dmScreenSettings<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		dmScreenSettings.<span style="color: #007788;">dmSize</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>dmScreenSettings<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		dmScreenSettings.<span style="color: #007788;">dmPelsWidth</span> <span style="color: #000080;">=</span> width<span style="color: #008080;">;</span>
		dmScreenSettings.<span style="color: #007788;">dmPelsHeight</span> <span style="color: #000080;">=</span> height<span style="color: #008080;">;</span>
		dmScreenSettings.<span style="color: #007788;">dmBitsPerPel</span> <span style="color: #000080;">=</span> bits<span style="color: #008080;">;</span>
		dmScreenSettings.<span style="color: #007788;">dmFields</span> <span style="color: #000080;">=</span> DM_BITSPERPEL <span style="color: #000040;">|</span> DM_PELSWIDTH <span style="color: #000040;">|</span> DM_PELSHEIGHT<span style="color: #008080;">;</span>
&nbsp;
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ChangeDisplaySettings<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>dmScreenSettings, 
			CDS_FULLSCREEN<span style="color: #008000;">&#41;</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span> DISP_CHANGE_SUCCESSFUL<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, 
				<span style="color: #FF0000;">&quot;The Requested Fullscreen Mode Is Not Supported By Your Video Card. Use Windowed Mode Instead?&quot;</span>,
				<span style="color: #FF0000;">&quot;OpenGL&quot;</span>, MB_YESNO <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> IDYES<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				fullscreen <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">else</span>
			<span style="color: #008000;">&#123;</span>
				MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Program Will Now Close.&quot;</span>,
					<span style="color: #FF0000;">&quot;ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONSTOP<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>fullscreen<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		dwExStyle <span style="color: #000080;">=</span> WS_EX_APPWINDOW<span style="color: #008080;">;</span>
		dwStyle <span style="color: #000080;">=</span> WS_POPUP<span style="color: #008080;">;</span>
		ShowCursor<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		dwExStyle <span style="color: #000080;">=</span> WS_EX_APPWINDOW <span style="color: #000040;">|</span> WS_EX_WINDOWEDGE<span style="color: #008080;">;</span>
		dwStyle <span style="color: #000080;">=</span> WS_OVERLAPPEDWINDOW<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	AdjustWindowRectEx<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>WindowRect, dwStyle, <span style="color: #0000ff;">false</span>, dwExStyle<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> <span style="color: #008000;">&#40;</span>hWnd <span style="color: #000080;">=</span> CreateWindowEx<span style="color: #008000;">&#40;</span>dwExStyle, <span style="color: #FF0000;">&quot;OpenGL&quot;</span>, title,
		WS_CLIPSIBLINGS <span style="color: #000040;">|</span> WS_CLIPCHILDREN <span style="color: #000040;">|</span> dwStyle, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>,
		WindowRect.<span style="color: #007788;">right</span> <span style="color: #000040;">-</span> WindowRect.<span style="color: #007788;">left</span>,
		WindowRect.<span style="color: #007788;">bottom</span> <span style="color: #000040;">-</span> WindowRect.<span style="color: #007788;">top</span>,
		<span style="color: #0000ff;">NULL</span>, <span style="color: #0000ff;">NULL</span>, hInstance, <span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Window Creation Error.&quot;</span>, <span style="color: #FF0000;">&quot;ERROR&quot;</span>,
			MB_OK <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">static</span> PIXELFORMATDESCRIPTOR pfd <span style="color: #000080;">=</span> 
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>PIXELFORMATDESCRIPTOR<span style="color: #008000;">&#41;</span>, <span style="color: #0000dd;">1</span>,
		PFD_DRAW_TO_WINDOW <span style="color: #000040;">|</span> PFD_SUPPORT_OPENGL <span style="color: #000040;">|</span> PFD_DOUBLEBUFFER,
		PFD_TYPE_RGBA, bits, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>,
		<span style="color: #0000dd;">16</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, PFD_MAIN_PLANE, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>
	<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> <span style="color: #008000;">&#40;</span>hDC <span style="color: #000080;">=</span> GetDC<span style="color: #008000;">&#40;</span>hWnd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Can't Create A GL Device Context.&quot;</span>,
			<span style="color: #FF0000;">&quot;ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> <span style="color: #008000;">&#40;</span>PixelFormat <span style="color: #000080;">=</span> ChoosePixelFormat<span style="color: #008000;">&#40;</span>hDC, <span style="color: #000040;">&amp;</span>pfd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Can't Find A Suitable PixelFormat.&quot;</span>,
			<span style="color: #FF0000;">&quot;ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> SetPixelFormat<span style="color: #008000;">&#40;</span>hDC, PixelFormat, <span style="color: #000040;">&amp;</span>pfd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Can't Set The PixelFormat.&quot;</span>, <span style="color: #FF0000;">&quot;ERROR&quot;</span>,
			MB_OK <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> <span style="color: #008000;">&#40;</span>hRC <span style="color: #000080;">=</span> wglCreateContext<span style="color: #008000;">&#40;</span>hDC<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Can't Create A GL Rendering Context.&quot;</span>,
			<span style="color: #FF0000;">&quot;ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> wglMakeCurrent<span style="color: #008000;">&#40;</span>hDC, hRC<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Can't Activate The GL Rendering Context.&quot;</span>,
			<span style="color: #FF0000;">&quot;ERROR&quot;</span>, MB_OK <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	ShowWindow<span style="color: #008000;">&#40;</span>hWnd, SW_SHOW<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	SetForegroundWindow<span style="color: #008000;">&#40;</span>hWnd<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	SetFocus<span style="color: #008000;">&#40;</span>hWnd<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	ReSizeGLScene<span style="color: #008000;">&#40;</span>width, height<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> InitGL<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">&quot;Initialization Failed.&quot;</span>, <span style="color: #FF0000;">&quot;ERROR&quot;</span>,
			MB_OK <span style="color: #000040;">|</span> MB_ICONEXCLAMATION<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
LRESULT CALLBACK WndProc<span style="color: #008000;">&#40;</span>HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">switch</span> <span style="color: #008000;">&#40;</span>uMsg<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">case</span> WM_ACTIVATE<span style="color: #008080;">:</span>
		active <span style="color: #000080;">=</span> <span style="color: #000040;">!</span> HIWORD<span style="color: #008000;">&#40;</span>wParam<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">case</span> WM_SYSCOMMAND<span style="color: #008080;">:</span>
		<span style="color: #0000ff;">switch</span> <span style="color: #008000;">&#40;</span>wParam<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">case</span> SC_SCREENSAVE<span style="color: #008080;">:</span> 
		<span style="color: #0000ff;">case</span> SC_MONITORPOWER<span style="color: #008080;">:</span>
			<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">case</span> WM_CLOSE<span style="color: #008080;">:</span>
		PostQuitMessage<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">case</span> WM_KEYDOWN<span style="color: #008080;">:</span>
		keys<span style="color: #008000;">&#91;</span>wParam<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">case</span> WM_KEYUP<span style="color: #008080;">:</span>
		keys<span style="color: #008000;">&#91;</span>wParam<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">case</span> WM_SIZE<span style="color: #008080;">:</span>
		ReSizeGLScene<span style="color: #008000;">&#40;</span>LOWORD<span style="color: #008000;">&#40;</span>lParam<span style="color: #008000;">&#41;</span>, HIWORD<span style="color: #008000;">&#40;</span>lParam<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> DefWindowProc<span style="color: #008000;">&#40;</span>hWnd, uMsg, wParam, lParam<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> WINAPI WinMain<span style="color: #008000;">&#40;</span>HINSTANCE hInstance, HINSTANCE hPrevInstance,
	LPSTR lpCmdLine, <span style="color: #0000ff;">int</span> nCmdShow<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	MSG msg<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">bool</span> done <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
&nbsp;
	fullscreen <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>MessageBox<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>, 
		<span style="color: #FF0000;">&quot;Would You Like To Run In Fullscreen Mode?&quot;</span>,
		<span style="color: #FF0000;">&quot;Start Fullscreen?&quot;</span>, MB_YESNO <span style="color: #000040;">|</span> MB_ICONQUESTION<span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> IDYES<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> CreateGLWindow<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;OpenGL Test&quot;</span>, <span style="color: #0000dd;">640</span>, <span style="color: #0000dd;">480</span>, <span style="color: #0000dd;">16</span>, fullscreen<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span> done<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>PeekMessage<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>msg, <span style="color: #0000ff;">NULL</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, PM_REMOVE<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>msg.<span style="color: #007788;">message</span> <span style="color: #000080;">==</span> WM_QUIT<span style="color: #008000;">&#41;</span>
				done <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span>
			<span style="color: #008000;">&#123;</span>
				TranslateMessage<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>msg<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				DispatchMessage<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>msg<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>active<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>keys<span style="color: #008000;">&#91;</span>VK_ESCAPE<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
					done <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">else</span>
				<span style="color: #008000;">&#123;</span>
					DrawGLScene<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
					SwapBuffers<span style="color: #008000;">&#40;</span>hDC<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	KillGLWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>msg.<span style="color: #007788;">wParam</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.upsuper.org/opengl-small-test-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

