﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Shuffy-文章分类-MFC,OpenGL</title><link>http://www.cppblog.com/Sandywin/category/13432.html</link><description>&lt;body 
bgproperties="fixed";
background="http://www.cppblog.com/images/cppblog_com/Sandywin/4194/o_the,dreamy,world,115828072343234.jpg" wight=1024 height=768&gt;
&lt;b&gt;不断的学习，不断的思考，才能不断的进步.Let's do better together!&lt;/b&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 31 Mar 2010 23:28:27 GMT</lastBuildDate><pubDate>Wed, 31 Mar 2010 23:28:27 GMT</pubDate><ttl>60</ttl><item><title>《基于MFC的OpenGL编程》Part 19 Creating a Virtual Reality Walkthrough Application </title><link>http://www.cppblog.com/Sandywin/articles/111218.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:57:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111218.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111218.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111218.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111218.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111218.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本文是整个系列文章的最后一篇，将创建一个完整的虚拟office应用程序(如图所示)来做为ending.1,在CCY457OpenGLView类中加入下述变量，用来保存office内各个物体的显示列表Code highlighting produced by Actipro CodeHighlighte...&nbsp;&nbsp;<a href='http://www.cppblog.com/Sandywin/articles/111218.html'>阅读全文</a><img src ="http://www.cppblog.com/Sandywin/aggbug/111218.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:57 <a href="http://www.cppblog.com/Sandywin/articles/111218.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 18 Reading objects from the OBJ File Format </title><link>http://www.cppblog.com/Sandywin/articles/111217.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:55:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111217.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111217.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111217.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111217.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111217.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本文将介绍如何从Obj文件格式中创建3D对象，我们使用的是Nate Miller的obj格式加载类。This would be very useful to create large Virtual Reality applications as we could make use of the readil...&nbsp;&nbsp;<a href='http://www.cppblog.com/Sandywin/articles/111217.html'>阅读全文</a><img src ="http://www.cppblog.com/Sandywin/aggbug/111217.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:55 <a href="http://www.cppblog.com/Sandywin/articles/111217.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 17 Shadows </title><link>http://www.cppblog.com/Sandywin/articles/111216.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:52:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111216.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111216.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111216.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111216.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111216.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ShadowsConceptually drawing a shadow is quite simple. A shadow is produced when an object keeps light from a source from striking some object or surface behind the object, casting the shadow. The ar...&nbsp;&nbsp;<a href='http://www.cppblog.com/Sandywin/articles/111216.html'>阅读全文</a><img src ="http://www.cppblog.com/Sandywin/aggbug/111216.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:52 <a href="http://www.cppblog.com/Sandywin/articles/111216.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 16 Reflection </title><link>http://www.cppblog.com/Sandywin/articles/111215.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:51:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111215.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111215.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111215.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111215.html</trackback:ping><description><![CDATA[<img alt="" src="http://images.cnblogs.com/cnblogs_com/phinecos/20080415/2008110700.JPG"><strong></strong>
<p><strong><span style="FONT-FAMILY: Verdana">Reflections</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">Adding reflections to a program too can improve its realism to a great extent. Here we'll look at a simple method to create reflection where we simply redraw the object with an appropriate transformation and make the surface in between translucent. This creates an effective illusion of reflection!!</span></p>
<p><span style="FONT-FAMILY: Verdana">1,</span><span style="FONT-FAMILY: 宋体">设置光源代码修改如下：</span></p>
<div class=cnblogs_code><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::SetupLighting&nbsp;()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Material&nbsp;Properties</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;matSpecular[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.7f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;matShininess[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">50.0f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;matAmbient[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">0.25f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.25f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.25f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.7f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;matDiffuse[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.7f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glMaterialfv(GL_FRONT,&nbsp;GL_SPECULAR,&nbsp;matSpecular);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glMaterialfv(GL_FRONT,&nbsp;GL_SHININESS,&nbsp;matShininess);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glMaterialfv(GL_FRONT,&nbsp;GL_DIFFUSE,&nbsp;matDiffuse);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glMaterialfv(GL_FRONT,&nbsp;GL_AMBIENT,&nbsp;matAmbient);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Lighting&nbsp;Parameters<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Enable&nbsp;Lighting</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_LIGHTING);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Specify&nbsp;a&nbsp;single&nbsp;directional&nbsp;light</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;ambient1[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;diffuse1[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;specular1[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;position1[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glLightfv(GL_LIGHT0,&nbsp;GL_AMBIENT,&nbsp;ambient1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glLightfv(GL_LIGHT0,&nbsp;GL_DIFFUSE,&nbsp;diffuse1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glLightfv(GL_LIGHT0,&nbsp;GL_SPECULAR,&nbsp;specular1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glLightfv(GL_LIGHT0,&nbsp;GL_POSITION,&nbsp;position1);&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_LIGHT0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Specify&nbsp;a&nbsp;single&nbsp;positional&nbsp;spotlight</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;ambient2[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;diffuse2[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;position2[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;direction2[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glLightfv(GL_LIGHT1,&nbsp;GL_AMBIENT,&nbsp;ambient2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glLightfv(GL_LIGHT1,&nbsp;GL_DIFFUSE,&nbsp;diffuse2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glLightfv(GL_LIGHT1,&nbsp;GL_POSITION,&nbsp;position2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glLightfv(GL_LIGHT1,&nbsp;GL_SPOT_DIRECTION,&nbsp;direction2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glLightf(GL_LIGHT1,&nbsp;GL_SPOT_CUTOFF,&nbsp;</span><span style="COLOR: #800080">15.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_LIGHT1);<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana">2,</span><span style="FONT-FAMILY: 宋体">绘制函数修改如下：</span></p>
<div class=cnblogs_code><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::RenderScene&nbsp;()<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绘制函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">8.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Save&nbsp;matrix&nbsp;state&nbsp;and&nbsp;do&nbsp;the&nbsp;rotation</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPushMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(m_xRot,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DrawCube();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPopMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPushMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">3.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glScalef(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(m_xRot,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DrawCube();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPopMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Draw&nbsp;bottom&nbsp;of&nbsp;floor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_BLEND);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBlendFunc(GL_SRC_ALPHA,&nbsp;GL_ONE_MINUS_SRC_ALPHA);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPushMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_TEXTURE_2D);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBindTexture(GL_TEXTURE_2D,&nbsp;m_Texture[</span><span style="COLOR: #800080">3</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.5f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.5f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.5f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.5f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPopMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glDisable(GL_TEXTURE_2D);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glDisable(GL_BLEND);&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::DrawCube&nbsp;()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_TEXTURE_2D);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBindTexture(GL_TEXTURE_2D,m_Texture[</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">]);&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Front&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Back&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBindTexture(GL_TEXTURE_2D,m_Texture[</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Left&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Right&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBindTexture(GL_TEXTURE_2D,m_Texture[</span><span style="COLOR: #800080">2</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Top&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Botton&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glDisable(GL_TEXTURE_2D);<br>}<br></span></div>
<p>&nbsp;</p>
<div id=MySignature>
<p>作者：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>洞庭散人</font></u></a></p>
<p>出处：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>http://phinecos.cnblogs.com/</font></u></a>　　　　</p>
<div>本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 </div>
</div>
原文链接：<a href="http://www.cnblogs.com/phinecos/archive/2008/11/07/1328887.html">http://www.cnblogs.com/phinecos/archive/2008/11/07/1328887.html</a>
<img src ="http://www.cppblog.com/Sandywin/aggbug/111215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:51 <a href="http://www.cppblog.com/Sandywin/articles/111215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 15 Selection </title><link>http://www.cppblog.com/Sandywin/articles/111214.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:50:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111214.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111214.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111214.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111214.html</trackback:ping><description><![CDATA[<p><strong><span style="FONT-FAMILY: Verdana">Selection</span></strong></p>
<p style="TEXT-INDENT: 21pt"><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Selection</span></strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt"> is a powerful feature of OpenGL that allows you click at some position of the OpenGL window using the mouse and determine which of your objects lie beneath it. The act of selecting a specific object is called <strong><span style="FONT-FAMILY: Verdana">Picking</span></strong>. With OpenGL's selection feature, we can specify a viewing volume and determine which objects fall within that viewing volume. A powerful utility function, <strong><span style="FONT-FAMILY: Verdana">gluPickMatrix, </span></strong>produces a matrix which can be used to create a smaller viewing volume placed beneath the mouse cursor. Then we use selection to test this viewing volume to see which objects are contained by it.</span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Selection is actually a rendering mode, but in this mode no pisels are actually copied onto the frame buffer. Instead, primitives drawn within the viewing volume produce hit records in a selection buffer. We must set up this selection buffer in advance and name the primitives or groups of primitives so that they can be identified in the selection buffer.We can then parse the buffer to determine which objects intersected the viewing volume. </span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Naming Primitives</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">We have to name a group of primitives such as one describing a cube or a cylinder etc in order to identify them. These names are nothing but integers such as for display list names. The names list is maintained on the named stack. After we initialize the name stack we can push names on the stack or simply replace the name currently on the top of the stack. When a hit occurs during selection, all the names on the stack are copied onto the selection buffer.</span></p>
<p><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">1,</span><span style="FONT-SIZE: 10.5pt">在</span><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">CCY457OpenGLView</span><span style="FONT-SIZE: 10.5pt">类中加入一个变量，用来表示宽高比</span></p>
<div class=cnblogs_code><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLdouble&nbsp;m_aspectRatio;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;width/height&nbsp;ratio</span></div>
<p><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">2</span><span style="FONT-SIZE: 10.5pt">，</span><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">OnSize</span><span style="FONT-SIZE: 10.5pt">函数修改如下：</span></p>
<div class=cnblogs_code><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnSize(UINT&nbsp;nType,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cx,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cy)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CView::OnSize(nType,&nbsp;cx,&nbsp;cy);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;cx&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;cy&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;select&nbsp;the&nbsp;full&nbsp;client&nbsp;area</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glViewport(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;cx,&nbsp;cy);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;compute&nbsp;the&nbsp;aspect&nbsp;ratio<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;this&nbsp;will&nbsp;keep&nbsp;all&nbsp;dimension&nbsp;scales&nbsp;equal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_aspectRatio&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(GLdouble)cx</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(GLdouble)cy;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;select&nbsp;the&nbsp;projection&nbsp;matrix&nbsp;and&nbsp;clear&nbsp;it</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glMatrixMode(GL_PROJECTION);<br>&nbsp;&nbsp;&nbsp;&nbsp;::glLoadIdentity();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;select&nbsp;the&nbsp;viewing&nbsp;volume</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::gluPerspective(</span><span style="COLOR: #800080">45.0f</span><span style="COLOR: #000000">,&nbsp;m_aspectRatio,&nbsp;.01f,&nbsp;</span><span style="COLOR: #800080">200.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">::gluOrtho2D(-10.0f,&nbsp;10.0f,&nbsp;-10.0f,&nbsp;10.0f);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;switch&nbsp;back&nbsp;to&nbsp;the&nbsp;modelview&nbsp;matrix&nbsp;and&nbsp;clear&nbsp;it</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glMatrixMode(GL_MODELVIEW);<br>&nbsp;&nbsp;&nbsp;&nbsp;::glLoadIdentity();<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana">3</span><span style="FONT-FAMILY: 宋体">，绘制函数修改如下：</span></p>
<div class=cnblogs_code><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::RenderScene&nbsp;()<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绘制函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(m_xRot,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(m_yRot,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glInitNames();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPushName(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPushMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">2.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glLoadName(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glutSolidSphere(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPopMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPushMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glLoadName(</span><span style="COLOR: #800080">2</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #800080">2.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glutSolidCube(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPopMatrix();<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana">4</span><span style="FONT-FAMILY: 宋体">，加入对鼠标左键选择物体的处理</span></p>
<div class=cnblogs_code><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::ProcessSelection&nbsp;(CPoint&nbsp;point)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;xPos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;point.x&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;yPos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;point.y&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLuint&nbsp;selectBuff[</span><span style="COLOR: #800080">64</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLint&nbsp;hits,&nbsp;viewport[</span><span style="COLOR: #800080">4</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glSelectBuffer(</span><span style="COLOR: #800080">64</span><span style="COLOR: #000000">,&nbsp;selectBuff);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glGetIntegerv(GL_VIEWPORT,&nbsp;viewport);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glMatrixMode(GL_PROJECTION);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPushMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRenderMode(GL_SELECT);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glLoadIdentity();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gluPickMatrix(xPos,&nbsp;viewport[</span><span style="COLOR: #800080">3</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;yPos,&nbsp;</span><span style="COLOR: #800080">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">2</span><span style="COLOR: #000000">,&nbsp;viewport);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gluPerspective(</span><span style="COLOR: #800080">45.0f</span><span style="COLOR: #000000">,&nbsp;m_aspectRatio,&nbsp;.01f,&nbsp;</span><span style="COLOR: #800080">200.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RenderScene();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hits&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;glRenderMode(GL_RENDER);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(hits</span><span style="COLOR: #000000">==</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessObject(selectBuff);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glMatrixMode(GL_PROJECTION);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPopMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glMatrixMode(GL_MODELVIEW);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::ProcessObject&nbsp;(GLuint</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pSelectBuff)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;id&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pSelectBuff[</span><span style="COLOR: #800080">3</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(id</span><span style="COLOR: #000000">==</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">You&nbsp;clicked&nbsp;on&nbsp;Sphere</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(id</span><span style="COLOR: #000000">==</span><span style="COLOR: #800080">2</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">You&nbsp;clicked&nbsp;on&nbsp;Cube</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnLButtonDown(UINT&nbsp;nFlags,&nbsp;CPoint&nbsp;point)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessSelection(point);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CView::OnLButtonDown(nFlags,&nbsp;point);<br>}<br></span></div>
<div id=MySignature>
<p>作者：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>洞庭散人</font></u></a></p>
<p>出处：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>http://phinecos.cnblogs.com/</font></u></a>　　　　</p>
<div>本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 </div>
</div>
原文链接：<a href="http://www.cnblogs.com/phinecos/archive/2008/11/07/1328861.html">http://www.cnblogs.com/phinecos/archive/2008/11/07/1328861.html</a>
<img src ="http://www.cppblog.com/Sandywin/aggbug/111214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:50 <a href="http://www.cppblog.com/Sandywin/articles/111214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 14 Quadrics </title><link>http://www.cppblog.com/Sandywin/articles/111213.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:49:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111213.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111213.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111213.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111213.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111213.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="FONT-FAMILY: 宋体">本文在</span><span style="FONT-FAMILY: Verdana"><a href="http://www.cnblogs.com/phinecos/archive/2008/11/06/1327948.html"><u><font color=#800078><span style="FONT-FAMILY: 宋体">第</span>11<span style="FONT-FAMILY: 宋体">篇文章</span></font></u></a></span><span style="FONT-FAMILY: 宋体">的基础上，为其加入显示各种二次曲面的代码；</span>
<p><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Quadrics</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Every quadric has a few settings associated with it. We have to create a quadric first and then customize its settings to render the shape we want. The <strong><span style="FONT-FAMILY: Verdana">gluNewQuadric</span></strong> function creates a state variable that describes the current drawing style, orientation, lighting mode, texturing mode and the callback functions. Once we use this function to create a new quadric, we can customize the drawing of shapes by changing its state using functions such as </span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">gluQuadricDrawStyle - </span></strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">which selects the type of OpenGL drawing primitives that are used to drw the shape.</span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">gluQuadricOrientation -</span></strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt"> which controls the direction of the lighting normals.</span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">gluQuadricNormals - </span></strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">which controls the generation of lighting normals.</span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">gluQuadricTexture - </span></strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">which generates texture coordinates automatically for the quadric.</span></p>
<p><span style="FONT-FAMILY: Verdana">1,</span><span style="FONT-FAMILY: 宋体">在</span><span style="FONT-FAMILY: Verdana">CCY457OpenGLView</span><span style="FONT-FAMILY: 宋体">类中加入下列变量，用来表示二次曲面类型：</span><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Quadric</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;GLuint&nbsp;m_Quadric;<br></span></div>
<p></span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">，加入四个控制二次曲面类型的菜单项及其事件处理函数</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnQuadricSphere()&nbsp;<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">球体</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_Quadric&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnUpdateQuadricSphere(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_Quadric&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(TRUE);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnQuadricCone()&nbsp;<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">圆锥</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_Quadric&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">2</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnUpdateQuadricCone(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_Quadric&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">2</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(TRUE);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnQuadricCylinder()&nbsp;<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">柱体</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_Quadric&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnUpdateQuadricCylinder(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_Quadric&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(TRUE);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnQuadricDisk()&nbsp;<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">圆盘</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_Quadric&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">3</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnUpdateQuadricDisk(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_Quadric&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">3</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(TRUE);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(FALSE);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnQuadricPartialdisk()&nbsp;<br>{</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">/半圆盘</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_Quadric&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">4</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnUpdateQuadricPartialdisk(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_Quadric&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">4</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(TRUE);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana">3,</span><span style="FONT-FAMILY: 宋体">绘制函数修改如下：</span></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::RenderScene&nbsp;()<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绘制函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(m_xRot,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(m_yRot,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_TEXTURE_2D);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBindTexture(GL_TEXTURE_2D,m_Texture[</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLUquadricObj</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;obj;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;gluNewQuadric();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gluQuadricNormals(obj,&nbsp;GLU_SMOOTH);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gluQuadricTexture(obj,&nbsp;GL_TRUE);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">(m_Quadric)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">:&nbsp;&nbsp;&nbsp;&nbsp;gluSphere(obj,&nbsp;</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">:&nbsp;&nbsp;&nbsp;&nbsp;gluCylinder(obj,&nbsp;</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">3</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">2</span><span style="COLOR: #000000">:&nbsp;gluCylinder(obj,&nbsp;</span><span style="COLOR: #800080">0.1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">3</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">3</span><span style="COLOR: #000000">:&nbsp;gluDisk(obj,&nbsp;</span><span style="COLOR: #800080">0.5</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">4</span><span style="COLOR: #000000">:&nbsp;gluPartialDisk(obj,&nbsp;</span><span style="COLOR: #800080">0.5</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">10</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">180</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glDisable(GL_TEXTURE_2D);<br>}<br></span></div>
<p></span><font face=宋体>&nbsp;</font></p>
<div id=MySignature>
<p>作者：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>洞庭散人</font></u></a></p>
<p>出处：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>http://phinecos.cnblogs.com/</font></u></a>　　　　</p>
<div>本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 </div>
</div>
原文链接：<a href="http://www.cnblogs.com/phinecos/archive/2008/11/06/1328269.html">http://www.cnblogs.com/phinecos/archive/2008/11/06/1328269.html</a>
<img src ="http://www.cppblog.com/Sandywin/aggbug/111213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:49 <a href="http://www.cppblog.com/Sandywin/articles/111213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 13 Creating 2D and 3D Text </title><link>http://www.cppblog.com/Sandywin/articles/111212.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:47:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111212.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111212.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111212.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111212.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111212.html</trackback:ping><description><![CDATA[<p><strong><span style="FONT-FAMILY: Verdana">wglUseFontBitmaps</span></strong><strong><span style="FONT-FAMILY: 宋体">函数</span></strong><strong></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">The wglUseFontBitmaps() function creates a set of bitmap display lists based on the glyphs in the currently selected font in the current DC for use in the current OpenGL RC. It basically creates a series of sequential display lists which can be executed using the function glCallLists. The function takes care of aligning the raster positions of subsequent bitmaps once we specify the raster position for the first bitmap. We use the glRasterPos function to set the current raster position, where the bitmapped text would start appearing.</span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">The&nbsp; glRasterPos function works exactly the same way as glVertex function, the only difference being that the position is being transformed and not the object. Thus when we use wglUseFontBitmaps to generate display lists and then call them, the resulting text is displayed, starting at the current raster position, and the bitmaps are copied to the raster buffer, giving the effect of always having the text positioned in the xy plane of the screen.&nbsp;</span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">Thus we would use wglUseFontBitmaps when we need the text to be visible to the user and that the size of the text relative to its distance from the viewpoint doesn't matter.</span></p>
<p><strong><span style="FONT-FAMILY: Verdana">wglUseFontOutlines</span></strong><strong><span style="FONT-FAMILY: 宋体">函数</span></strong><strong></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">The wglUseFontOutlines function creates a set of 3D polygon or line based primitive display lists, based on the glyphs in the currently selected TrueType font in the current DC for use in the current OpenGL RC. Stroke and Raster fonts are not supported. These objects can then be used to draw 3D characters. This function also has additional arguments that control the extrusion of the 3D characters in the +Z direction, the deviation of the generated primitive vertices from the design outline of the font, whether to generated filled polygons or a wireframe primitives and an array of structures to hold the metrics of each of the generated characters.</span></p>
<p><span style="FONT-FAMILY: Verdana">1</span><span style="FONT-FAMILY: 宋体">，在</span><span style="FONT-FAMILY: Verdana">CCY457OpenGLView</span><span style="FONT-FAMILY: 宋体">类中加入下述变量：</span><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">For&nbsp;Text</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;GLuint&nbsp;m_3DTextList;<br>&nbsp;&nbsp;&nbsp;&nbsp;GLuint&nbsp;m_2DTextList;<br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;m_b3DText,&nbsp;m_b2DText;<br></span></div>
<p><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">并在构造函数中进行初始化：</span></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">CCY457OpenGLView::CCY457OpenGLView()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_xRot&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_yRot&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_b3DText&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_b2DText&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana">2</span><span style="FONT-FAMILY: 宋体">，加入两个用来创建文本的菜单项及其事件处理函数</span></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnText2dtext()&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_b3DText&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_b2DText&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TRUE;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnText3dtext()&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_b3DText&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TRUE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_b2DText&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnUpdateText2dtext(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(m_b2DText);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnUpdateText3dtext(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(m_b3DText);<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana" lang=EN-US>3,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">实际创建</span><span style="FONT-FAMILY: Verdana" lang=EN-US>2D</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">和</span><span style="FONT-FAMILY: Verdana" lang=EN-US>3D</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">文本列表的函数</span><span style="FONT-FAMILY: Verdana" lang=EN-US>:</span></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::Create3DTextLists()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;CFont&nbsp;m_font;<br>&nbsp;&nbsp;&nbsp;&nbsp;GLYPHMETRICSFLOAT&nbsp;agmf[</span><span style="COLOR: #800080">256</span><span style="COLOR: #000000">];&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_font.CreateFont(&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">12</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Height&nbsp;Of&nbsp;Font</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Width&nbsp;Of&nbsp;Font</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Angle&nbsp;Of&nbsp;Escapement</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Orientation&nbsp;Angle</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FW_BOLD,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Font&nbsp;Weight</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FALSE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Italic</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FALSE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Underline</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FALSE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Strikeout</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ANSI_CHARSET,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Character&nbsp;Set&nbsp;Identifier</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OUT_TT_PRECIS,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Output&nbsp;Precision</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLIP_DEFAULT_PRECIS,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Clipping&nbsp;Precision</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ANTIALIASED_QUALITY,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Output&nbsp;Quality</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FF_DONTCARE</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">DEFAULT_PITCH,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Family&nbsp;And&nbsp;Pitch</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Algerian</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;CFont</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;m_pOldFont&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SelectObject(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m_font);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;create&nbsp;display&nbsp;lists&nbsp;for&nbsp;glyphs&nbsp;0&nbsp;through&nbsp;255&nbsp;with&nbsp;0.1&nbsp;extrusion&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;and&nbsp;default&nbsp;deviation.&nbsp;The&nbsp;display&nbsp;list&nbsp;numbering&nbsp;starts&nbsp;at&nbsp;1000&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;(it&nbsp;could&nbsp;be&nbsp;any&nbsp;number)&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_3DTextList&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;glGenLists(</span><span style="COLOR: #800080">256</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;wglUseFontOutlines(m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetSafeHdc(),&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">255</span><span style="COLOR: #000000">,&nbsp;m_3DTextList,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,WGL_FONT_POLYGONS,&nbsp;agmf);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SelectObject(m_pOldFont);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::Create2DTextLists()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;CFont&nbsp;m_font;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_font.CreateFont(&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">24</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Height&nbsp;Of&nbsp;Font</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Width&nbsp;Of&nbsp;Font</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Angle&nbsp;Of&nbsp;Escapement</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Orientation&nbsp;Angle</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FW_NORMAL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Font&nbsp;Weight</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FALSE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Italic</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FALSE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Underline</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FALSE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Strikeout</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ANSI_CHARSET,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Character&nbsp;Set&nbsp;Identifier</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OUT_TT_PRECIS,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Output&nbsp;Precision</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLIP_DEFAULT_PRECIS,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Clipping&nbsp;Precision</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEFAULT_QUALITY,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Output&nbsp;Quality</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FF_DONTCARE</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">DEFAULT_PITCH,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Family&nbsp;And&nbsp;Pitch</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Algerian</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;CFont</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;m_pOldFont&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SelectObject(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m_font);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;create&nbsp;display&nbsp;lists&nbsp;for&nbsp;glyphs&nbsp;0&nbsp;through&nbsp;255&nbsp;with&nbsp;0.1&nbsp;extrusion&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;and&nbsp;default&nbsp;deviation.&nbsp;The&nbsp;display&nbsp;list&nbsp;numbering&nbsp;starts&nbsp;at&nbsp;1000&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;(it&nbsp;could&nbsp;be&nbsp;any&nbsp;number)&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_2DTextList&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;glGenLists(</span><span style="COLOR: #800080">256</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;wglUseFontBitmaps(m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetSafeHdc(),&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">255</span><span style="COLOR: #000000">,&nbsp;m_2DTextList);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SelectObject(m_pOldFont);<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana">4, InitializeOpenGL</span><span style="FONT-FAMILY: 宋体">函数中调用上述两个函数：</span></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">BOOL&nbsp;CCY457OpenGLView::InitializeOpenGL()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Get&nbsp;a&nbsp;DC&nbsp;for&nbsp;the&nbsp;Client&nbsp;Area</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_pDC&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;CClientDC(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Failure&nbsp;to&nbsp;Get&nbsp;DC</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_pDC&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Error&nbsp;Obtaining&nbsp;DC</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Failure&nbsp;to&nbsp;set&nbsp;the&nbsp;pixel&nbsp;format</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">SetupPixelFormat())<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Create&nbsp;Rendering&nbsp;Context</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_hRC&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;::wglCreateContext&nbsp;(m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetSafeHdc&nbsp;());<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Failure&nbsp;to&nbsp;Create&nbsp;Rendering&nbsp;Context</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_hRC&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Error&nbsp;Creating&nbsp;RC</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Make&nbsp;the&nbsp;RC&nbsp;Current</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(::wglMakeCurrent&nbsp;(m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetSafeHdc&nbsp;(),&nbsp;m_hRC)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">FALSE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Error&nbsp;making&nbsp;RC&nbsp;Current</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Specify&nbsp;Black&nbsp;as&nbsp;the&nbsp;clear&nbsp;color</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glClearColor(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Specify&nbsp;the&nbsp;back&nbsp;of&nbsp;the&nbsp;buffer&nbsp;as&nbsp;clear&nbsp;depth</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glClearDepth(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Enable&nbsp;Depth&nbsp;Testing</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glEnable(GL_DEPTH_TEST);<br>&nbsp;&nbsp;&nbsp;&nbsp;glShadeModel(GL_FLAT);<br>&nbsp;&nbsp;&nbsp;&nbsp;SetupLighting();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Create&nbsp;Font&nbsp;Display&nbsp;Lists</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Create2DTextLists();<br>&nbsp;&nbsp;&nbsp;&nbsp;Create3DTextLists();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana" lang=EN-US>5</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，绘制函数修改如下：</span></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::RenderScene&nbsp;()<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绘制函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">10.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">10.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_b2DText)<br>&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">2D文本<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Position&nbsp;The&nbsp;Text&nbsp;On&nbsp;The&nbsp;Screen</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glDisable(GL_LIGHTING);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRasterPos2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glListBase(m_2DTextList);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glCallLists(</span><span style="COLOR: #800080">6</span><span style="COLOR: #000000">,&nbsp;GL_UNSIGNED_BYTE&nbsp;,</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">OpenGL</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_LIGHTING);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_b3DText)<br>&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">3D文本</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glListBase(m_3DTextList);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glCallLists(</span><span style="COLOR: #800080">6</span><span style="COLOR: #000000">,&nbsp;GL_UNSIGNED_BYTE&nbsp;,</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">OpenGL</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span></div>
</span>
<div id=MySignature>
<p>作者：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>洞庭散人</font></u></a></p>
<p>出处：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>http://phinecos.cnblogs.com/</font></u></a>　　　　</p>
<div>本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 </div>
</div>
原文链接：<a href="http://www.cnblogs.com/phinecos/archive/2008/11/06/1328250.html">http://www.cnblogs.com/phinecos/archive/2008/11/06/1328250.html</a>
<img src ="http://www.cppblog.com/Sandywin/aggbug/111212.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:47 <a href="http://www.cppblog.com/Sandywin/articles/111212.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 12 Creating and Using Display Lists </title><link>http://www.cppblog.com/Sandywin/articles/111211.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:46:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111211.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111211.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111211.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111211.html</trackback:ping><description><![CDATA[<p><span style="FONT-FAMILY: 宋体"><span style="FONT-FAMILY: Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="FONT-FAMILY: 宋体">本文对</span><span style="FONT-FAMILY: Verdana"><a href="http://www.cnblogs.com/phinecos/archive/2008/11/06/1327948.html"><u><font color=#800078><span style="FONT-FAMILY: 宋体">第</span>11<span style="FONT-FAMILY: 宋体">篇文章</span></font></u></a></span><span style="FONT-FAMILY: 宋体">进行修改，使用显示列表来存储渲染命令。</span></p>
</span>
<p><span style="FONT-FAMILY: 宋体"><strong>显示列表</strong></span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">OpenGL provides a facility to create a preprocessed set of OpenGL commands called a display list. Creating a display list is a straight forward process. We just have to delimit the display list code with glNewList and glEndList. The display list is named by an integer and this name is used to call the list to be executed later on. Display lists are very useful for scenes which have lot of geometry that don't change in from frame to frame. If we have to rerender something that doesn't change it is not worth going through all the calculations required once again - it is better to store them somewhere in memory and reuse it. This is exactly what the display list lets us achieve. Thus if we are going to repeatedly execute the same sequence of OpenGL commands we can create and store a display list and then have this cached sequence of calls repeated with minimal overhead, since all the vertices, lighting calculations, textures and matrix operations are calculated only when the list is created and not when it is replayed. Only the results of the calculations end up being stored in display lists. This means we cannot modify the list once we create it.</span></p>
<p><span style="FONT-FAMILY: Verdana">1,CY457OpenGLView</span><span style="FONT-FAMILY: 宋体">类中加入一个变量来保存显示列表名称</span><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;GLuint&nbsp;m_sceneList;</span></div>
</span>
<p class=MsoNormal><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>2,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">创建显示列表</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::CreateSceneList()<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建显示列表</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_sceneList&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;glGenLists(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;glNewList(m_sceneList,&nbsp;GL_COMPILE);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetupLighting();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_TEXTURE_2D);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBindTexture(GL_TEXTURE_2D,m_Texture[</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Front&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Back&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBindTexture(GL_TEXTURE_2D,m_Texture[</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Left&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Right&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBindTexture(GL_TEXTURE_2D,m_Texture[</span><span style="COLOR: #800080">2</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Top&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Botton&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glDisable(GL_TEXTURE_2D);<br>&nbsp;&nbsp;&nbsp;&nbsp;glEndList();<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana">3</span><span style="FONT-FAMILY: 宋体">，在</span><span style="FONT-FAMILY: Verdana">InitializeOpenGL</span><span style="FONT-FAMILY: 宋体">函数中加入对上述函数的调用：</span></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建显示列表</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CreateSceneList();<br></span></div>
<p><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">，修改</span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>RenderScene</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">的绘制代码</span></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::RenderScene&nbsp;()<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绘制函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(m_xRot,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(m_yRot,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glCallList(m_sceneList);<br>}<br></span></div>
<p class=MsoNormal></span><font face=宋体>&nbsp;</font></p>
<div id=MySignature>
<p>作者：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>洞庭散人</font></u></a></p>
<p>出处：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>http://phinecos.cnblogs.com/</font></u></a>　　　　</p>
<div>本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 </div>
</div>
原文链接：<a href="http://www.cnblogs.com/phinecos/archive/2008/11/06/1328204.html">http://www.cnblogs.com/phinecos/archive/2008/11/06/1328204.html</a>
<img src ="http://www.cppblog.com/Sandywin/aggbug/111211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:46 <a href="http://www.cppblog.com/Sandywin/articles/111211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 10 Texture Mapping </title><link>http://www.cppblog.com/Sandywin/articles/111209.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:39:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111209.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111209.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111209.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111209.html</trackback:ping><description><![CDATA[<p align=left><span style="FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本文在</span><span style="FONT-FAMILY: Verdana"><a href="http://www.cnblogs.com/phinecos/archive/2008/11/05/1327595.html"><u><font color=#800078><span style="FONT-FAMILY: 宋体">第</span>9<span style="FONT-FAMILY: 宋体">篇文章</span></font></u></a></span><span style="FONT-FAMILY: 宋体">的基础上，为立方体加入纹理映射的功能。</span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Texture Mapping</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Texture Mapping in OpenGL is a fairly straightforward concept. Every texture is nothing but an image of some sort. Texture mapping is basically applying a texture to a surface. Textures can be 1D, 2D or even 3D. A 1D texture is an image with either a width or a height, not both. They are not very useful. 2D textures have both width and height and are very useful. 3D textures are called Volume textures and are used in medical imaging applications for viewing CAT, MRI, and other 3D scans. We will look at using 2D textures in OpenGL as they are the most widely used in 3D Graphics.</span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Windows Bitmap Files</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Images in Windows are typically stored in bitmap files. These images can be used as textures that will be applied to OpenGL surfaces. But before use them for texture mapping applications we should convert them to an OpenGL format. So we essentially have to read a Windows Bitmap into an OpenGL image. We can use the Auxiliary library to do so. It takes care of all the trouble involved in performing this conversion. Once a texture map is read into memory, the individual elements are called <strong><span style="FONT-FAMILY: Verdana">texels</span></strong>, just like an image's individual elements are called pixels. We wouldn't be dealing with these texels as we would be using the Aux library routine <strong><span style="FONT-FAMILY: Verdana">auxDIBImageLoadA</span></strong> to perform the conversion for us. Also, we need to make sure that the image dimensions are a power of 2. OpenGL images that we are going to use as a texture must have dimensions of a power of 2. Thus 32X32, 64X64, 128X64 etc. are all valid image sizes to be used as texture maps.</span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Defining 2D Textures</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">To define a 2D texture image in OpenGL we call <strong><span style="FONT-FAMILY: Verdana">glTexImage2D</span></strong> (when we are not using Mipmapping).</span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Mipmapping</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">When texture mapping is used with animation scaling of images cause some visual artifacts. This can be avoided by generating textures of various sizes from a large original texture and letting OpenGL automatically switch between the textures of various sizes. This technique is called Mipmapping and the individual textures are called Mipmaps. We can use the function <strong><span style="FONT-FAMILY: Verdana">gluBuild2DMipMaps</span></strong> to construct a series of mipmaps. </span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Texture Modes</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">OpenGL defines three texturing modes for different types of rendering. The first is <strong><span style="FONT-FAMILY: Verdana">GL_MODULATE</span></strong>, which modulates the current lighting and color information with the texture image. <strong><span style="FONT-FAMILY: Verdana">GL_DECAL </span></strong>is the second mode which only uses the texture image. Color and Lighting information will not affect the texture's appearance. The last mode is <strong><span style="FONT-FAMILY: Verdana">GL_BLEND</span></strong>, in which the texture image is blended with the current texture color and the current lighting and color information.</span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Texture Filters</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">OpenGL uses texture filters to interpolate between the texture pixels. It provides two types of texture filters: the minification filter (<strong><span style="FONT-FAMILY: Verdana">GL_TEXTURE_MIN_FILTER</span></strong>) for polygons smaller than the texture image and the magnification filter (<strong><span style="FONT-FAMILY: Verdana">GL_TEXTURE_MAG_FILTER</span></strong>) for polygons that are larger than the texture image. We'll look at how we will use these later in the tutorial.</span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Texture Coordinates</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Texture Coordinates associate a particular location in the texture image with vertices in a polygon. These coordinates determine how the texture is mapped onto the polygon. Texture coordinates lie between 0.0 and 1.0 in case of 2D textures. </span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Texture Wrapping</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">When texture coordinates go outside the range of 0.0 to 1.0, they are either clamped to the surface or repeated. This can be specified by setting the GL_TEXTURE_WRAP_* parameter appropriately, to either GL_CLAMP or GL_REPEAT. </span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Texture Objects</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Texture objects are a way of loading and maintaining multiple textures in memory without loading them each time before they are used. They are an optimization feature introduced recently in OpenGL.</span></p>
<p><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">1,</span><span style="FONT-SIZE: 10.5pt">在</span><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">CCY457OpenGLView</span><span style="FONT-SIZE: 10.5pt">类中加入下列变量，分别代表纹理环绕，纹理过滤，纹理模式的参数。</span><span style="FONT-SIZE: 10.5pt"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;GLdouble&nbsp;m_texWrap,&nbsp;m_texFilter,&nbsp;m_texMode;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">All&nbsp;Texture&nbsp;Names</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLuint&nbsp;m_Texture[</span><span style="COLOR: #800080">3</span><span style="COLOR: #000000">];&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">保存纹理对象的名称</span><span style="COLOR: #008000"><br></span></div>
<p>&nbsp;<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">并在构造函数中加入：</span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US><o:p></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">CCY457OpenGLView::CCY457OpenGLView()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_xRot&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_yRot&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_texWrap&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GL_CLAMP;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_texMode&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GL_DECAL;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_texFilter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GL_NEAREST;<br>}<br></span></div>
<p><font face=宋体><span style="FONT-FAMILY: Verdana">2,</span><span style="FONT-FAMILY: 宋体">加载纹理对象。</span></font><font face=宋体><span style="FONT-FAMILY: Verdana"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Texture&nbsp;Mapping&nbsp;Functions</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::LoadGLTextures()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Create&nbsp;Texture&nbsp;Names</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glGenTextures(</span><span style="COLOR: #800080">3</span><span style="COLOR: #000000">,&nbsp;m_Texture);<br>&nbsp;&nbsp;&nbsp;&nbsp;LoadTexture(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Apple.bmp</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;LoadTexture(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Fauve.bmp</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;LoadTexture(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Flower.bmp</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">2</span><span style="COLOR: #000000">);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::LoadTexture&nbsp;(CString&nbsp;fileName,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;texName)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Load&nbsp;Texture</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;AUX_RGBImageRec</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;m_texture;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_texture&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;auxDIBImageLoad((</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)fileName);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">m_texture)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Picture&nbsp;could&nbsp;not&nbsp;be&nbsp;loaded</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;glBindTexture(GL_TEXTURE_2D,&nbsp;m_Texture[texName]);<br>&nbsp;&nbsp;&nbsp;&nbsp;glTexParameteri(GL_TEXTURE_2D,&nbsp;GL_TEXTURE_WRAP_S,&nbsp;m_texWrap);<br>&nbsp;&nbsp;&nbsp;&nbsp;glTexParameteri(GL_TEXTURE_2D,&nbsp;GL_TEXTURE_WRAP_T,&nbsp;m_texWrap);<br>&nbsp;&nbsp;&nbsp;&nbsp;glTexParameteri(GL_TEXTURE_2D,&nbsp;GL_TEXTURE_MAG_FILTER,&nbsp;m_texFilter);<br>&nbsp;&nbsp;&nbsp;&nbsp;glTexParameteri(GL_TEXTURE_2D,&nbsp;GL_TEXTURE_MIN_FILTER,&nbsp;m_texFilter);<br>&nbsp;&nbsp;&nbsp;&nbsp;glTexEnvf(GL_TEXTURE_ENV,&nbsp;GL_TEXTURE_ENV_MODE,&nbsp;m_texMode);<br>&nbsp;&nbsp;&nbsp;&nbsp;gluBuild2DMipmaps(GL_TEXTURE_2D,&nbsp;</span><span style="COLOR: #800080">3</span><span style="COLOR: #000000">,&nbsp;m_texture</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">sizeX,m_texture</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">sizeY,&nbsp;GL_RGB,&nbsp;GL_UNSIGNED_BYTE,&nbsp;m_texture</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">data);<br>}<br></span></div>
</span></font></o:p></span>
<p>&nbsp;<span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>3,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">加入控制纹理映射效果的各个菜单项及其事件处理程序</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnTexturewrapGlclamp()&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_texWrap&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GL_CLAMP;<br>&nbsp;&nbsp;&nbsp;&nbsp;LoadGLTextures();<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnUpdateTexturewrapGlclamp(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_texWrap&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;GL_CLAMP)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnTexturewrapGlrepeat()&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_texWrap&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GL_REPEAT;<br>&nbsp;&nbsp;&nbsp;&nbsp;LoadGLTextures();<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnUpdateTexturewrapGlrepeat(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_texWrap&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;GL_REPEAT)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(FALSE);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnTexturefilterGlnearest()&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_texFilter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GL_NEAREST;<br>&nbsp;&nbsp;&nbsp;&nbsp;LoadGLTextures();<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnUpdateTexturefilterGlnearest(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_texFilter&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;GL_NEAREST)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio();&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnTexturefilterGllinear()&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_texFilter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GL_LINEAR;<br>&nbsp;&nbsp;&nbsp;&nbsp;LoadGLTextures();<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnUpdateTexturefilterGllinear(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_texFilter&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;GL_LINEAR)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio();&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnTexturemodeGlmodulate()&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_texMode&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GL_MODULATE;<br>&nbsp;&nbsp;&nbsp;&nbsp;LoadGLTextures();<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnUpdateTexturemodeGlmodulate(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_texMode&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;GL_MODULATE)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnTexturemodeGldecal()&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_texMode&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GL_DECAL;<br>&nbsp;&nbsp;&nbsp;&nbsp;LoadGLTextures();<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnUpdateTexturemodeGldecal(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_texMode&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;GL_DECAL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(FALSE);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnTexturemodeGlblend()&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_texMode&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GL_BLEND;<br>&nbsp;&nbsp;&nbsp;&nbsp;LoadGLTextures();<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnUpdateTexturemodeGlblend(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_texMode&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;GL_BLEND)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRadio(FALSE);<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana">4</span><span style="FONT-FAMILY: 宋体">，在</span><span style="FONT-FAMILY: Verdana">InitializeOpenGL()</span><span style="FONT-FAMILY: 宋体">中加入如下调用：</span></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">加载纹理</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;LoadGLTextures();<br></span></div>
<p><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>5</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">，绘制函数修改如下：</span></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::RenderScene&nbsp;()<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绘制函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(m_xRot,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(m_yRot,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_TEXTURE_2D);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBindTexture(GL_TEXTURE_2D,m_Texture[</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Front&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Back&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBindTexture(GL_TEXTURE_2D,m_Texture[</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Left&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Right&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBindTexture(GL_TEXTURE_2D,m_Texture[</span><span style="COLOR: #800080">2</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Top&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Botton&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTexCoord2f(</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glDisable(GL_TEXTURE_2D);<br>}<br></span></div>
<p>&nbsp;</p>
<p></span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US><o:p></o:p></span><font face=宋体>&nbsp;</font></p>
</span>
<div id=MySignature>
<p>作者：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>洞庭散人</font></u></a></p>
<p>出处：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>http://phinecos.cnblogs.com/</font></u></a>　　　　</p>
<div>本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 </div>
</div>
原文链接：<a href="http://www.cnblogs.com/phinecos/archive/2008/11/05/1327646.html">http://www.cnblogs.com/phinecos/archive/2008/11/05/1327646.html</a>
<img src ="http://www.cppblog.com/Sandywin/aggbug/111209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:39 <a href="http://www.cppblog.com/Sandywin/articles/111209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 11 Blending, Antialiasing and Fog </title><link>http://www.cppblog.com/Sandywin/articles/111210.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:39:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111210.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111210.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111210.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111210.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111210.html</trackback:ping><description><![CDATA[<strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt; mso-bidi-font-family: Arial; mso-bidi-font-style: italic" lang=EN-US>Blending and Transparency</span><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US><o:p></o:p></span></strong>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt; mso-bidi-font-family: Arial" lang=EN-US>Blending in OpenGL provides pixel-level control of RGBA color storage in the color buffer. To enable blending we must first call <strong><span style="FONT-FAMILY: Verdana; mso-bidi-font-family: Arial">glEnable(GL_BLEND</span></strong>). We have to set up the blending function <strong><span style="FONT-FAMILY: Verdana; mso-bidi-font-family: Arial">glBlendFunc</span></strong> with two arguments: the source and the destination colors. By default these are GL_ONE and GL_ZERO respectively, which is equivalent to glDisable(GL_BLEND). The blend functions are applied to the source color set by glColor and destination color in the color buffer. The results of the blending functions are added together to generate the new color value which is put onscreen. </span><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US><o:p></o:p></span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt; mso-bidi-font-family: Arial" lang=EN-US>Transparency is perhaps the most typical use of blending. In order to produce transparency we should set up the blending function as follows - <strong><span style="FONT-FAMILY: Verdana; mso-bidi-font-family: Arial">glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)</span></strong>. This combination takes the source color, scales it based on the alpha component and then adds the destination pixel color scaled by 1 minus the alpha value. It basically takes a fraction of the current drawing color and overlays it on the pixel on the screen. The alpha component can be from 0 (completely transparent) to 1 (completely opaque). </span><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US><o:p></o:p></span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt; mso-bidi-font-family: Arial; mso-bidi-font-style: italic" lang=EN-US>Anti-Aliasing</span></strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US><o:p></o:p></span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt; mso-bidi-font-family: Arial" lang=EN-US>You might have noticed in some of your OpenGL pictures that lines, especially nearly horizontal or nearly vertical ones, appear jagged. These jaggies appear because the ideal line is approximated by a series of pixels that must lie on the pixel grid. The jaggedness is called aliasing. Antialiasing can be enabled by calling the function - glEnable(GL_POLYGON_SMOOTH) for polygons.</span><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US><o:p></o:p></span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt; mso-bidi-font-family: Arial; mso-bidi-font-style: italic" lang=EN-US>Fog</span></strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US><o:p></o:p></span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt; mso-bidi-font-family: Arial" lang=EN-US>An entire image can be made to appear more natural by adding fog, which makes objects fade into the distance. Fog is a general term that describes similar forms of atmospheric effects; it can be used to simulate haze, mist, smoke, or pollution. Fog is essential in visual-simulation applications, where limited visibility needs to be approximated. </span><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US><o:p></o:p></span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt; mso-bidi-font-family: Arial" lang=EN-US>When fog is enabled, objects that are farther from the viewpoint begin to fade into the fog color. You can control the density of the fog, which determines the rate at which objects fade as the distance increases, as well as the fog's color. Since fog is applied after matrix transformations, lighting, and texturing are performed, it affects transformed, lit, and textured objects. </span><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US><o:p></o:p></span></p>
<p><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt; mso-bidi-font-family: Arial" lang=EN-US>Using fog is easy. Enable it by passing GL_FOG to glEnable(), and you choose the color and the equation that controls the density with glFog*(). <o:p></o:p></span></p>
<p><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US>1,</span><span style="FONT-SIZE: 10.5pt">在</span><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US>CCY457OpenGLView</span><span style="FONT-SIZE: 10.5pt">类中加入下列布尔变量，分别代表是否开启混合，雾和反锯齿效果。</span><span style="FONT-SIZE: 10.5pt"></p>
<div class=cnblogs_code><img id=Code_Closed_Image_113901 onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_113901').style.display='none'; document.getElementById('Code_Open_Image_113901').style.display='inline'; document.getElementById('Code_Open_Text_113901').style.display='inline';" align=top src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 height=16><img style="DISPLAY: none" id=Code_Open_Image_113901 onclick="this.style.display='none'; document.getElementById('Code_Open_Text_113901').style.display='none'; getElementById('Code_Closed_Image_113901').style.display='inline'; getElementById('Code_Closed_Text_113901').style.display='inline';" align=top src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 height=16><span id=Code_Closed_Text_113901 class=cnblogs_code_Collapse>Code</span><span style="DISPLAY: none" id=Code_Open_Text_113901><br><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Effects</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;m_blend;<br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;m_fog;<br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;m_antialias;<br></span></span></div>
<p><span lang=EN-US><o:p><span style="FONT-FAMILY: 宋体">并在构造函数中对其初始化：</span></o:p></span><span lang=EN-US><o:p><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">CCY457OpenGLView::CCY457OpenGLView()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_xRot&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_yRot&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_texWrap&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GL_CLAMP;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_texMode&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GL_DECAL;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_texFilter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GL_NEAREST;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_blend&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_fog&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_antialias&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">，加入控制上述三种效果的菜单项及其事件处理函数</span></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;COpenGLView::OnEffectsBlending()&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;command&nbsp;handler&nbsp;code&nbsp;here</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_blend&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">m_blend;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_blend)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_BLEND);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glDisable(GL_BLEND);<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;COpenGLView::OnUpdateEffectsBlending(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;command&nbsp;update&nbsp;UI&nbsp;handler&nbsp;code&nbsp;here</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetCheck(m_blend);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;COpenGLView::OnEffectsAntialiasing()&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;command&nbsp;handler&nbsp;code&nbsp;here</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_antialias&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">m_antialias;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_antialias)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_POLYGON_SMOOTH);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glDisable(GL_POLYGON_SMOOTH);<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;COpenGLView::OnUpdateEffectsAntialiasing(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;command&nbsp;update&nbsp;UI&nbsp;handler&nbsp;code&nbsp;here</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetCheck(m_antialias);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;COpenGLView::OnEffectsFog()&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;command&nbsp;handler&nbsp;code&nbsp;here</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_fog&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">m_fog;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_fog)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_FOG);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glDisable(GL_FOG);<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;COpenGLView::OnUpdateEffectsFog(CCmdUI</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pCmdUI)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;command&nbsp;update&nbsp;UI&nbsp;handler&nbsp;code&nbsp;here</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;pCmdUI</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetCheck(m_fog);<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana">3</span><span style="FONT-FAMILY: 宋体">，在</span><span style="FONT-FAMILY: Verdana">InitializeOpenGL</span><span style="FONT-FAMILY: 宋体">函数中对雾效果进行设置。</span></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">BOOL&nbsp;CCY457OpenGLView::InitializeOpenGL()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Get&nbsp;a&nbsp;DC&nbsp;for&nbsp;the&nbsp;Client&nbsp;Area</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_pDC&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;CClientDC(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Failure&nbsp;to&nbsp;Get&nbsp;DC</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_pDC&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Error&nbsp;Obtaining&nbsp;DC</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Failure&nbsp;to&nbsp;set&nbsp;the&nbsp;pixel&nbsp;format</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">SetupPixelFormat())<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Create&nbsp;Rendering&nbsp;Context</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_hRC&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;::wglCreateContext&nbsp;(m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetSafeHdc&nbsp;());<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Failure&nbsp;to&nbsp;Create&nbsp;Rendering&nbsp;Context</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_hRC&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Error&nbsp;Creating&nbsp;RC</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Make&nbsp;the&nbsp;RC&nbsp;Current</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(::wglMakeCurrent&nbsp;(m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetSafeHdc&nbsp;(),&nbsp;m_hRC)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">FALSE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Error&nbsp;making&nbsp;RC&nbsp;Current</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Specify&nbsp;Black&nbsp;as&nbsp;the&nbsp;clear&nbsp;color</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glClearColor(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Specify&nbsp;the&nbsp;back&nbsp;of&nbsp;the&nbsp;buffer&nbsp;as&nbsp;clear&nbsp;depth</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glClearDepth(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Enable&nbsp;Depth&nbsp;Testing</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glEnable(GL_DEPTH_TEST);<br>&nbsp;&nbsp;&nbsp;&nbsp;::glShadeModel(GL_SMOOTH);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置雾</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glFogi(GL_FOG_MODE,&nbsp;GL_EXP);<br>&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;fog_color[</span><span style="COLOR: #800080">4</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{</span><span style="COLOR: #800080">0.2f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.2f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.2f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;::glFogfv(GL_FOG_COLOR,&nbsp;fog_color);<br>&nbsp;&nbsp;&nbsp;&nbsp;::glFogf(GL_FOG_DENSITY,&nbsp;</span><span style="COLOR: #800080">0.25</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">加载纹理</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;LoadGLTextures();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置灯光</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;SetupLighting();<br>&nbsp;&nbsp;&nbsp;&nbsp;::glBlendFunc(GL_SRC_ALPHA,&nbsp;GL_ONE_MINUS_SRC_ALPHA);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br>}<br></span></div>
</span></o:p></span></span>
<div id=MySignature>
<p>作者：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>洞庭散人</font></u></a></p>
<p>出处：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>http://phinecos.cnblogs.com/</font></u></a>　　　　</p>
<div>本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 </div>
</div>
原文链接：<a href="http://www.cnblogs.com/phinecos/archive/2008/11/06/1327948.html">http://www.cnblogs.com/phinecos/archive/2008/11/06/1327948.html</a>
<img src ="http://www.cppblog.com/Sandywin/aggbug/111210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:39 <a href="http://www.cppblog.com/Sandywin/articles/111210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 9 Lighting </title><link>http://www.cppblog.com/Sandywin/articles/111207.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:37:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111207.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111207.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111207.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111207.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111207.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本文在</span><span style="FONT-FAMILY: Verdana"><a href="http://www.cnblogs.com/phinecos/archive/2008/11/05/1327571.html"><u><font color=#800078><span style="FONT-FAMILY: 宋体">第</span>8<span style="FONT-FAMILY: 宋体">篇文章</span></font></u></a></span><span style="FONT-FAMILY: 宋体">的基础上，为其加入灯光效果。</span>
<p align=left><strong><span style="FONT-FAMILY: Verdana">Materials</span></strong></p>
<p style="TEXT-INDENT: 21pt" align=left><span style="FONT-FAMILY: Verdana">OpenGL materials are description of what objects are made of. It basically specifies how much of light they reflect and this is what we would be seeing. OpenGL lighting goes a long way towards modeling real world lighting. In order achieve proper lighting effects in OpenGL we need to specify material properties. Material properties are of the following types - Diffuse and Ambient properties, Specular and Shininess Properties and Emissive Properties. These are the properties that specify how a surface dissipates light. </span></p>
<p align=left><strong><span style="FONT-FAMILY: Verdana">Diffuse and Ambient Properties</span></strong></p>
<p style="TEXT-INDENT: 21pt" align=left><span style="FONT-FAMILY: Verdana">The diffuse and ambient reflective material properties are a type of reflective effect that is independent of the viewpoint. Diffuse lighting is light from a particular direction and ambient lighting is light that is coming from all directions. A particular light source can have both a diffuse and an ambient component. These material properties describe how the material reflects diffuse and ambient light falling on it.</span></p>
<p align=left><strong><span style="FONT-FAMILY: Verdana">Specular and Shininess Properties</span></strong></p>
<p style="TEXT-INDENT: 21pt" align=left><span style="FONT-FAMILY: Verdana">The specular and the shininess properties of the surface describe the reflective effects that are affected by the position of the viewpoint. Specular light is reflected from a surface that produces the reflective highlights in a surface. The shininess is a value that describes how focussed the reflective properties are. </span></p>
<p align=left><strong><span style="FONT-FAMILY: Verdana">Emissive Property</span></strong></p>
<p style="TEXT-INDENT: 21pt" align=left><span style="FONT-FAMILY: Verdana">This is the light that an object gives off by itself. A typical example of this is a light source itself. </span></p>
<p align=left><strong><span style="FONT-FAMILY: Verdana">Specifying a material property</span></strong></p>
<p style="TEXT-INDENT: 21pt" align=left><span style="FONT-FAMILY: Verdana">In order to specify a material property we have to use the OpenGL function - glMaterial*(). We can individually specify the material properties using this function. Another way to go about this is by color tracking. This can be achieved by enabling color tracking and specifying what parameters of the material would be affected by the glColor command. This is an optimization feature that OpenGL provides and is useful in cases where we will be changing only particular properties of the material and not all of them. In this tutorial we will use glMaterial to specify the material properties as we will be individually setting each one of them.</span></p>
<p align=left><span style="FONT-FAMILY: Verdana">Choosing the material properties determine how the object will look. We will follow the following steps in choosing the material properties - </span></p>
<ul type=disc>
    <li style="TEXT-ALIGN: left"><span style="FONT-FAMILY: Verdana">Decide on the diffuse and ambient colors.</span>
    <li style="TEXT-ALIGN: left"><span style="FONT-FAMILY: Verdana">Decide on the shininess depending on the type of material object that is being modeled such as silver, wood etc.</span>
    <li style="TEXT-ALIGN: left"><span style="FONT-FAMILY: Verdana">Decide whether the object would be giving off any light on its own.</span> </li>
</ul>
<p align=left><span style="FONT-FAMILY: Verdana">The above values can be obtained by mere trial and error. We will look at how we go about doing this when we write a program.</span></p>
<p align=left><strong><span style="FONT-FAMILY: Verdana">Lighting</span></strong></p>
<p style="TEXT-INDENT: 21pt" align=left><span style="FONT-FAMILY: Verdana">OpenGL has two types of lighting: global lighting or ambient lighting and individual light sources which have position and direction. The way an object is lit depends on the material of the object, all the lights and their properties, their positions and direction etc. This means lighting calculations are quite expensive and are hence turned off by OpenGL by default. So we have to turn on lighting before using it. Global lighting parameters can be set using the glLightModel function which specify the lighting model we would be using - such as an infinite viewer or a local viewer (for specular highlights), single sided or two sided lighting and the RGBA value for the ambient light. In addition to this we would be specifying the individual light sources.&nbsp;</span><span style="FONT-FAMILY: Verdana">&nbsp; </p>
<p class=MsoNormal><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">，设置灯光和材质属性</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::SetupLighting&nbsp;()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Material&nbsp;Properties</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;matSpecular[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;matShininess[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">50.0f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;matAmbient[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">0.25f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.25f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.25f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;matDiffuse[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;glMaterialfv(GL_FRONT,&nbsp;GL_SPECULAR,&nbsp;matSpecular);<br>&nbsp;&nbsp;&nbsp;&nbsp;glMaterialfv(GL_FRONT,&nbsp;GL_SHININESS,&nbsp;matShininess);<br>&nbsp;&nbsp;&nbsp;&nbsp;glMaterialfv(GL_FRONT,&nbsp;GL_DIFFUSE,&nbsp;matDiffuse);<br>&nbsp;&nbsp;&nbsp;&nbsp;glMaterialfv(GL_FRONT,&nbsp;GL_AMBIENT,&nbsp;matAmbient);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Lighting&nbsp;Parameters<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Enable&nbsp;Lighting</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_LIGHTING);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Specify&nbsp;a&nbsp;single&nbsp;directional&nbsp;light</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;ambient1[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;diffuse1[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;specular1[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;position1[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;glLightfv(GL_LIGHT0,&nbsp;GL_AMBIENT,&nbsp;ambient1);<br>&nbsp;&nbsp;&nbsp;&nbsp;glLightfv(GL_LIGHT0,&nbsp;GL_DIFFUSE,&nbsp;diffuse1);<br>&nbsp;&nbsp;&nbsp;&nbsp;glLightfv(GL_LIGHT0,&nbsp;GL_SPECULAR,&nbsp;specular1);<br>&nbsp;&nbsp;&nbsp;&nbsp;glLightfv(GL_LIGHT0,&nbsp;GL_POSITION,&nbsp;position1);&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_LIGHT0);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Specify&nbsp;a&nbsp;single&nbsp;positional&nbsp;spotlight</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;ambient2[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;diffuse2[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;position2[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;direction2[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;glLightfv(GL_LIGHT1,&nbsp;GL_AMBIENT,&nbsp;ambient2);<br>&nbsp;&nbsp;&nbsp;&nbsp;glLightfv(GL_LIGHT1,&nbsp;GL_DIFFUSE,&nbsp;diffuse2);<br>&nbsp;&nbsp;&nbsp;&nbsp;glLightfv(GL_LIGHT1,&nbsp;GL_POSITION,&nbsp;position2);&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;glLightfv(GL_LIGHT1,&nbsp;GL_SPOT_DIRECTION,&nbsp;direction2);<br>&nbsp;&nbsp;&nbsp;&nbsp;glLightf(GL_LIGHT1,&nbsp;GL_SPOT_CUTOFF,&nbsp;</span><span style="COLOR: #800080">15.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_LIGHT1);<br>}<br></span></div>
<p class=MsoNormal><span style="FONT-FAMILY: Verdana">2</span><span style="FONT-FAMILY: 宋体">，在初始化</span><span style="FONT-FAMILY: Verdana">OpenGL</span><span style="FONT-FAMILY: 宋体">时调用上述函数</span></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">BOOL&nbsp;CCY457OpenGLView::InitializeOpenGL()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Get&nbsp;a&nbsp;DC&nbsp;for&nbsp;the&nbsp;Client&nbsp;Area</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_pDC&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;CClientDC(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Failure&nbsp;to&nbsp;Get&nbsp;DC</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_pDC&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Error&nbsp;Obtaining&nbsp;DC</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Failure&nbsp;to&nbsp;set&nbsp;the&nbsp;pixel&nbsp;format</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">SetupPixelFormat())<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Create&nbsp;Rendering&nbsp;Context</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_hRC&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;::wglCreateContext&nbsp;(m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetSafeHdc&nbsp;());<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Failure&nbsp;to&nbsp;Create&nbsp;Rendering&nbsp;Context</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_hRC&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Error&nbsp;Creating&nbsp;RC</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Make&nbsp;the&nbsp;RC&nbsp;Current</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(::wglMakeCurrent&nbsp;(m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetSafeHdc&nbsp;(),&nbsp;m_hRC)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">FALSE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Error&nbsp;making&nbsp;RC&nbsp;Current</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Specify&nbsp;Black&nbsp;as&nbsp;the&nbsp;clear&nbsp;color</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glClearColor(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Specify&nbsp;the&nbsp;back&nbsp;of&nbsp;the&nbsp;buffer&nbsp;as&nbsp;clear&nbsp;depth</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glClearDepth(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Enable&nbsp;Depth&nbsp;Testing</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glEnable(GL_DEPTH_TEST);<br>&nbsp;&nbsp;&nbsp;&nbsp;glShadeModel(GL_FLAT);<br>&nbsp;&nbsp;&nbsp;&nbsp;SetupLighting();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br>}<br><br></span></div>
<p class=MsoNormal></span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US><o:p></o:p></span>&nbsp;</p>
</span>
<div id=MySignature>
<p>作者：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>洞庭散人</font></u></a></p>
<p>出处：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>http://phinecos.cnblogs.com/</font></u></a>　　　　</p>
<div>本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 </div>
</div>
原文链接：<a href="http://www.cnblogs.com/phinecos/archive/2008/11/05/1327595.html">http://www.cnblogs.com/phinecos/archive/2008/11/05/1327595.html</a>
<img src ="http://www.cppblog.com/Sandywin/aggbug/111207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:37 <a href="http://www.cppblog.com/Sandywin/articles/111207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 8 Colors </title><link>http://www.cppblog.com/Sandywin/articles/111206.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:35:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111206.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111206.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111206.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111206.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111206.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenGL</span><span style="FONT-FAMILY: 宋体">支持两种颜色模式：</span><span style="FONT-FAMILY: Verdana">RGBA</span><span style="FONT-FAMILY: 宋体">和颜色索引模式，本文关注于前者。</span>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Smooth Shading and Flat Shading</span></strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">&nbsp;&nbsp;</span></p>
<p><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">When Smooth Shading is specified, the color values are interpolated between vertices. If Flat Shading is specified, one vertex is selected as being representative of all the vertices, thus the entire primitive is displayed using one single color.&nbsp;</span></p>
<p><strong><span style="FONT-FAMILY: 宋体">一个简单</span></strong><strong><span style="FONT-FAMILY: Verdana">Demo</span></strong></p>
<p><span style="FONT-FAMILY: Verdana">1,</span><span style="FONT-FAMILY: 宋体">在</span><span style="FONT-FAMILY: Verdana">CCY457OpenGLView.h</span><span style="FONT-FAMILY: 宋体">中加入如下旋转控制变量：</span><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;m_xRot,&nbsp;m_yRot;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绕x,y轴旋转的角度，随时间不断变化</span><span style="COLOR: #008000"><br></span></div>
<p></span><span style="FONT-FAMILY: Verdana">&nbsp;</span><span style="FONT-FAMILY: 宋体">并在构造函数中初始化：</span><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">CCY457OpenGLView::CCY457OpenGLView()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_xRot&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_yRot&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">;<br>}<br></span></div>
<p></span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">，在</span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>OnTimer</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">函数中，修改绕</span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>x,y</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">轴旋转的角度值</span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US><o:p></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnTimer(UINT&nbsp;nIDEvent)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_xRot&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;m_xRot&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_yRot&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;m_yRot&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,&nbsp;FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;CView::OnTimer(nIDEvent);<br>}<br></span></div>
<p><font face=宋体><span style="FONT-FAMILY: Verdana">3,</span><span style="FONT-FAMILY: 宋体">加入两个菜单项，控制</span><span style="FONT-FAMILY: Verdana">OpenGL</span><span style="FONT-FAMILY: 宋体">的渲染模式</span></font></o:p></span><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnShadingmodelSmooth()&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;glShadeModel(GL_SMOOTH);<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>}<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnShadingmodelFlat()&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;glShadeModel(GL_FLAT);<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>}<br></span></div>
<p class=MsoNormal><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'">，在</span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>RenderScene</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'">中加入绘制代码：</span></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::RenderScene&nbsp;()<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绘制函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(m_xRot,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(m_yRot,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Front&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Back&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Left&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Right&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Top&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Botton&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>}<br></span></div>
<p></span><font face=宋体>&nbsp;</font></p>
<div id=MySignature>
<p>作者：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>洞庭散人</font></u></a></p>
<p>出处：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>http://phinecos.cnblogs.com/</font></u></a>　　　　</p>
<div>本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 </div>
</div>
原文链接：<a href="http://www.cnblogs.com/phinecos/archive/2008/11/05/1327571.html">http://www.cnblogs.com/phinecos/archive/2008/11/05/1327571.html</a>
<img src ="http://www.cppblog.com/Sandywin/aggbug/111206.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:35 <a href="http://www.cppblog.com/Sandywin/articles/111206.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 7 Animation </title><link>http://www.cppblog.com/Sandywin/articles/111205.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:34:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111205.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111205.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111205.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111205.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111205.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: Verdana; FONT-WEIGHT: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="FONT-FAMILY: 宋体; FONT-WEIGHT: normal">本文中将对</span></strong><strong><span style="FONT-FAMILY: Verdana; FONT-WEIGHT: normal"><a href="http://www.cnblogs.com/phinecos/archive/2008/11/05/1327417.html"><u><font color=#800078><span style="FONT-FAMILY: 宋体">第</span>5<span style="FONT-FAMILY: 宋体">篇文章</span></font></u></a></span></strong><strong><span style="FONT-FAMILY: 宋体; FONT-WEIGHT: normal">的太阳系模型进行修改，加入一些动画效果。此外还会加入显示帧速率的代码。</span></strong><strong></strong>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-WEIGHT: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体; FONT-WEIGHT: normal">加入动画效果最容易的方法是响应</span></strong><strong><span style="FONT-FAMILY: Verdana; FONT-WEIGHT: normal">WM_TIMER</span></strong><strong><span style="FONT-FAMILY: 宋体; FONT-WEIGHT: normal">消息，在其消息处理函数中改变一些参数值，比如每过多少毫秒就旋转一定的角度，并且重绘场景。</span></strong><strong></strong></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Frame Rate</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Frame rate is nothing but the number of frames that can be rendered per second. The higher this rate, the smoother the animation. In order to calculate the frame rate we retrieve the system time (using the Windows multimedia API function <strong>timeGetTime()</strong>)<strong> </strong>before the rendering is performed and after the buffer is swapped. The difference between the two values is the elapsed time to render one frame. Thus we can calculate the frame rate for a given application.</span></p>
<p><span style="FONT-FAMILY: Verdana">1</span><span style="FONT-FAMILY: 宋体">，我们需要调用</span><strong><span style="FONT-FAMILY: Verdana">timeGetTime</span></strong><strong><span style="FONT-FAMILY: 宋体">（）</span></strong><span style="FONT-FAMILY: 宋体">函数</span><span style="FONT-FAMILY: Verdana">,</span><span style="FONT-FAMILY: 宋体">因此在</span><span style="FONT-FAMILY: Verdana">stdafx.h</span><span style="FONT-FAMILY: 宋体">中加入</span><span style="FONT-FAMILY: Verdana">:</span><span style="FONT-FAMILY: Verdana"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">mmsystem.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;for&nbsp;MM&nbsp;timers&nbsp;(you'll&nbsp;need&nbsp;WINMM.LIB)</span></div>
</span>
<p><span style="FONT-FAMILY: 宋体">并且</span><span style="FONT-FAMILY: Verdana">Link—&gt;Object/library modules</span><span style="FONT-FAMILY: 宋体">中加入</span><span style="FONT-FAMILY: Verdana">winmm.lib</span></p>
<p><span style="FONT-FAMILY: Verdana">2</span><span style="FONT-FAMILY: 宋体">，为了计算绘制用时，在</span><span style="FONT-FAMILY: Verdana">CCY457OpenGLView.h</span><span style="FONT-FAMILY: 宋体">中加入如下变量：</span><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">For&nbsp;elapsed&nbsp;timing&nbsp;calculations</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;m_StartTime,&nbsp;m_ElapsedTime,&nbsp;m_previousElapsedTime;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;m_WindowTitle;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Window&nbsp;Title</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;DayOfYear;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;HourOfDay;<br></span></div>
<p><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">并在构造函数中进行初始化：</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">CCY457OpenGLView::CCY457OpenGLView()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;DayOfYear&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;HourOfDay&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">;<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana">3</span><span style="FONT-FAMILY: 宋体">，为了计算帧速率，修改</span><span style="FONT-FAMILY: Verdana">OnCreate</span><span style="FONT-FAMILY: 宋体">函数，在其中获取窗口标题，从标题中去掉</span><span style="FONT-FAMILY: Verdana">&#8221;Untitled&#8221;</span><span style="FONT-FAMILY: 宋体">字样，并启动定时器；</span></p>
<p><span style="FONT-FAMILY: Verdana">4</span><span style="FONT-FAMILY: 宋体">，同样为了计算帧速率，修改</span><span style="FONT-FAMILY: Verdana">OnDraw</span><span style="FONT-FAMILY: 宋体">函数如下，在其中用</span><span style="FONT-FAMILY: Verdana">glPushMatrix </span><span style="FONT-FAMILY: 宋体">和</span><span style="FONT-FAMILY: Verdana"> glPopMatrix</span><span style="FONT-FAMILY: 宋体">将</span><span style="FONT-FAMILY: Verdana">RenderScene</span><span style="FONT-FAMILY: 宋体">函数包裹起来，从而确保动画会正确运行。在</span><span style="FONT-FAMILY: Verdana">SwapBuffers</span><span style="FONT-FAMILY: 宋体">调用后我们调用</span><span style="FONT-FAMILY: Verdana">PostRenderScene</span><span style="FONT-FAMILY: 宋体">来显示帧速率信息到窗口标题。</span><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnDraw(CDC</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pDC)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;CCY457OpenGLDoc</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pDoc&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GetDocument();<br>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_VALID(pDoc);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Get&nbsp;the&nbsp;system&nbsp;time,&nbsp;in&nbsp;milliseconds.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_ElapsedTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;::timeGetTime();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;get&nbsp;current&nbsp;time</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;ElapsedTimeinMSSinceLastRender()&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">30</span><span style="COLOR: #000000">&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Clear&nbsp;out&nbsp;the&nbsp;color&nbsp;&amp;&nbsp;depth&nbsp;buffers</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glClear(&nbsp;GL_COLOR_BUFFER_BIT&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;GL_DEPTH_BUFFER_BIT&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;glPushMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RenderScene();<br>&nbsp;&nbsp;&nbsp;&nbsp;glPopMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Tell&nbsp;OpenGL&nbsp;to&nbsp;flush&nbsp;its&nbsp;pipeline</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glFinish();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Now&nbsp;Swap&nbsp;the&nbsp;buffers</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::SwapBuffers(&nbsp;m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetSafeHdc()&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Perform&nbsp;Post&nbsp;Display&nbsp;Processing<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Only&nbsp;update&nbsp;the&nbsp;title&nbsp;every&nbsp;15&nbsp;redraws&nbsp;(this&nbsp;is&nbsp;about<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;every&nbsp;1/2&nbsp;second)</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;PostRenderScene();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;the&nbsp;very&nbsp;last&nbsp;thing&nbsp;we&nbsp;do&nbsp;is&nbsp;to&nbsp;save<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;the&nbsp;elapsed&nbsp;time,&nbsp;this&nbsp;is&nbsp;used&nbsp;with&nbsp;the<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;next&nbsp;elapsed&nbsp;time&nbsp;to&nbsp;calculate&nbsp;the<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;elapsed&nbsp;time&nbsp;since&nbsp;a&nbsp;render&nbsp;and&nbsp;the&nbsp;frame&nbsp;rate</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_previousElapsedTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;m_ElapsedTime;<br>}<br></span></div>
</span></span></span>
<p class=MsoNormal><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">，在</span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>CCY457OpenGLView</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">类中加入下述成员函数，用来显示帧速率信息到窗口标题</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #808080">//////////////////////////////////////////////////////////////////////////////<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;PostRenderScene<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;perform&nbsp;post&nbsp;display&nbsp;processing<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;The&nbsp;default&nbsp;PostRenderScene&nbsp;places&nbsp;the&nbsp;framerate&nbsp;in&nbsp;the<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;view's&nbsp;title.&nbsp;Replace&nbsp;this&nbsp;with&nbsp;your&nbsp;own&nbsp;title&nbsp;if&nbsp;you&nbsp;like.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::PostRenderScene(&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Only&nbsp;update&nbsp;the&nbsp;title&nbsp;every&nbsp;15&nbsp;redraws&nbsp;(this&nbsp;is&nbsp;about<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;every&nbsp;1/2&nbsp;second)</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;updateFrame&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">15</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #800080">16</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">updateFrame&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;updateFrame&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">[</span><span style="COLOR: #800080">256</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;_snprintf(&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">200</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">%s&nbsp;(&nbsp;%d&nbsp;Frames/sec&nbsp;)</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)m_WindowTitle,&nbsp;FramesPerSecond()&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;GetParentFrame()</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetWindowText(&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;);<br>}<br></span><span style="COLOR: #808080">//////////////////////////////////////////////////////////////////////////////<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;FramesPerSecond<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;fetch&nbsp;frame&nbsp;rate&nbsp;calculations</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::FramesPerSecond(&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;eTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ElapsedTimeinMSSinceLastRender();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)eTime&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)(</span><span style="COLOR: #800080">1000</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)eTime);<br>}<br>DWORD&nbsp;ElapsedTimeinMSSinceLastStartup()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">(m_ElapsedTime&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;m_StartTime);<br>}<br>DWORD&nbsp;ElapsedTimeinMSSinceLastRender()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">(m_ElapsedTime&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;m_previousElapsedTime);<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana">5</span><span style="FONT-FAMILY: 宋体">，在</span><span style="FONT-FAMILY: Verdana">OnTimer</span><span style="FONT-FAMILY: 宋体">函数中，通过增加变量</span><span style="FONT-FAMILY: Verdana">DayOfYear </span><span style="FONT-FAMILY: 宋体">和</span><span style="FONT-FAMILY: Verdana"> HourOfDay</span><span style="FONT-FAMILY: 宋体">的值来控制地球和月球的位置，并且调用</span><span style="FONT-FAMILY: Verdana">InvalidateRect</span><span style="FONT-FAMILY: 宋体">来刷新界面。</span><span style="FONT-FAMILY: Verdana"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnTimer(UINT&nbsp;nIDEvent)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(DayOfYear&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">365</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DayOfYear</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DayOfYear&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(HourOfDay&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">365</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HourOfDay</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HourOfDay&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,&nbsp;FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;CView::OnTimer(nIDEvent);<br>}<br></span></div>
<p><font face=宋体><span style="FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.5pt" lang=EN-US>6</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">，在</span><span style="FONT-FAMILY: Verdana" lang=EN-US>RenderScene</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: 'Times New Roman'">中加入</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">绘制代码：</span></font><font face=宋体><span style="FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.5pt" lang=EN-US><o:p></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::RenderScene&nbsp;()<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绘制函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Draw&nbsp;the&nbsp;Sun</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutWireSphere(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Rotate&nbsp;the&nbsp;Planet&nbsp;in&nbsp;its&nbsp;orbit</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glRotatef((GLfloat)&nbsp;(</span><span style="COLOR: #800080">360.0</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">DayOfYear)</span><span style="COLOR: #000000">/</span><span style="COLOR: #800080">365.0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #800080">4.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;glPushMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Rotate&nbsp;the&nbsp;Planet&nbsp;in&nbsp;its&nbsp;orbit</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRotatef((GLfloat)(</span><span style="COLOR: #800080">360</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">HourOfDay)</span><span style="COLOR: #000000">/</span><span style="COLOR: #800080">24.0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Draw&nbsp;the&nbsp;Planet</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glutWireSphere(</span><span style="COLOR: #800080">0.2f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;glPopMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;glRotatef((GLfloat)&nbsp;(</span><span style="COLOR: #800080">360.0</span><span style="COLOR: #000000">*</span><span style="COLOR: #800080">12.5</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">DayOfYear)</span><span style="COLOR: #000000">/</span><span style="COLOR: #800080">365.0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Draw&nbsp;the&nbsp;Moon</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutWireSphere(</span><span style="COLOR: #800080">0.01f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">);<br>}<br></span></div>
</o:p></span></font></span>
<p class=MsoNormal></span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US><o:p></o:p></span><font face=宋体>&nbsp;</font></p>
<div id=MySignature>
<p>作者：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>洞庭散人</font></u></a></p>
<p>出处：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>http://phinecos.cnblogs.com/</font></u></a>　　　　</p>
<div>本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 </div>
</div>
原文链接：<a href="http://www.cnblogs.com/phinecos/archive/2008/11/05/1327558.html">http://www.cnblogs.com/phinecos/archive/2008/11/05/1327558.html</a>
<img src ="http://www.cppblog.com/Sandywin/aggbug/111205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:34 <a href="http://www.cppblog.com/Sandywin/articles/111205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 6 Keyboard and Mouse Control </title><link>http://www.cppblog.com/Sandywin/articles/111204.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:33:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111204.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111204.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111204.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111204.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111204.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;<span style="FONT-FAMILY: Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="FONT-FAMILY: 宋体">在上一篇的基础上加入对键盘和鼠标的事件处理程序，以便用其来控制</span><span style="FONT-FAMILY: Verdana">3D</span><span style="FONT-FAMILY: 宋体">物体的旋转和移动。</span>
<p><span style="FONT-FAMILY: Verdana">1,</span><span style="FONT-FAMILY: 宋体">首先在</span><span style="FONT-FAMILY: Verdana">CCY457OpenGLView</span><span style="FONT-FAMILY: 宋体">类中为</span><span style="FONT-FAMILY: Verdana">WM_KEYDOWN,&nbsp; WM_LBUTTONDOWN, WM_LBUTTONUP </span><span style="FONT-FAMILY: 宋体">和</span><span style="FONT-FAMILY: Verdana"> WM_MOUSEMOVE</span><span style="FONT-FAMILY: 宋体">四个事件加入事件处理函数。</span></p>
<p><span style="FONT-FAMILY: Verdana">2,</span><span style="FONT-FAMILY: 宋体">在</span><span style="FONT-FAMILY: Verdana">CCY457OpenGLView.h</span><span style="FONT-FAMILY: 宋体">中加入下列用于控制旋转和移动的变量：</span><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;m_xAngle;<br>&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;m_yAngle;<br>&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;m_xPos;<br>&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;m_yPos;<br>&nbsp;&nbsp;&nbsp;&nbsp;CPoint&nbsp;m_MouseDownPoint;<br></span></div>
<p></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">并在构造函数中初始化：</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">CCY457OpenGLView::CCY457OpenGLView()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_xPos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_yPos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_xAngle&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_yAngle&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">;<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana">3</span><span style="FONT-FAMILY: 宋体">，加入绘制代码：</span><span style="FONT-FAMILY: Verdana"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;COpenGLView::RenderScene&nbsp;()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;glLoadIdentity();<br>&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(m_xPos,&nbsp;m_yPos,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(m_xAngle,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(m_yAngle,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;glutWireCube(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>}<br></span></div>
<p></span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">，为四个事件处理函数加入控制代码</span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US><o:p></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;COpenGLView::OnKeyDown(UINT&nbsp;nChar,&nbsp;UINT&nbsp;nRepCnt,&nbsp;UINT&nbsp;nFlags)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;message&nbsp;handler&nbsp;code&nbsp;here&nbsp;and/or&nbsp;call&nbsp;default</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">&nbsp;(nChar)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;VK_UP:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_yPos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;m_yPos&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.1f</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;VK_DOWN:&nbsp;&nbsp;&nbsp;&nbsp;m_yPos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;m_yPos&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.1f</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;VK_LEFT:&nbsp;&nbsp;&nbsp;&nbsp;m_xPos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;m_xPos&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.1f</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;VK_RIGHT:&nbsp;&nbsp;m_xPos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;m_xPos&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0.1f</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">default</span><span style="COLOR: #000000">:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Press&nbsp;the&nbsp;arrow&nbsp;keys&nbsp;only</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;CView::OnKeyDown(nChar,&nbsp;nRepCnt,&nbsp;nFlags);<br>}<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;COpenGLView::OnLButtonDown(UINT&nbsp;nFlags,&nbsp;CPoint&nbsp;point)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;message&nbsp;handler&nbsp;code&nbsp;here&nbsp;and/or&nbsp;call&nbsp;default</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_MouseDownPoint</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">point;<br>&nbsp;&nbsp;&nbsp;&nbsp;SetCapture();<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;CView::OnLButtonDown(nFlags,&nbsp;point);<br>}<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;COpenGLView::OnLButtonUp(UINT&nbsp;nFlags,&nbsp;CPoint&nbsp;point)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;message&nbsp;handler&nbsp;code&nbsp;here&nbsp;and/or&nbsp;call&nbsp;default</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_MouseDownPoint</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">CPoint(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;ReleaseCapture();<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;CView::OnLButtonUp(nFlags,&nbsp;point);<br>}<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;COpenGLView::OnMouseMove(UINT&nbsp;nFlags,&nbsp;CPoint&nbsp;point)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;message&nbsp;handler&nbsp;code&nbsp;here&nbsp;and/or&nbsp;call&nbsp;default<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Check&nbsp;if&nbsp;we&nbsp;have&nbsp;captured&nbsp;the&nbsp;mouse</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(GetCapture()</span><span style="COLOR: #000000">==</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Increment&nbsp;the&nbsp;object&nbsp;rotation&nbsp;angles</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_xAngle</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">(point.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m_MouseDownPoint.y)</span><span style="COLOR: #000000">/</span><span style="COLOR: #800080">3.6</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_yAngle</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">(point.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m_MouseDownPoint.x)</span><span style="COLOR: #000000">/</span><span style="COLOR: #800080">3.6</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Redraw&nbsp;the&nbsp;view</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Set&nbsp;the&nbsp;mouse&nbsp;point</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_MouseDownPoint</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">point;<br>&nbsp;&nbsp;&nbsp;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;CView::OnMouseMove(nFlags,&nbsp;point);<br>}<br></span></div>
<p></o:p></span></span><font face=宋体>&nbsp;</font></p>
<div id=MySignature>
<p>作者：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>洞庭散人</font></u></a></p>
<p>出处：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>http://phinecos.cnblogs.com/</font></u></a>　　　　</p>
<div>本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 </div>
</div>
原文链接：<a href="http://www.cnblogs.com/phinecos/archive/2008/11/05/1327443.html">http://www.cnblogs.com/phinecos/archive/2008/11/05/1327443.html</a>
<img src ="http://www.cppblog.com/Sandywin/aggbug/111204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:33 <a href="http://www.cppblog.com/Sandywin/articles/111204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 5 Transformations - Rotations, Translations and Scaling </title><link>http://www.cppblog.com/Sandywin/articles/111203.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:30:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111203.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111203.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111203.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111203.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111203.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt"><strong>Transformations - Translation, Rotation and Scaling</strong></span>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Translation is nothing but moving along an arbitrary axis. Rotation is spinning about an arbitrary axis. Scaling is increase or decrease in size along an arbitrary axis. One important point to remember is that OpenGL uses a right hand coordinate system where Z-ve goes into the Screen. An object said to be undergoing a transformation could be undergoing a translation, rotation and/or scaling. Understanding how different types of transformations work together is very important. </span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">本文将对地球进行建模，让其围绕着太阳，此外它还会有月球伴随,而在下文中将会加入对鼠标和键盘的事件响应机制。</span><span style="FONT-FAMILY: 宋体"></p>
<p class=MsoNormal><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">绘制代码</span></strong></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::RenderScene&nbsp;()<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绘制函数<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Draw&nbsp;Sun</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(</span><span style="COLOR: #800080">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;glutWireSphere(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Draw&nbsp;Planet</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glPushMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.2f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">2.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(</span><span style="COLOR: #800080">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glutWireSphere(</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Draw&nbsp;Moon</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPushMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.2f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">2.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(</span><span style="COLOR: #800080">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glutWireSphere(</span><span style="COLOR: #800080">0.05f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">20</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPopMatrix();<br>&nbsp;&nbsp;&nbsp;&nbsp;glPopMatrix();<br>}<br></span></div>
<p class=MsoNormal>&nbsp;</p>
</span>
<div id=MySignature>
<p>作者：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>洞庭散人</font></u></a></p>
<p>出处：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>http://phinecos.cnblogs.com/</font></u></a>　　　　</p>
<div>本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 </div>
</div>
原文链接：<a href="http://www.cnblogs.com/phinecos/archive/2008/11/05/1327417.html">http://www.cnblogs.com/phinecos/archive/2008/11/05/1327417.html</a>
<img src ="http://www.cppblog.com/Sandywin/aggbug/111203.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:30 <a href="http://www.cppblog.com/Sandywin/articles/111203.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 4 Drawing Simple 3D objects </title><link>http://www.cppblog.com/Sandywin/articles/111201.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:27:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111201.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111201.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111201.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111201.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111201.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: 宋体"><strong>视见体</strong></span>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Viewing Volume is nothing but the region of 3D Cartesian space in that will occupy the window. It is nothing but the minimum and maximum x, y and z values that are inside the window. So if a vertex is outside this range of x, y and z values then they are clipped by OpenGL before rendering can occur. </span></p>
<p><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">Z Buffer</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">The new term we have to deal with in addition to width and height of an object in 3D graphics is <strong>depth</strong>. The depth of an object is its distance from the viewpoint. The viewpoint is the location from which we are looking at that point. This depth value goes into the depth or Z-buffer. If we are drawing 2 objects that have some pixels that overlap, the first object will after it is rendered have its depth value in the depth buffer. When the next object is rendered, OpenGL will check to see whether the pixel it&#8217;s about to draw is in front of (with respect to the viewpoint) any pixel from the first object that&#8217;s already drawn. It does this by checking the Z value of the current pixel with the value that is already in the buffer. If the new pixel is closer to the viewpoint, OpenGL places its depth value in the depth buffer. This is how the Z-buffer works.</span></p>
<p><strong><span style="FONT-SIZE: 10.5pt">正交投影和透视投影</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">One term we need to understand very well to learn 3D Graphics well is <strong>projection</strong>. Well, computer graphics at its simplest is all about setting a color to a pixel on screen. And a pixel on a screen can have only two dimensions. So 3D graphics is merely an illusion. The 3D coordinates that we specify will have to be projected onto a 2D surface to create this illusion for us. And we have to specify how this projection works. By specifying a projection we specify the clipping or viewing volume. </span></p>
<p><strong><span style="FONT-SIZE: 10.5pt">基本</span></strong><strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt">3D</span></strong><strong><span style="FONT-SIZE: 10.5pt">图形绘制</span></strong><strong></strong></p>
<p align=left><span style="FONT-FAMILY: Verdana">1,</span><span style="FONT-FAMILY: 宋体">在</span><span style="FONT-FAMILY: Verdana">CCY457OpenGLView.h</span><span style="FONT-FAMILY: 宋体">中加入下列变量</span><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">BOOL&nbsp;m_bPoint;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Status&nbsp;of&nbsp;Point</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">BOOL&nbsp;m_bLine;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Status&nbsp;of&nbsp;Line</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">BOOL&nbsp;m_bPolygon;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Status&nbsp;of&nbsp;Polygon</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">BOOL&nbsp;m_bTriangle;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Status&nbsp;of&nbsp;Triangle</span><span style="COLOR: #008000"><br></span></div>
<p><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">并且在构造函数中初始化</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">CCY457OpenGLView::CCY457OpenGLView()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bPoint&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bLine&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bPolygon&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTriangle&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bCube&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTorus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTeapot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bIcosahedron&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bSimpleCube&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana">2,</span><span style="FONT-FAMILY: 宋体">加入五个菜单项及其对应的事件处理程序。</span></p>
<p>&#160;</p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnObjectsTeapot()&nbsp;<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">画茶壶</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_bCube&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTorus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTeapot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bIcosahedron&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bSimpleCube&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnObjectsCube()&nbsp;<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">画立方体</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_bCube&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TRUE;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTorus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTeapot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bIcosahedron&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bSimpleCube&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnObjectsIcosahedron()&nbsp;<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">画二十面体</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_bCube&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTorus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTeapot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bIcosahedron&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TRUE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bSimpleCube&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnObjectsTorus()&nbsp;<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">画环面</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_bCube&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTorus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTeapot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bIcosahedron&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bSimpleCube&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnObjectsSimplecube()&nbsp;<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">画简单立方体</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_bCube&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTorus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTeapot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bIcosahedron&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bSimpleCube&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana">3</span><span style="FONT-FAMILY: 宋体">，由于开始绘制</span><span style="FONT-FAMILY: Verdana">3</span><span style="FONT-FAMILY: 宋体">维图形，因此使用第一篇文章的</span><span style="FONT-FAMILY: Verdana">OnSize()</span><span style="FONT-FAMILY: 宋体">函数。</span></p>
<p><span style="FONT-FAMILY: Verdana">4</span><span style="FONT-FAMILY: 宋体">，</span><span style="FONT-FAMILY: 宋体">在</span><span style="FONT-FAMILY: Verdana">RenderScene</span><span style="FONT-FAMILY: 宋体">中加入具体的绘制代码：</span><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::RenderScene&nbsp;()<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绘制函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_bPoint</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">TRUE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPointSize(</span><span style="COLOR: #800080">3.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POINTS);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_bLine</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">TRUE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_LINES);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_bTriangle</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">TRUE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_TRIANGLES);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">2.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">2.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_bPolygon</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">TRUE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">3.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">4.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">3.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">1.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">6.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">3.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Replace&nbsp;the&nbsp;current&nbsp;matrix&nbsp;with&nbsp;Identity&nbsp;Matrix</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glLoadIdentity();<br>&nbsp;&nbsp;&nbsp;&nbsp;glTranslatef(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">5.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;glRotatef(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">30.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Draw&nbsp;a&nbsp;Cube</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_bCube)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glutWireCube(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Draw&nbsp;a&nbsp;Torus</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_bTorus)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glutWireTorus(</span><span style="COLOR: #800080">0.5f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">50</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">50</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Draw&nbsp;a&nbsp;Teapot</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_bTeapot)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glutWireTeapot(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Draw&nbsp;a&nbsp;Icosahedron</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_bIcosahedron)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glutWireIcosahedron();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Draw&nbsp;a&nbsp;cube&nbsp;by&nbsp;specifying&nbsp;the&nbsp;vertices&nbsp;individually</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_bSimpleCube)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPolygonMode(GL_FRONT_AND_BACK,&nbsp;GL_LINE);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Front&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Back&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Left&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Right&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Top&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Botton&nbsp;Face</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f(&nbsp;</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span></div>
</span></span></span>
<div id=MySignature>
<p>作者：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>洞庭散人</font></u></a></p>
<p>出处：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>http://phinecos.cnblogs.com/</font></u></a>　　　　</p>
<div>本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 </div>
</div>
原文链接：<a href="http://www.cnblogs.com/phinecos/archive/2008/11/05/1327385.html">http://www.cnblogs.com/phinecos/archive/2008/11/05/1327385.html</a>
<img src ="http://www.cppblog.com/Sandywin/aggbug/111201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:27 <a href="http://www.cppblog.com/Sandywin/articles/111201.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 3 Drawing Simple 2D Shapes </title><link>http://www.cppblog.com/Sandywin/articles/111200.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:24:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111200.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111200.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111200.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111200.html</trackback:ping><description><![CDATA[<p><strong><span style="FONT-FAMILY: 宋体">剪裁区域</span></strong></p>
<p><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt; mso-bidi-font-family: Arial" lang=EN-US><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong>In OpenGL when you create a window to draw in we must specify the coordinate system we want to use and how to map the specified coordinates into physical screen coordinates. We would be using the 2D Cartesian coordinate system with the origin 0,0 at the centre of the screen. Before we can start plotting points, lines and shapes in a window we must also specify how to translate coordinate pairs into screen coordinates, by specifying the clipping area i.e the region of Cartesian space that occupies the window.&nbsp;</span><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US><o:p></o:p></span></p>
<p><strong>视口<o:p></o:p></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt; mso-bidi-font-family: Arial" lang=EN-US>The clipping area height and width will rarely match the width and height of the window in pixels. The coordinate system must therefore be mapped from logical Cartesian coordinates to physical screen coordinates. This mapping is specified by a setting known as the viewport, which is the region within the window's client area that is used for drawing the clipping area.&nbsp;</span><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US><o:p></o:p></span></p>
<p><strong>顶点和基本图元<o:p></o:p></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt; mso-bidi-font-family: Arial" lang=EN-US>A vertex is nothing more than a coordinate in 2D or 3D space. In both 2D and 3D, when we draw an object we compose it with several smaller shapes called primitives which as 1 or 2 dimensional entities such as points, lines, and polygons. Each corner of an object composed of primitives is a vertex</span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US><o:p><strong><span style="FONT-FAMILY: 宋体">基本图形绘制程序</span></strong></o:p></span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US><o:p></o:p></span><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US><o:p><span style="FONT-FAMILY: Verdana"><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>1,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">在</span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>CCY457OpenGLView.h</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">中加入下列变量：</span></span></o:p></span><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US><o:p><span style="FONT-FAMILY: Verdana"><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US><o:p></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">BOOL&nbsp;m_bPoint;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Status&nbsp;of&nbsp;Point</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;m_bLine;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Status&nbsp;of&nbsp;Line</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;m_bPolygon;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Status&nbsp;of&nbsp;Polygon</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;m_bTriangle;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Status&nbsp;of&nbsp;Triangle</span><span style="COLOR: #008000"><br></span></div>
</o:p></span></span></o:p></span>
<p><span style="FONT-FAMILY: Verdana">2,</span><span style="FONT-FAMILY: 宋体">并且加入四个菜单项及其对应的事件处理程序。</span><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnShapesPoint()&nbsp;<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">画点</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_bPoint&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TRUE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bLine&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bPolygon&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTriangle&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnShapesLine()&nbsp;<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">画线</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_bPoint&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bLine&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TRUE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bPolygon&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTriangle&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnShapesPolygon()&nbsp;<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">画多边形</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_bPoint&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bLine&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bPolygon&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TRUE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTriangle&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnShapesTriangle()&nbsp;<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">画三角形</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_bPoint&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bLine&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bPolygon&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bTriangle&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL,FALSE);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>3,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">修改第二篇文章中的</span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>OnSize()</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">函数，因为本文中只绘制</span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">维图形</span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>.</span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnSize(UINT&nbsp;nType,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cx,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cy)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;CView::OnSize(nType,&nbsp;cx,&nbsp;cy);<br>&nbsp;&nbsp;&nbsp;&nbsp;GLdouble&nbsp;aspect_ratio;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;width/height&nbsp;ratio</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;cx&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;cy&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;select&nbsp;the&nbsp;full&nbsp;client&nbsp;area</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glViewport(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;cx,&nbsp;cy);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;compute&nbsp;the&nbsp;aspect&nbsp;ratio<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;this&nbsp;will&nbsp;keep&nbsp;all&nbsp;dimension&nbsp;scales&nbsp;equal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;aspect_ratio&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(GLdouble)cx</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(GLdouble)cy;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;select&nbsp;the&nbsp;projection&nbsp;matrix&nbsp;and&nbsp;clear&nbsp;it</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glMatrixMode(GL_PROJECTION);<br>&nbsp;&nbsp;&nbsp;&nbsp;::glLoadIdentity();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;select&nbsp;the&nbsp;viewing&nbsp;volume<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">::gluPerspective(45.0f,&nbsp;aspect_ratio,&nbsp;.01f,&nbsp;200.0f);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::gluOrtho2D(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">10.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">10.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">10.0f</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">10.0f</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;switch&nbsp;back&nbsp;to&nbsp;the&nbsp;modelview&nbsp;matrix&nbsp;and&nbsp;clear&nbsp;it</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glMatrixMode(GL_MODELVIEW);<br>&nbsp;&nbsp;&nbsp;&nbsp;::glLoadIdentity();<br>}<br></span></div>
<p><o:p><span style="FONT-FAMILY: Verdana">4,</span><span style="FONT-FAMILY: 宋体">在</span><span style="FONT-FAMILY: Verdana">RenderScene</span><span style="FONT-FAMILY: 宋体">中加入具体的绘制代码：</span></o:p><o:p><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::RenderScene&nbsp;()<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绘制函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_bPoint</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">TRUE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glPointSize(</span><span style="COLOR: #800080">3.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POINTS);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_bLine</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">TRUE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_LINES);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_bTriangle</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">TRUE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_TRIANGLES);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">2.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">2.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_bPolygon</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">TRUE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_POLYGON);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">3.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">4.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">3.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #800080">1.5f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">6.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glVertex2f(</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">3.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glEnd();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span></div>
<p></span>&nbsp;</p>
</o:p></span></span>
<div id=MySignature>
<p>作者：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>洞庭散人</font></u></a></p>
<p>出处：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>http://phinecos.cnblogs.com/</font></u></a>　　　　</p>
<div>本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 </div>
</div>
原文链接：<a href="http://www.cnblogs.com/phinecos/archive/2008/11/05/1327343.html">http://www.cnblogs.com/phinecos/archive/2008/11/05/1327343.html</a>
<img src ="http://www.cppblog.com/Sandywin/aggbug/111200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:24 <a href="http://www.cppblog.com/Sandywin/articles/111200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 2 Setting up OpenGL on Windows </title><link>http://www.cppblog.com/Sandywin/articles/111199.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:22:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111199.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111199.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111199.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111199.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111199.html</trackback:ping><description><![CDATA[<p><strong><span style="FONT-FAMILY: Verdana"><strong><span style="FONT-FAMILY: 宋体; COLOR: red; FONT-SIZE: 10.5pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana">源代码下载：</span></strong><strong><span style="FONT-FAMILY: Verdana; COLOR: red; FONT-SIZE: 10.5pt; mso-bidi-font-family: 宋体" lang=EN-US><a href="http://files.cnblogs.com/phinecos/OpenGL_ch2.rar"><span style="FONT-WEIGHT: normal"><u><font color=#0066cc>OpenGL_ch2.rar&nbsp;</font></u></span></a></span></strong><span style="FONT-FAMILY: Verdana; FONT-SIZE: 10.5pt" lang=EN-US><o:p></o:p></span></p>
</span></strong>
<p><strong><span style="FONT-FAMILY: Verdana">WGL &#8211; Windows</span></strong><strong><span style="FONT-FAMILY: 宋体">的</span></strong><strong><span style="FONT-FAMILY: Verdana"> OpenGL</span></strong><strong><span style="FONT-FAMILY: 宋体">扩展层</span></strong><strong></strong> </p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">The WGL extension consists of a set of functions (wglCreateContext, wglDeleteContext etc.) and structures (such as PIXELFORMATDESCRIPTOR, GLYPHMETRICSFLOAT) etc. Thus every OpenGL implementation has a platform-specific portion which has to be set up and used according to the particular platform. </span></p>
<p><strong><span style="FONT-FAMILY: 宋体">设备上下文</span></strong><strong></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">The Windows Graphical Device Interface (GDI) is capable of drawing to screen, to memory, to printers or to any other device that provides a GDI interface layer and that can process GDI calls. GDI accomplishes this by a rendering handle to the currently selected device, which is called the device context, or DC. </span></p>
<p><strong><span style="FONT-FAMILY: 宋体">绘制上下文</span></strong><strong></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">A rendering context is the OpenGL equivalent of the GDI DC. All OpenGL calls are rendered to the device through a RC. The rendering context maintains OpenGL state variables such as current background color, current color etc. just as the DC maintains GDI state variables such as current pen, current brush etc. </span></p>
<p><strong><span style="FONT-FAMILY: 宋体">像素格式</span></strong><strong></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">Pixel formats are the translation layer between OpenGL calls and the rendering operation that Windows performs. </span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">举个例子，若像素格式只支持很少一部分颜色值，则</span><span style="FONT-FAMILY: Verdana">OpenGL</span><span style="FONT-FAMILY: 宋体">在用</span><span style="FONT-FAMILY: Verdana">RGB</span><span style="FONT-FAMILY: 宋体">值</span><span style="FONT-FAMILY: Verdana">(128,120,135)</span><span style="FONT-FAMILY: 宋体">绘制一个像素时，就可能使用转换后的值</span><span style="FONT-FAMILY: Verdana">(128,128,128)</span><span style="FONT-FAMILY: 宋体">来绘制</span><span style="FONT-FAMILY: Verdana">. </span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">The pixel format selected essentially describes such things as how colors are displayed, depth of field resolution and what additional capabilities are supported by the rendering context created. </span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana"><strong><span style="FONT-FAMILY: 宋体">第一个基于</span></strong><strong><span style="FONT-FAMILY: Verdana">MFC</span></strong><strong><span style="FONT-FAMILY: 宋体">的</span></strong><strong><span style="FONT-FAMILY: Verdana">OpenGL</span></strong><strong><span style="FONT-FAMILY: 宋体">应用程</span></strong></span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana"><span style="FONT-FAMILY: 宋体">开发环境：</span><span style="FONT-FAMILY: Verdana">VC6.0</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt"><span style="FONT-FAMILY: Verdana">1， </span><span style="FONT-FAMILY: 宋体">首先下载需要的</span><span style="FONT-FAMILY: Verdana">GLUT</span><span style="FONT-FAMILY: 宋体">头文件</span><span style="FONT-FAMILY: Verdana">,DLL</span><span style="FONT-FAMILY: 宋体">和</span><span style="FONT-FAMILY: Verdana">Lib</span><span style="FONT-FAMILY: 宋体">文件，下载链接</span><span style="FONT-FAMILY: Verdana">: <a href="http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip"><tt><span style="FONT-FAMILY: Verdana"><u><font color=#0066cc>glutdlls37beta.zip</font></u></span></tt></a> (149 kilobytes),</span><span style="FONT-FAMILY: 宋体">解压缩后把</span><span style="FONT-FAMILY: Verdana">gltu.h</span><span style="FONT-FAMILY: 宋体">放到</span><span style="FONT-FAMILY: Verdana">"VC98/Include/GL"</span><span style="FONT-FAMILY: 宋体">下，把</span><span style="FONT-FAMILY: Verdana">glut.lib</span><span style="FONT-FAMILY: 宋体">和</span><span style="FONT-FAMILY: Verdana">glut32.lib</span><span style="FONT-FAMILY: 宋体">放到</span><span style="FONT-FAMILY: Verdana">"VC9/Lib" 下</span><span style="FONT-FAMILY: 宋体">，</span><span style="FONT-FAMILY: Verdana">glut32.dll</span><span style="FONT-FAMILY: 宋体">和</span><span style="FONT-FAMILY: Verdana">glut.dll</span><span style="FONT-FAMILY: 宋体">放到你创建的应用程序的运行目录下</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt"><span style="FONT-FAMILY: Verdana">2， </span><span style="FONT-FAMILY: 宋体">创建一个</span><span style="FONT-FAMILY: Verdana">MFC SDI</span><span style="FONT-FAMILY: 宋体">应用程序，在项目属性中加入所需要链接的库文件</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt"><span style="FONT-FAMILY: 宋体"><img border=0 alt="" src="http://images.cnblogs.com/cnblogs_com/phinecos/20080415/2008110501.jpg" width=675 height=452></span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt"><span style="FONT-FAMILY: 宋体"><span style="FONT-FAMILY: Verdana">1， </span><span style="FONT-FAMILY: 宋体">在</span><span style="FONT-FAMILY: Verdana">stdafx.h</span><span style="FONT-FAMILY: 宋体">中加入下列语句：</span></span><span style="FONT-FAMILY: 宋体"><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">OpenGL&nbsp;Headers</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">gl/</span><span style="COLOR: #800000">gl.h&gt;</span><span style="COLOR: #800000"><br></span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">gl/</span><span style="COLOR: #800000">glu.h&gt;</span><span style="COLOR: #800000"><br></span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">gl/</span><span style="COLOR: #800000">glut.h&gt;</span><span style="COLOR: #800000"><br></span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">gl/</span><span style="COLOR: #800000">glaux.h&gt;</span><span style="COLOR: #800000"><br></span></div>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt"></span><span style="FONT-FAMILY: Verdana">2， </span><span style="FONT-FAMILY: 宋体">打开</span><span style="FONT-FAMILY: Verdana">ClassWizard,</span><span style="FONT-FAMILY: 宋体">选择</span><span style="FONT-FAMILY: Verdana">CCY457OpenGLView</span><span style="FONT-FAMILY: 宋体">类，为下述消息加入消息处理函数：</span><strong><span style="FONT-FAMILY: Verdana">WM_CREATE (for OnCreate), WM_DESTROY (for OnDestroy), WM_SIZE (for OnSize), WM_ERASEBACKGROUND (for OnEraseBkground)</span></strong><span style="FONT-FAMILY: Verdana">.</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt"><span style="FONT-FAMILY: Verdana"><span style="FONT-FAMILY: 宋体"><font face=Verdana>3,</font>在窗口创建之前我们必须设置窗口风格包含</span><strong><span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt">WS_CLIPCHILDREN</span></strong><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">和</span><span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt"> <strong>WS_CLIPSIBLINGS</strong></span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">，从而避免</span><span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt">OpenGL</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">绘制到其他窗口中去。这些应该放在</span><strong><span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt">PreCreateWindow()</span></strong><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">中。</span></span></p>
<span style="FONT-FAMILY: Verdana"><span style="FONT-FAMILY: Verdana">
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">BOOL&nbsp;CCY457OpenGLView::PreCreateWindow(CREATESTRUCT</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;cs)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO:&nbsp;Modify&nbsp;the&nbsp;Window&nbsp;class&nbsp;or&nbsp;styles&nbsp;here&nbsp;by&nbsp;modifying<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;the&nbsp;CREATESTRUCT&nbsp;cs<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">An&nbsp;OpenGL&nbsp;Window&nbsp;must&nbsp;be&nbsp;created&nbsp;with&nbsp;the&nbsp;following&nbsp;flags</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cs.style&nbsp;</span><span style="COLOR: #000000">|=</span><span style="COLOR: #000000">&nbsp;WS_CLIPSIBLINGS&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;WS_CLIPCHILDREN;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;CView::PreCreateWindow(cs);<br>}</span></div>
<p><span style="FONT-FAMILY: Verdana">4,&nbsp;</span><span style="FONT-FAMILY: 宋体">在</span><span style="FONT-FAMILY: Verdana">CCY457OpenGLView.h</span><span style="FONT-FAMILY: 宋体">中加入如下语句：</span><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;HGLRC&nbsp;m_hRC;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Rendering&nbsp;Context</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CDC</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;m_pDC;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Device&nbsp;Context</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;InitializeOpenGL();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Initialize&nbsp;OpenGL</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;SetupPixelFormat();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Set&nbsp;up&nbsp;the&nbsp;Pixel&nbsp;Format</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;RenderScene();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Render&nbsp;the&nbsp;Scene</span><span style="COLOR: #008000"><br></span></div>
<p><span style="FONT-FAMILY: Verdana"><font face=宋体><span style="FONT-FAMILY: Verdana">5,</span></font>&nbsp;</span><span style="FONT-FAMILY: 宋体">在</span><strong><span style="FONT-FAMILY: Verdana">OnCreate</span></strong><span style="FONT-FAMILY: 宋体">中我们将通过建立像素格式和绘制上下文来初始化</span><span style="FONT-FAMILY: Verdana">OpenGL.</span> <span style="FONT-FAMILY: 宋体">在</span><span style="FONT-FAMILY: Verdana">InitializeOpenGL()</span><span style="FONT-FAMILY: 宋体">中会创建一个设备上下文</span><span style="FONT-FAMILY: Verdana">(DC)</span><span style="FONT-FAMILY: 宋体">，为这个</span><span style="FONT-FAMILY: Verdana">DC</span><span style="FONT-FAMILY: 宋体">选择一个像素格式，创建和这个</span><span style="FONT-FAMILY: Verdana">DC</span><span style="FONT-FAMILY: 宋体">相关的绘制上下文（</span><span style="FONT-FAMILY: Verdana">RC</span><span style="FONT-FAMILY: 宋体">）</span><span style="FONT-FAMILY: Verdana">,</span><span style="FONT-FAMILY: 宋体">然后选择这个</span><span style="FONT-FAMILY: Verdana">RC.</span><span style="FONT-FAMILY: 宋体">这个函数会调用</span><span style="FONT-FAMILY: Verdana">SetupPixelFormat()</span><span style="FONT-FAMILY: 宋体">来建立像素格式。</span><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnCreate(LPCREATESTRUCT&nbsp;lpCreateStruct)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(CView::OnCreate(lpCreateStruct)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Initialize&nbsp;OpenGL&nbsp;Here</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;InitializeOpenGL();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">;<br>}<br><br>BOOL&nbsp;CCY457OpenGLView::InitializeOpenGL()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Get&nbsp;a&nbsp;DC&nbsp;for&nbsp;the&nbsp;Client&nbsp;Area</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_pDC&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;CClientDC(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Failure&nbsp;to&nbsp;Get&nbsp;DC</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_pDC&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Error&nbsp;Obtaining&nbsp;DC</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Failure&nbsp;to&nbsp;set&nbsp;the&nbsp;pixel&nbsp;format</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">SetupPixelFormat())<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Create&nbsp;Rendering&nbsp;Context</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_hRC&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;::wglCreateContext&nbsp;(m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetSafeHdc&nbsp;());<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Failure&nbsp;to&nbsp;Create&nbsp;Rendering&nbsp;Context</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_hRC&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Error&nbsp;Creating&nbsp;RC</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Make&nbsp;the&nbsp;RC&nbsp;Current</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(::wglMakeCurrent&nbsp;(m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetSafeHdc&nbsp;(),&nbsp;m_hRC)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">FALSE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Error&nbsp;making&nbsp;RC&nbsp;Current</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Specify&nbsp;Black&nbsp;as&nbsp;the&nbsp;clear&nbsp;color</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glClearColor(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Specify&nbsp;the&nbsp;back&nbsp;of&nbsp;the&nbsp;buffer&nbsp;as&nbsp;clear&nbsp;depth</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glClearDepth(</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Enable&nbsp;Depth&nbsp;Testing</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glEnable(GL_DEPTH_TEST);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br>}<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Setup&nbsp;Pixel&nbsp;Format</span><span style="COLOR: #008000"><br></span><span style="COLOR: #808080">///////////////////////////////////////////////////////////////////////////</span><span style="COLOR: #008000">//</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">BOOL&nbsp;CCY457OpenGLView::SetupPixelFormat()<br>{<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;PIXELFORMATDESCRIPTOR&nbsp;pfd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(PIXELFORMATDESCRIPTOR),&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;size&nbsp;of&nbsp;this&nbsp;pfd</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;version&nbsp;number</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PFD_DRAW_TO_WINDOW&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;support&nbsp;window</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PFD_SUPPORT_OPENGL&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;support&nbsp;OpenGL</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PFD_DOUBLEBUFFER,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;double&nbsp;buffered</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PFD_TYPE_RGBA,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;RGBA&nbsp;type</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">24</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;24-bit&nbsp;color&nbsp;depth</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;color&nbsp;bits&nbsp;ignored</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;no&nbsp;alpha&nbsp;buffer</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;shift&nbsp;bit&nbsp;ignored</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;no&nbsp;accumulation&nbsp;buffer</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;accum&nbsp;bits&nbsp;ignored</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">16</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;16-bit&nbsp;z-buffer</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;no&nbsp;stencil&nbsp;buffer</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;no&nbsp;auxiliary&nbsp;buffer</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PFD_MAIN_PLANE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;main&nbsp;layer</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;reserved</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;layer&nbsp;masks&nbsp;ignored</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m_nPixelFormat&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;::ChoosePixelFormat(m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetSafeHdc(),&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">pfd);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;m_nPixelFormat&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;::SetPixelFormat(m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetSafeHdc(),&nbsp;m_nPixelFormat,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">pfd)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;FALSE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br>}<br></span></div>
<p><span style="FONT-FAMILY: Verdana">6,&nbsp;</span><span style="FONT-FAMILY: 宋体">在</span><span style="FONT-FAMILY: Verdana">OnSize()</span><span style="FONT-FAMILY: 宋体">中一般用来设置视口和</span><span style="FONT-FAMILY: 宋体">视锥，因为这些是和窗口大小相关的。基本操作包括设置视口，选择投影矩阵，设置模型视图矩阵。</span><span style="FONT-FAMILY: Verdana"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnSize(UINT&nbsp;nType,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cx,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cy)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;CView::OnSize(nType,&nbsp;cx,&nbsp;cy);<br>&nbsp;&nbsp;&nbsp;&nbsp;GLdouble&nbsp;aspect_ratio;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;width/height&nbsp;ratio</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;cx&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;cy&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;select&nbsp;the&nbsp;full&nbsp;client&nbsp;area</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glViewport(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,&nbsp;cx,&nbsp;cy);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;compute&nbsp;the&nbsp;aspect&nbsp;ratio<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;this&nbsp;will&nbsp;keep&nbsp;all&nbsp;dimension&nbsp;scales&nbsp;equal</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;aspect_ratio&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(GLdouble)cx</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(GLdouble)cy;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;select&nbsp;the&nbsp;projection&nbsp;matrix&nbsp;and&nbsp;clear&nbsp;it</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glMatrixMode(GL_PROJECTION);<br>&nbsp;&nbsp;&nbsp;&nbsp;::glLoadIdentity();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;select&nbsp;the&nbsp;viewing&nbsp;volume</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::gluPerspective(</span><span style="COLOR: #800080">45.0f</span><span style="COLOR: #000000">,&nbsp;aspect_ratio,&nbsp;.01f,&nbsp;</span><span style="COLOR: #800080">200.0f</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;switch&nbsp;back&nbsp;to&nbsp;the&nbsp;modelview&nbsp;matrix&nbsp;and&nbsp;clear&nbsp;it</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glMatrixMode(GL_MODELVIEW);<br>&nbsp;&nbsp;&nbsp;&nbsp;::glLoadIdentity();<br>}<br></span></div>
<p><font face=宋体><span style="FONT-FAMILY: 宋体"><font size=2 face=Arial>7,</font>在绘制场景时，一般包括如下步骤：</span><span style="FONT-FAMILY: Verdana">1</span><span style="FONT-FAMILY: 宋体">）清空缓存。</span><span style="FONT-FAMILY: Verdana">2</span><span style="FONT-FAMILY: 宋体">）绘制场景。</span><span style="FONT-FAMILY: Verdana">3</span><span style="FONT-FAMILY: 宋体">）</span><span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt">Flush</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">掉渲染流水线。</span><span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt">4</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10pt">）若设置了双缓冲，则交换前后台缓冲区。</span></font><font face=宋体><span style="FONT-FAMILY: Arial; FONT-SIZE: 10pt"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnDraw(CDC</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pDC)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;CCY457OpenGLDoc</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pDoc&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GetDocument();<br>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_VALID(pDoc);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Clear&nbsp;out&nbsp;the&nbsp;color&nbsp;&amp;&nbsp;depth&nbsp;buffers</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glClear(&nbsp;GL_COLOR_BUFFER_BIT&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;GL_DEPTH_BUFFER_BIT&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;RenderScene();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Tell&nbsp;OpenGL&nbsp;to&nbsp;flush&nbsp;its&nbsp;pipeline</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::glFinish();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Now&nbsp;Swap&nbsp;the&nbsp;buffers</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::SwapBuffers(&nbsp;m_pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetSafeHdc()&nbsp;);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::RenderScene&nbsp;()<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">第一个玩具嘛，先空着，后面慢慢填<img alt="" src="http://www.cnblogs.com/Images/dot.gif"></span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">}<br></span></div>
<p><span style="FONT-FAMILY: Verdana">8</span><span style="FONT-FAMILY: 宋体">，试试改变窗口的大小，你会看到很严重的闪烁，并且关闭程序后会报告内存泄露，因此我们这就来解决这两个问题吧。</span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">发生闪烁的原因是</span><span style="FONT-FAMILY: Verdana">Windows</span><span style="FONT-FAMILY: 宋体">先绘制背景，然后再是</span><span style="FONT-FAMILY: Verdana">OpenGL</span><span style="FONT-FAMILY: 宋体">绘制，因为我们已经让</span><span style="FONT-FAMILY: Verdana">OpenGL</span><span style="FONT-FAMILY: 宋体">负责清空背景色，因此我们不需要</span><span style="FONT-FAMILY: Verdana">Windows</span><span style="FONT-FAMILY: 宋体">去清空背景了</span><span style="FONT-FAMILY: 宋体"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #000000">BOOL&nbsp;CCY457OpenGLView::OnEraseBkgnd(CDC</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pDC)&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Tell&nbsp;Windows&nbsp;not&nbsp;to&nbsp;erase&nbsp;the&nbsp;background</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br>}<br></span></div>
<p><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;内存泄露的原因是我们在</span><strong><span style="FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.5pt" lang=EN-US>SetupPixelFormat</span></strong><strong><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Arial">（）中</span></strong><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">使用了</span><span style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" lang=EN-US>new</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana">运算符来为</span><strong><span style="FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.5pt" lang=EN-US>CClientDC</span></strong><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Arial; mso-bidi-font-weight: bold">对象分配内存，因此需要显示</span><span style="FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.5pt; mso-bidi-font-weight: bold" lang=EN-US>delete</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Arial; mso-bidi-font-weight: bold">掉。</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Arial; mso-bidi-font-weight: bold"></p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CCY457OpenGLView::OnDestroy()&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;CView::OnDestroy();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Make&nbsp;the&nbsp;RC&nbsp;non-current</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(::wglMakeCurrent&nbsp;(</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;FALSE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Could&nbsp;not&nbsp;make&nbsp;RC&nbsp;non-current</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Delete&nbsp;the&nbsp;rendering&nbsp;context</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(::wglDeleteContext&nbsp;(m_hRC)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">FALSE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Could&nbsp;not&nbsp;delete&nbsp;RC</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Delete&nbsp;the&nbsp;DC</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_pDC)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;m_pDC;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Set&nbsp;it&nbsp;to&nbsp;NULL</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_pDC&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br>}<br></span></div>
<p></span><span style="FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.5pt; mso-bidi-font-weight: bold" lang=EN-US><o:p></o:p></span>&nbsp;</p>
</span></span></font></span></span></span></span></span></span></span>
<div id=MySignature>
<p>作者：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>洞庭散人</font></u></a></p>
<p>出处：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>http://phinecos.cnblogs.com/</font></u></a>　　　　</p>
<div>本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 </div>
</div>
原文链接：<a href="http://www.cnblogs.com/phinecos/archive/2008/11/04/1326687.html">http://www.cnblogs.com/phinecos/archive/2008/11/04/1326687.html</a><br>
<img src ="http://www.cppblog.com/Sandywin/aggbug/111199.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:22 <a href="http://www.cppblog.com/Sandywin/articles/111199.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《基于MFC的OpenGL编程》Part 1 A Primer </title><link>http://www.cppblog.com/Sandywin/articles/111198.html</link><dc:creator>Shuffy</dc:creator><author>Shuffy</author><pubDate>Wed, 31 Mar 2010 12:18:00 GMT</pubDate><guid>http://www.cppblog.com/Sandywin/articles/111198.html</guid><wfw:comment>http://www.cppblog.com/Sandywin/comments/111198.html</wfw:comment><comments>http://www.cppblog.com/Sandywin/articles/111198.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Sandywin/comments/commentRss/111198.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Sandywin/services/trackbacks/111198.html</trackback:ping><description><![CDATA[<p><strong><span style="FONT-FAMILY: Verdana">3D</span></strong><strong><span style="FONT-FAMILY: 宋体">图形学基本概念</span></strong><strong></strong></p>
<p><strong><span style="FONT-FAMILY: Verdana">Perspective</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">Perspective refers to the angles between the lines that lend the illusion of three dimensions. </span></p>
<p><strong><span style="FONT-FAMILY: Verdana">Colors and Shading</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">Moving beyond line drawing, we need to add color to create a solid object. Shading refers to the way the color is applied to the polygon. Shading can be of two types in OpenGL - Flat or Smooth.</span></p>
<p><strong><span style="FONT-FAMILY: Verdana">Lights and Shadows</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">Plain solid color doesn&#8217;t offer enough realism. By applying Lighting effects we can make objects appear as they would in reality depending on their material properties and the lighting parameters. Adding a shadow further increases realism.</span></p>
<p><strong><span style="FONT-FAMILY: Verdana">Texture Mapping</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">With Texture Mapping we can have wood grains, cloth textures, brick like textures etc instead of plain materials. This technique of applying an image to the surface of a polygon is called Texture Mapping. The image we use is called the Texture and the individual elements of the texture are called Texels.</span></p>
<p><strong><span style="FONT-FAMILY: Verdana">Fog</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">Fog is an atmospheric effect that adds haziness to objects in a scene depending on how far the objects are from the viewer. </span></p>
<p><strong><span style="FONT-FAMILY: Verdana">Blending and Transparency</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">Blending is the combination of colors of objects on the screen. This effect can be used for a variety of purposes. By varying the amount each object is blended with the scene we can make objects look transparent.</span></p>
<p><strong><span style="FONT-FAMILY: Verdana">Anti-Aliasing</span></strong></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: Verdana">Aliasing is an effect that is visible on screen due to the fact that an image consists of discrete pixels. By carefully blending the lines with the background color we can eliminate jagged edges and give them a smooth appearance. This blending technique is called anti-aliasing. </span></p>
<p><strong>第一个OpenGL程序</strong></p>
<div class=cnblogs_code><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Simple.cpp&nbsp;-&nbsp;First&nbsp;OpenGL&nbsp;Program</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">windows.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Required&nbsp;for&nbsp;every&nbsp;Windows&nbsp;Program</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">gl\glut.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Required&nbsp;for&nbsp;using&nbsp;the&nbsp;GLUT&nbsp;library&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Perform&nbsp;OpenGL&nbsp;Initialization&nbsp;here&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;SetupRC()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Set&nbsp;the&nbsp;background&nbsp;clearing&nbsp;color&nbsp;to&nbsp;blue</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glClearColor(</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">1.0f</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置背景色为蓝色</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">}<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">The&nbsp;drawing&nbsp;callback&nbsp;function</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;RenderScene()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Clear&nbsp;the&nbsp;color&nbsp;buffer&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glClear(GL_COLOR_BUFFER_BIT);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Flush&nbsp;the&nbsp;rendering&nbsp;pipeline</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glFlush();<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Choose&nbsp;the&nbsp;display&nbsp;mode&nbsp;settings</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutInitDisplayMode(GLUT_SINGLE&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;GLUT_RGB);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化显示模式(单缓冲,RGB)<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Create&nbsp;the&nbsp;Window</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutCreateWindow(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Simple</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建窗口<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Set&nbsp;the&nbsp;RenderScsne&nbsp;function&nbsp;as&nbsp;the&nbsp;display&nbsp;callback</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutDisplayFunc(RenderScene);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绘制回调函数，当窗口需要绘制时，GLUT会调用此函数<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Initialize&nbsp;OpenGL</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;SetupRC();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化OpenGL<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Start&nbsp;the&nbsp;GLUT&nbsp;framework</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutMainLoop();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">开始消息循环</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">}<br></span></div>
<p>&nbsp;</p>
<div id=MySignature>
<p>作者：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>洞庭散人</font></u></a></p>
<p>出处：<a href="http://phinecos.cnblogs.com/" target=_blank><u><font color=#0066cc>http://phinecos.cnblogs.com/</font></u></a>　　　　</p>
<div>本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 <br></div>
</div>
原文链接：<a href="http://www.cnblogs.com/phinecos/archive/2008/11/04/1326648.html">http://www.cnblogs.com/phinecos/archive/2008/11/04/1326648.html</a>
<img src ="http://www.cppblog.com/Sandywin/aggbug/111198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Sandywin/" target="_blank">Shuffy</a> 2010-03-31 20:18 <a href="http://www.cppblog.com/Sandywin/articles/111198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>