﻿<?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++博客-夏冰-随笔分类-OpenGL</title><link>http://www.cppblog.com/summericeyl/category/9746.html</link><description>生如夏花之绚烂，死若秋叶之静美</description><language>zh-cn</language><lastBuildDate>Wed, 22 Jan 2014 11:18:58 GMT</lastBuildDate><pubDate>Wed, 22 Jan 2014 11:18:58 GMT</pubDate><ttl>60</ttl><item><title>实现Arcball效果(OpenGL)</title><link>http://www.cppblog.com/summericeyl/archive/2014/01/22/205520.html</link><dc:creator>夏冰</dc:creator><author>夏冰</author><pubDate>Wed, 22 Jan 2014 00:12:00 GMT</pubDate><guid>http://www.cppblog.com/summericeyl/archive/2014/01/22/205520.html</guid><wfw:comment>http://www.cppblog.com/summericeyl/comments/205520.html</wfw:comment><comments>http://www.cppblog.com/summericeyl/archive/2014/01/22/205520.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/summericeyl/comments/commentRss/205520.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/summericeyl/services/trackbacks/205520.html</trackback:ping><description><![CDATA[<div><ul><li> 主要讲解如何在OpenGL中实现Arcball效果.  </li><li> Arcball效果: 当按下鼠标左键并移动时, 场景窗口中鼠标下方的物体会围绕其中心旋转. 好比人用手指按住地球仪让其旋转的效果.  </li><li> 本例主要运用矩阵变换来实现. 首先根据鼠标的移动得到旋转轴以及旋转角度. 而后转换成四元数格式, 再转换成变换矩阵.  </li><li> 首先得到投影矩阵和视图变换矩阵<br /></li></ul></div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #008080; ">1</span>&nbsp;<span style="color: #000000; ">GLdouble&nbsp;projection_matrix[</span><span style="color: #000000; ">16</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">};<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">GLdouble&nbsp;modelview_matrix[</span><span style="color: #000000; ">16</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">};<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;viewport_matrix[</span><span style="color: #000000; ">4</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">640</span><span style="color: #000000; ">,</span><span style="color: #000000; ">480</span><span style="color: #000000; ">};<br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">glGetDoublev(GL_PROJECTION_MATRIX,projection_matrix);<br /></span><span style="color: #008080; ">6</span>&nbsp;<span style="color: #000000; ">glGetIntegerv(GL_VIEWPORT,viewport_matrix);<br /></span></div></div><div><ul><li> 得到鼠标位置在模型空间中的位置 </li></ul></div><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #000000; ">GLdouble&nbsp;x,y,z;<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">gluUnProject(mouse_x,&nbsp;mouse_y,&nbsp;</span><span style="color: #000000; ">0.0</span><span style="color: #000000; ">,<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modelview_matrix,<br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;projection_matrix,<br /></span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;viewport_matrix,<br /></span><span style="color: #008080; ">6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">x,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">y,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">z);</span></div><div><ul><li> 而后从眼睛位置以及上面得到的鼠标位置得到一条射线, 而后根据射线方程得到球面上一点的位置.  </li><li> 而后根据鼠标的移动得到另外一个球面点的位置. 从而得到球心到达两个球面上点的向量, 叉乘得到旋转轴, 点乘得到旋转角度.  </li><li> 根据旋转轴和旋转角度得到四元数. 而后四元数变换得到旋转矩阵. <br />  </li></ul>  <p> 参考资料: <a href="http://rainwarrior.ca/dragon/arcball.html">http://rainwarrior.ca/dragon/arcball.html</a> </p></div><br /><br /><br /><img src ="http://www.cppblog.com/summericeyl/aggbug/205520.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/summericeyl/" target="_blank">夏冰</a> 2014-01-22 08:12 <a href="http://www.cppblog.com/summericeyl/archive/2014/01/22/205520.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NeHe OpenGL 代码简略描述</title><link>http://www.cppblog.com/summericeyl/archive/2011/10/12/158098.html</link><dc:creator>夏冰</dc:creator><author>夏冰</author><pubDate>Tue, 11 Oct 2011 23:03:00 GMT</pubDate><guid>http://www.cppblog.com/summericeyl/archive/2011/10/12/158098.html</guid><wfw:comment>http://www.cppblog.com/summericeyl/comments/158098.html</wfw:comment><comments>http://www.cppblog.com/summericeyl/archive/2011/10/12/158098.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/summericeyl/comments/commentRss/158098.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/summericeyl/services/trackbacks/158098.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: NeHe OpenGL 代码简略描述&nbsp;&nbsp;<a href='http://www.cppblog.com/summericeyl/archive/2011/10/12/158098.html'>阅读全文</a><img src ="http://www.cppblog.com/summericeyl/aggbug/158098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/summericeyl/" target="_blank">夏冰</a> 2011-10-12 07:03 <a href="http://www.cppblog.com/summericeyl/archive/2011/10/12/158098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL中平截头体六个裁剪平面方程的求解</title><link>http://www.cppblog.com/summericeyl/archive/2011/09/30/157215.html</link><dc:creator>夏冰</dc:creator><author>夏冰</author><pubDate>Fri, 30 Sep 2011 03:26:00 GMT</pubDate><guid>http://www.cppblog.com/summericeyl/archive/2011/09/30/157215.html</guid><wfw:comment>http://www.cppblog.com/summericeyl/comments/157215.html</wfw:comment><comments>http://www.cppblog.com/summericeyl/archive/2011/09/30/157215.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/summericeyl/comments/commentRss/157215.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/summericeyl/services/trackbacks/157215.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 空间中的坐标乘以视图模型矩阵得到视觉坐标, 再乘以投影矩阵得到裁剪坐标. 现在我求出裁剪矩阵M, 其等于投影矩阵左乘模型视图矩阵     Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->&nbsp;1&nbsp;&n...&nbsp;&nbsp;<a href='http://www.cppblog.com/summericeyl/archive/2011/09/30/157215.html'>阅读全文</a><img src ="http://www.cppblog.com/summericeyl/aggbug/157215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/summericeyl/" target="_blank">夏冰</a> 2011-09-30 11:26 <a href="http://www.cppblog.com/summericeyl/archive/2011/09/30/157215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在OpenGL中使用CEGUI</title><link>http://www.cppblog.com/summericeyl/archive/2011/08/19/153896.html</link><dc:creator>夏冰</dc:creator><author>夏冰</author><pubDate>Fri, 19 Aug 2011 15:38:00 GMT</pubDate><guid>http://www.cppblog.com/summericeyl/archive/2011/08/19/153896.html</guid><wfw:comment>http://www.cppblog.com/summericeyl/comments/153896.html</wfw:comment><comments>http://www.cppblog.com/summericeyl/archive/2011/08/19/153896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/summericeyl/comments/commentRss/153896.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/summericeyl/services/trackbacks/153896.html</trackback:ping><description><![CDATA[<ul><li><div>添加系统环境变量 CEGUI_DIR 为CEGUI SDK所在的目录</div></li><li><div>需要 freeglut 库</div></li><li><div>环境变量"path"添加cegui以及其dependencies的bin路径</div></li><li><div>设置程序工作目录路径为 $(CEGUI_DIR)\bin, 这样方便读取资源文件</div></li><li><div>添加库的附加依赖项: CEGUIOpenGLRenderer_d.lib CEGUIBase_d.lib(Debug) 或者 CEGUIOpenGLRenderer.lib CEGUIBase.lib (Release)</div></li></ul><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;&nbsp;1</span>&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!&nbsp;\file&nbsp;main.cpp<br /></span><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #008000; ">*&nbsp;\brief&nbsp;CEGUI&nbsp;与&nbsp;OpenGL&nbsp;的整合<br /></span><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;添加环境变量&nbsp;CEGUI_DIR&nbsp;为其目录<br /></span><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;需要&nbsp;freeglut&nbsp;库<br /></span><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;环境变量&nbsp;path&nbsp;添加&nbsp;cegui和其dependencies的bin路径<br /></span><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;设置工作目录路径为&nbsp;$(CEGUI_DIR)\bin</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;10</span>&nbsp;<span style="color: #000000; ">#pragma&nbsp;warning(disable:</span><span style="color: #000000; ">4251</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">&nbsp;11</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;12</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">math.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;13</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">gl</span><span style="color: #000000; ">/</span><span style="color: #000000; ">glew.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">gl</span><span style="color: #000000; ">/</span><span style="color: #000000; ">glut.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;15</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">CEGUI.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">CEGUIResourceProvider.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">XMLParserModules</span><span style="color: #000000; ">/</span><span style="color: #000000; ">XercesParser</span><span style="color: #000000; ">/</span><span style="color: #000000; ">CEGUIXercesParser.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">RendererModules</span><span style="color: #000000; ">/</span><span style="color: #000000; ">OpenGL</span><span style="color: #000000; ">/</span><span style="color: #000000; ">CEGUIOpenGLRenderer.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #000000; ">GLint&nbsp;windowWidth&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">800</span><span style="color: #000000; ">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;&nbsp;窗口宽度<br /></span><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #808080; "></span><span style="color: #008000; ">GLint&nbsp;windowHeight&nbsp;=&nbsp;600;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;&nbsp;窗口高度<br /></span><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #808080; "></span><span style="color: #808080; "><br /></span><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #808080; "></span><span style="color: #008000; ">/*</span><span style="color: #008000; ">!&nbsp;用于初始化OpenGL的回调函数.<br /></span><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #008000; ">*<br /></span><span style="color: #008080; ">&nbsp;26</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;SetupRC&nbsp;(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glClearColor&nbsp;(</span><span style="color: #000000; ">0.0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0.0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0.0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">&nbsp;30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_DEPTH_TEST);<br /></span><span style="color: #008080; ">&nbsp;31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glEnable(GL_CULL_FACE);<br /></span><span style="color: #008080; ">&nbsp;32</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glFrontFace(GL_CCW);<br /></span><span style="color: #008080; ">&nbsp;33</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;35</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">/*</span><span style="color: #008000; ">!&nbsp;用于渲染场景的回调函数.<br /></span><span style="color: #008080; ">&nbsp;36</span>&nbsp;<span style="color: #008000; ">*<br /></span><span style="color: #008080; ">&nbsp;37</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;38</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;RenderScene(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">&nbsp;39</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;40</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glClear(GL_COLOR_BUFFER_BIT&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;GL_DEPTH_BUFFER_BIT);<br /></span><span style="color: #008080; ">&nbsp;41</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glPushMatrix();<br /></span><span style="color: #008080; ">&nbsp;43</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;44</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glPopMatrix();<br /></span><span style="color: #008080; ">&nbsp;45</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;46</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;47</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CEGUI::System::getSingleton().renderGUI();<br /></span><span style="color: #008080; ">&nbsp;48</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;49</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glutSwapBuffers();<br /></span><span style="color: #008080; ">&nbsp;50</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;51</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;52</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">/*</span><span style="color: #008000; ">!&nbsp;窗口大小变化的回调函数,&nbsp;设置fbo的宽度和高度.<br /></span><span style="color: #008080; ">&nbsp;53</span>&nbsp;<span style="color: #008000; ">*<br /></span><span style="color: #008080; ">&nbsp;54</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;55</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;ChangeSize(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;w,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;h)<br /></span><span style="color: #008080; ">&nbsp;56</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;57</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;GLfloat&nbsp;fAspect;<br /></span><span style="color: #008080; ">&nbsp;58</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;59</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(h&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">&nbsp;60</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;61</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;62</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;fAspect&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(GLfloat)w</span><span style="color: #000000; ">/</span><span style="color: #000000; ">(GLfloat)h;<br /></span><span style="color: #008080; ">&nbsp;63</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;64</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glViewport(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;(GLsizei)w,&nbsp;(GLsizei)h);<br /></span><span style="color: #008080; ">&nbsp;65</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glMatrixMode(GL_PROJECTION);<br /></span><span style="color: #008080; ">&nbsp;66</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glLoadIdentity();<br /></span><span style="color: #008080; ">&nbsp;67</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;gluPerspective(</span><span style="color: #000000; ">35.0f</span><span style="color: #000000; ">,&nbsp;fAspect,&nbsp;</span><span style="color: #000000; ">1.0f</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">50.0f</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">&nbsp;68</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glMatrixMode(GL_MODELVIEW);<br /></span><span style="color: #008080; ">&nbsp;69</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glLoadIdentity();<br /></span><span style="color: #008080; ">&nbsp;70</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;71</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;72</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;73</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">/*</span><span style="color: #008000; ">!&nbsp;用于特殊按键的回调函数.<br /></span><span style="color: #008080; ">&nbsp;74</span>&nbsp;<span style="color: #008000; ">*&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;75</span>&nbsp;<span style="color: #008000; ">*&nbsp;&nbsp;\param<br /></span><span style="color: #008080; ">&nbsp;76</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;77</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;SpecialKeys(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;key,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y)<br /></span><span style="color: #008080; ">&nbsp;78</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;79</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glutPostRedisplay();<br /></span><span style="color: #008080; ">&nbsp;80</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;81</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;82</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">/*</span><span style="color: #008000; ">!&nbsp;用于键盘按键的回调函数.<br /></span><span style="color: #008080; ">&nbsp;83</span>&nbsp;<span style="color: #008000; ">*&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;84</span>&nbsp;<span style="color: #008000; ">*&nbsp;&nbsp;\param&nbsp;key&nbsp;哪个键<br /></span><span style="color: #008080; ">&nbsp;85</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;86</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;keyPressFunc(unsigned&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;key,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y)<br /></span><span style="color: #008080; ">&nbsp;87</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;88</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">switch</span><span style="color: #000000; ">(key)<br /></span><span style="color: #008080; ">&nbsp;89</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;90</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">27</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">&nbsp;91</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">&nbsp;92</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">default</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">&nbsp;93</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;94</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">&nbsp;95</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glutPostRedisplay();<br /></span><span style="color: #008080; ">&nbsp;96</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;97</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;98</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;SetupCEGUIResourceGroup()<br /></span><span style="color: #008080; ">&nbsp;99</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">100</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CEGUI::DefaultResourceProvider</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;rp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;static_cast</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">CEGUI::DefaultResourceProvider</span><span style="color: #000000; ">*&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">101</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(CEGUI::System::getSingleton().getResourceProvider());<br /></span><span style="color: #008080; ">102</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">103</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;rp</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setResourceGroupDirectory(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">schemes</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">../datafiles/schemes/</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">104</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;rp</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setResourceGroupDirectory(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">imagesets</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">../datafiles/imagesets/</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">105</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;rp</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setResourceGroupDirectory(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">fonts</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">../datafiles/fonts/</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">106</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;rp</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setResourceGroupDirectory(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">layouts</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">../datafiles/layouts/</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">107</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;rp</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setResourceGroupDirectory(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">looknfeels</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">../datafiles/looknfeel/</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">108</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;rp</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setResourceGroupDirectory(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">lua_scripts</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">../datafiles/lua_scripts/</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">109</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">110</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;This&nbsp;is&nbsp;only&nbsp;really&nbsp;needed&nbsp;if&nbsp;you&nbsp;are&nbsp;using&nbsp;Xerces&nbsp;and&nbsp;need&nbsp;to<br /></span><span style="color: #008080; ">111</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;specify&nbsp;the&nbsp;schemas&nbsp;location</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">112</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;rp</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setResourceGroupDirectory(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">schemas</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">../datafiles/xml_schemas/</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">113</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">114</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;set&nbsp;the&nbsp;default&nbsp;resource&nbsp;groups&nbsp;to&nbsp;be&nbsp;used</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">115</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CEGUI::Imageset::setDefaultResourceGroup(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">imagesets</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">116</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CEGUI::Font::setDefaultResourceGroup(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">fonts</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">117</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CEGUI::Scheme::setDefaultResourceGroup(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">schemes</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">118</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CEGUI::WidgetLookManager::setDefaultResourceGroup(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">looknfeels</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">119</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CEGUI::WindowManager::setDefaultResourceGroup(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">layouts</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">120</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CEGUI::ScriptModule::setDefaultResourceGroup(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">lua_scripts</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">121</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">122</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;setup&nbsp;default&nbsp;group&nbsp;for&nbsp;validation&nbsp;schemas</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">123</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CEGUI::XMLParser</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;parser&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;CEGUI::System::getSingleton().getXMLParser();<br /></span><span style="color: #008080; ">124</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(parser</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">isPropertyPresent(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">SchemaDefaultResourceGroup</span><span style="color: #000000; ">"</span><span style="color: #000000; ">))<br /></span><span style="color: #008080; ">125</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parser</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setProperty(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">SchemaDefaultResourceGroup</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">schemas</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">126</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">127</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">128</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;LoadDataFiles()<br /></span><span style="color: #008080; ">129</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">130</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;create&nbsp;(load)&nbsp;the&nbsp;TaharezLook&nbsp;scheme&nbsp;file<br /></span><span style="color: #008080; ">131</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;(this&nbsp;auto-loads&nbsp;the&nbsp;TaharezLook&nbsp;looknfeel&nbsp;and&nbsp;imageset&nbsp;files)</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">132</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CEGUI::SchemeManager::getSingleton().create(&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">TaharezLook.scheme</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;);<br /></span><span style="color: #008080; ">133</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">134</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;create&nbsp;(load)&nbsp;a&nbsp;font.<br /></span><span style="color: #008080; ">135</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;The&nbsp;first&nbsp;font&nbsp;loaded&nbsp;automatically&nbsp;becomes&nbsp;the&nbsp;default&nbsp;font,&nbsp;but&nbsp;note<br /></span><span style="color: #008080; ">136</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;that&nbsp;the&nbsp;scheme&nbsp;might&nbsp;have&nbsp;already&nbsp;loaded&nbsp;a&nbsp;font,&nbsp;so&nbsp;there&nbsp;may&nbsp;already<br /></span><span style="color: #008080; ">137</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;be&nbsp;a&nbsp;default&nbsp;set&nbsp;-&nbsp;if&nbsp;we&nbsp;want&nbsp;the&nbsp;"Commonweath-10"&nbsp;font&nbsp;to&nbsp;definitely<br /></span><span style="color: #008080; ">138</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;be&nbsp;the&nbsp;default,&nbsp;we&nbsp;should&nbsp;set&nbsp;the&nbsp;default&nbsp;explicitly&nbsp;afterwards.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">139</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CEGUI::FontManager::getSingleton().create(&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">DejaVuSans-10.font</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;);<br /></span><span style="color: #008080; ">140</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">141</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CEGUI::System::getSingleton().setDefaultFont(&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">DejaVuSans-10</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;);<br /></span><span style="color: #008080; ">142</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CEGUI::System::getSingleton().setDefaultMouseCursor(&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">TaharezLook</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">MouseArrow</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;);<br /></span><span style="color: #008080; ">143</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CEGUI::System::getSingleton().setDefaultTooltip(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">TaharezLook/Tooltip</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">144</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">145</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">146</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;CreateCEGUIWindow()<br /></span><span style="color: #008080; ">147</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">148</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;CEGUI;<br /></span><span style="color: #008080; ">149</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;WindowManager</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;wmgr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;WindowManager::getSingleton();<br /></span><span style="color: #008080; ">150</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Window</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;myRoot&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;wmgr.createWindow(&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">DefaultWindow</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">root</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;);<br /></span><span style="color: #008080; ">151</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;System::getSingleton().setGUISheet(&nbsp;myRoot&nbsp;);<br /></span><span style="color: #008080; ">152</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;FrameWindow</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;fWnd&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;static_cast</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">FrameWindow</span><span style="color: #000000; ">*&gt;</span><span style="color: #000000; ">(<br /></span><span style="color: #008080; ">153</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wmgr.createWindow(&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">TaharezLook/FrameWindow</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">testWindow</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;));<br /></span><span style="color: #008080; ">154</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;myRoot</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">addChildWindow(&nbsp;fWnd&nbsp;);<br /></span><span style="color: #008080; ">155</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;position&nbsp;a&nbsp;quarter&nbsp;of&nbsp;the&nbsp;way&nbsp;in&nbsp;from&nbsp;the&nbsp;top-left&nbsp;of&nbsp;parent.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">156</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;fWnd</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setPosition(&nbsp;UVector2(&nbsp;UDim(&nbsp;</span><span style="color: #000000; ">0.25f</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;),&nbsp;UDim(&nbsp;</span><span style="color: #000000; ">0.25f</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;)&nbsp;)&nbsp;);<br /></span><span style="color: #008080; ">157</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">158</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;set&nbsp;size&nbsp;to&nbsp;be&nbsp;half&nbsp;the&nbsp;size&nbsp;of&nbsp;the&nbsp;parent</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">159</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;fWnd</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setSize(&nbsp;UVector2(&nbsp;UDim(&nbsp;</span><span style="color: #000000; ">0.5f</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;),&nbsp;UDim(&nbsp;</span><span style="color: #000000; ">0.5f</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;)&nbsp;)&nbsp;);<br /></span><span style="color: #008080; ">160</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;fWnd</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setText(&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Hello&nbsp;World!</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;);<br /></span><span style="color: #008080; ">161</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">/*</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">162</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;namespace&nbsp;CEGUI;<br /></span><span style="color: #008080; ">163</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;Window*&nbsp;myRoot&nbsp;=&nbsp;WindowManager::getSingleton().loadWindowLayout(&nbsp;"test.layout"&nbsp;);<br /></span><span style="color: #008080; ">164</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;System::getSingleton().setGUISheet(&nbsp;myRoot&nbsp;);<br /></span><span style="color: #008080; ">165</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">166</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">167</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">168</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">/*</span><span style="color: #008000; ">!&nbsp;函数入口<br /></span><span style="color: #008080; ">169</span>&nbsp;<span style="color: #008000; ">*&nbsp;&nbsp;<br /></span><span style="color: #008080; ">170</span>&nbsp;<span style="color: #008000; ">*&nbsp;&nbsp;设置各种回调函数<br /></span><span style="color: #008080; ">171</span>&nbsp;<span style="color: #008000; ">*&nbsp;&nbsp;\param&nbsp;argc&nbsp;命令参数数量<br /></span><span style="color: #008080; ">172</span>&nbsp;<span style="color: #008000; ">*&nbsp;&nbsp;\param&nbsp;argv&nbsp;命令参数数组<br /></span><span style="color: #008080; ">173</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">174</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;argc,&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">**</span><span style="color: #000000; ">&nbsp;argv)<br /></span><span style="color: #008080; ">175</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">176</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glutInit(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">argc,&nbsp;argv);<br /></span><span style="color: #008080; ">177</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glutInitDisplayMode&nbsp;(GLUT_DOUBLE&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;GLUT_RGBA&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;GLUT_DEPTH);<br /></span><span style="color: #008080; ">178</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glutInitWindowSize&nbsp;(windowWidth,&nbsp;windowHeight);<br /></span><span style="color: #008080; ">179</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glutCreateWindow(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">CEGUI&nbsp;OpenGL</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">180</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glutReshapeFunc(ChangeSize);<br /></span><span style="color: #008080; ">181</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glutKeyboardFunc(keyPressFunc);<br /></span><span style="color: #008080; ">182</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glutSpecialFunc(SpecialKeys);<br /></span><span style="color: #008080; ">183</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glutDisplayFunc(RenderScene);<br /></span><span style="color: #008080; ">184</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">185</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glewInit();<br /></span><span style="color: #008080; ">186</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">187</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">/*</span><span style="color: #008000; ">**********************************************************************</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">188</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">/*</span><span style="color: #008000; ">CEGUI</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">189</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CEGUI::OpenGLRenderer</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;openGLRenderer&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;CEGUI::OpenGLRenderer::create();<br /></span><span style="color: #008080; ">190</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CEGUI::System::create(openGLRenderer);<br /></span><span style="color: #008080; ">191</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;SetupCEGUIResourceGroup();<br /></span><span style="color: #008080; ">192</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;LoadDataFiles();<br /></span><span style="color: #008080; ">193</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CreateCEGUIWindow();<br /></span><span style="color: #008080; ">194</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">/*</span><span style="color: #008000; ">**********************************************************************</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">195</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">196</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">197</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;SetupRC();<br /></span><span style="color: #008080; ">198</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">199</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;glutMainLoop();<br /></span><span style="color: #008080; ">200</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">201</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">202</span>&nbsp;<span style="color: #000000; "></span></div><img src ="http://www.cppblog.com/summericeyl/aggbug/153896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/summericeyl/" target="_blank">夏冰</a> 2011-08-19 23:38 <a href="http://www.cppblog.com/summericeyl/archive/2011/08/19/153896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL 平面阴影投射矩阵的推导</title><link>http://www.cppblog.com/summericeyl/archive/2011/03/14/141802.html</link><dc:creator>夏冰</dc:creator><author>夏冰</author><pubDate>Mon, 14 Mar 2011 09:15:00 GMT</pubDate><guid>http://www.cppblog.com/summericeyl/archive/2011/03/14/141802.html</guid><wfw:comment>http://www.cppblog.com/summericeyl/comments/141802.html</wfw:comment><comments>http://www.cppblog.com/summericeyl/archive/2011/03/14/141802.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/summericeyl/comments/commentRss/141802.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/summericeyl/services/trackbacks/141802.html</trackback:ping><description><![CDATA[<p>OpenGL SuperBible 这本书介绍了一种阴影的实现方法, 将模型视图矩阵压平, 所有被绘制的物体都将位于这个平面的二维世界中. 不过这本书没有介绍该平面阴影投射矩阵是如何推导的.<br>假设平面方程 Ax + By + Cz + D = 0 已知, 光的方向L(Lx, Ly, Lz, 0)已知. 则模型视图空间的点 P(Px, Py, Pz, 1), 沿着光的方向投射到平面上的点为 S(Sx, Sy, Sz, 1). 其中我们设置向量 N(A, B, C, D). 现在我们需要求的是矩阵M, 使得 MP = S. 即 M左乘点P得到点S.<br>由于点S是P沿着光的方向L到达的, 所以可假设 S = P + kL. (k &gt;= 0)<br>因为点S是平面上的一点, 所以 A*Sx + B*Sy + C*Sz + D = 0. 即 S*N = 0. 由于 S = P + kL, 所以 (P + kL) * N = 0, 推导可得出 k = -(P*N)/L*N<br>即 K = -(A*Px + B*Py + C*Pz + D)/(A*Lx + B*Ly + C*Lz), 代入 S = P + kL<br>Sx = Px + k*Lx = Px - (A*Px + B*Py + C*Pz + D)*lX/(A*Lx + B*Ly + C*Lz) <br>= [Px*(B*Ly + C*Lz) - Py*(B*Lx) - Px*(C*Lx) - 1*D*Lx]/(A*Lx + B*Ly + C*Lz) <br>= P*((B*Ly + C*Lz), -B*Lx, -C*Lx, -D*Lx)/(A*Lx + B*Ly + C*Lz) <br>同理 <br>Sy = P*(-A*Ly, (A*Lx + C*Lz), -C*Ly, -D*Ly)/(A*Lx + B*Ly + C*Lz) <br>Sz = P*(-A*Lz, -B*Lz, (A*LX + B*Ly), -D*Lx)/(A*Lx + B*Ly + C*Lz) <br>Sw = P*(0, 0, 0, (A*Lx + B*Ly + C*Lz))/(A*Lx + B*Ly + C*Lz) <br>所以可得到矩阵M <br></p>
<p>
<table>
    <tbody>
        <tr>
            <th>&nbsp;</th>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <th>&nbsp;</th>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <th>&nbsp;</th>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <th>&nbsp;</th>
        </tr>
        <tr>
            <td>B*Ly + C*Lz</td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td>-B*Lx</td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td>-C*Lx</td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td>-D*Lx</td>
        </tr>
        <tr>
            <td>-A*Ly</td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td>A*Lx + C*Lz</td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td>-C*Ly</td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td>-D*Ly</td>
        </tr>
        <tr>
            <td>-A*Lz</td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td>-B*Lz</td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td>A*LX + B*Ly</td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td>-D*Lx</td>
        </tr>
        <tr>
            <td>0</td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td>0</td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td>0</td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
            <td>A*Lx + B*Ly + C*Lz</td>
        </tr>
    </tbody>
</table>
在SuperBible这本书的源代码里有该矩阵的实现代码, 位于文件 math3d.cpp 中, 可参考上面公式的实现</p>
<p>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;m3dMakePlanarShadowMatrix(M3DMatrix44f&nbsp;proj,&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;M3DVector4f&nbsp;planeEq,&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;M3DVector3f&nbsp;vLightPos)<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;These&nbsp;just&nbsp;make&nbsp;the&nbsp;code&nbsp;below&nbsp;easier&nbsp;to&nbsp;read.&nbsp;They&nbsp;will&nbsp;be&nbsp;<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;removed&nbsp;by&nbsp;the&nbsp;optimizer.&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">float</span><span style="color: #000000;">&nbsp;a&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;planeEq[</span><span style="color: #000000;">0</span><span style="color: #000000;">];<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">float</span><span style="color: #000000;">&nbsp;b&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;planeEq[</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">float</span><span style="color: #000000;">&nbsp;c&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;planeEq[</span><span style="color: #000000;">2</span><span style="color: #000000;">];<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">float</span><span style="color: #000000;">&nbsp;d&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;planeEq[</span><span style="color: #000000;">3</span><span style="color: #000000;">];<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">float</span><span style="color: #000000;">&nbsp;dx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">vLightPos[</span><span style="color: #000000;">0</span><span style="color: #000000;">];<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">float</span><span style="color: #000000;">&nbsp;dy&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">vLightPos[</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">float</span><span style="color: #000000;">&nbsp;dz&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">vLightPos[</span><span style="color: #000000;">2</span><span style="color: #000000;">];<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Now&nbsp;build&nbsp;the&nbsp;projection&nbsp;matrix</span><span style="color: #008000;"><br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;proj[</span><span style="color: #000000;">0</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;b&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dy&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;c&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dz;<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;proj[</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">a&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dy;<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;proj[</span><span style="color: #000000;">2</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">a&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dz;<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;proj[</span><span style="color: #000000;">3</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0.0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;proj[</span><span style="color: #000000;">4</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">b&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dx;<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;proj[</span><span style="color: #000000;">5</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;a&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dx&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;c&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dz;<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;proj[</span><span style="color: #000000;">6</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">b&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dz;<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;proj[</span><span style="color: #000000;">7</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0.0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;proj[</span><span style="color: #000000;">8</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">c&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dx;<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;proj[</span><span style="color: #000000;">9</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">c&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dy;<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;proj[</span><span style="color: #000000;">10</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;a&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dx&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;b&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dy;<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;proj[</span><span style="color: #000000;">11</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0.0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;proj[</span><span style="color: #000000;">12</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">d&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dx;<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;proj[</span><span style="color: #000000;">13</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">d&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dy;<br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;proj[</span><span style="color: #000000;">14</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">d&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dz;<br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;proj[</span><span style="color: #000000;">15</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;a&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dx&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;b&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dy&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;c&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dz;<br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Shadow&nbsp;matrix&nbsp;ready</span><span style="color: #008000;"><br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">}</span></div>
<br></p><img src ="http://www.cppblog.com/summericeyl/aggbug/141802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/summericeyl/" target="_blank">夏冰</a> 2011-03-14 17:15 <a href="http://www.cppblog.com/summericeyl/archive/2011/03/14/141802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深度阴影的原理</title><link>http://www.cppblog.com/summericeyl/archive/2011/01/04/137953.html</link><dc:creator>夏冰</dc:creator><author>夏冰</author><pubDate>Tue, 04 Jan 2011 06:44:00 GMT</pubDate><guid>http://www.cppblog.com/summericeyl/archive/2011/01/04/137953.html</guid><wfw:comment>http://www.cppblog.com/summericeyl/comments/137953.html</wfw:comment><comments>http://www.cppblog.com/summericeyl/archive/2011/01/04/137953.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/summericeyl/comments/commentRss/137953.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/summericeyl/services/trackbacks/137953.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/summericeyl/archive/2011/01/04/137953.html'>阅读全文</a><img src ="http://www.cppblog.com/summericeyl/aggbug/137953.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/summericeyl/" target="_blank">夏冰</a> 2011-01-04 14:44 <a href="http://www.cppblog.com/summericeyl/archive/2011/01/04/137953.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ogre搏击游戏 重拳出击</title><link>http://www.cppblog.com/summericeyl/archive/2009/08/03/91988.html</link><dc:creator>夏冰</dc:creator><author>夏冰</author><pubDate>Sun, 02 Aug 2009 18:02:00 GMT</pubDate><guid>http://www.cppblog.com/summericeyl/archive/2009/08/03/91988.html</guid><wfw:comment>http://www.cppblog.com/summericeyl/comments/91988.html</wfw:comment><comments>http://www.cppblog.com/summericeyl/archive/2009/08/03/91988.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/summericeyl/comments/commentRss/91988.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/summericeyl/services/trackbacks/91988.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 看到这个游戏, 觉非常不错的. 花了一个晚上写了个攻击代码大家有兴趣的话也来参加这个游戏吧搏击俱乐部游戏基本战略:由于攻击上限值和打掉的砖块有关, 所以必须抢在对手前面尽可能消灭更多的砖块. 消灭方块的时候根据四个方向的方块数发射炮弹, 然后立刻转移到下一个位置.消灭了所有砖块之后,&nbsp;&nbsp;就多多休息存储能量. 当敌人和我同一条直线的时候, 而能量未满之时, 需要立刻移开.能量满了...&nbsp;&nbsp;<a href='http://www.cppblog.com/summericeyl/archive/2009/08/03/91988.html'>阅读全文</a><img src ="http://www.cppblog.com/summericeyl/aggbug/91988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/summericeyl/" target="_blank">夏冰</a> 2009-08-03 02:02 <a href="http://www.cppblog.com/summericeyl/archive/2009/08/03/91988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GLSL学习 -- gl_NormalMatrix</title><link>http://www.cppblog.com/summericeyl/archive/2009/06/24/88411.html</link><dc:creator>夏冰</dc:creator><author>夏冰</author><pubDate>Wed, 24 Jun 2009 02:30:00 GMT</pubDate><guid>http://www.cppblog.com/summericeyl/archive/2009/06/24/88411.html</guid><wfw:comment>http://www.cppblog.com/summericeyl/comments/88411.html</wfw:comment><comments>http://www.cppblog.com/summericeyl/archive/2009/06/24/88411.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/summericeyl/comments/commentRss/88411.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/summericeyl/services/trackbacks/88411.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/summericeyl/archive/2009/06/24/88411.html'>阅读全文</a><img src ="http://www.cppblog.com/summericeyl/aggbug/88411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/summericeyl/" target="_blank">夏冰</a> 2009-06-24 10:30 <a href="http://www.cppblog.com/summericeyl/archive/2009/06/24/88411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>卡通阴影的构造原理--OpenGL笔记</title><link>http://www.cppblog.com/summericeyl/archive/2009/05/11/82617.html</link><dc:creator>夏冰</dc:creator><author>夏冰</author><pubDate>Mon, 11 May 2009 13:12:00 GMT</pubDate><guid>http://www.cppblog.com/summericeyl/archive/2009/05/11/82617.html</guid><wfw:comment>http://www.cppblog.com/summericeyl/comments/82617.html</wfw:comment><comments>http://www.cppblog.com/summericeyl/archive/2009/05/11/82617.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/summericeyl/comments/commentRss/82617.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/summericeyl/services/trackbacks/82617.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 卡通阴影主要是指那些漫画手绘绘出的阴影效果, 不用光照实现的虚拟效果.&nbsp;&nbsp;<a href='http://www.cppblog.com/summericeyl/archive/2009/05/11/82617.html'>阅读全文</a><img src ="http://www.cppblog.com/summericeyl/aggbug/82617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/summericeyl/" target="_blank">夏冰</a> 2009-05-11 21:12 <a href="http://www.cppblog.com/summericeyl/archive/2009/05/11/82617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL 红宝书 帧缓冲区</title><link>http://www.cppblog.com/summericeyl/archive/2009/05/01/81613.html</link><dc:creator>夏冰</dc:creator><author>夏冰</author><pubDate>Thu, 30 Apr 2009 21:23:00 GMT</pubDate><guid>http://www.cppblog.com/summericeyl/archive/2009/05/01/81613.html</guid><wfw:comment>http://www.cppblog.com/summericeyl/comments/81613.html</wfw:comment><comments>http://www.cppblog.com/summericeyl/archive/2009/05/01/81613.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/summericeyl/comments/commentRss/81613.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/summericeyl/services/trackbacks/81613.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: OpenGL 红宝书 帧缓冲区&nbsp;&nbsp;<a href='http://www.cppblog.com/summericeyl/archive/2009/05/01/81613.html'>阅读全文</a><img src ="http://www.cppblog.com/summericeyl/aggbug/81613.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/summericeyl/" target="_blank">夏冰</a> 2009-05-01 05:23 <a href="http://www.cppblog.com/summericeyl/archive/2009/05/01/81613.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL 红宝书 纹理映射</title><link>http://www.cppblog.com/summericeyl/archive/2009/03/21/77368.html</link><dc:creator>夏冰</dc:creator><author>夏冰</author><pubDate>Fri, 20 Mar 2009 20:10:00 GMT</pubDate><guid>http://www.cppblog.com/summericeyl/archive/2009/03/21/77368.html</guid><wfw:comment>http://www.cppblog.com/summericeyl/comments/77368.html</wfw:comment><comments>http://www.cppblog.com/summericeyl/archive/2009/03/21/77368.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/summericeyl/comments/commentRss/77368.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/summericeyl/services/trackbacks/77368.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/summericeyl/archive/2009/03/21/77368.html'>阅读全文</a><img src ="http://www.cppblog.com/summericeyl/aggbug/77368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/summericeyl/" target="_blank">夏冰</a> 2009-03-21 04:10 <a href="http://www.cppblog.com/summericeyl/archive/2009/03/21/77368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL 红宝书 反走样 雾 点参数 多边形偏移</title><link>http://www.cppblog.com/summericeyl/archive/2009/03/11/76244.html</link><dc:creator>夏冰</dc:creator><author>夏冰</author><pubDate>Wed, 11 Mar 2009 09:09:00 GMT</pubDate><guid>http://www.cppblog.com/summericeyl/archive/2009/03/11/76244.html</guid><wfw:comment>http://www.cppblog.com/summericeyl/comments/76244.html</wfw:comment><comments>http://www.cppblog.com/summericeyl/archive/2009/03/11/76244.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/summericeyl/comments/commentRss/76244.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/summericeyl/services/trackbacks/76244.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/summericeyl/archive/2009/03/11/76244.html'>阅读全文</a><img src ="http://www.cppblog.com/summericeyl/aggbug/76244.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/summericeyl/" target="_blank">夏冰</a> 2009-03-11 17:09 <a href="http://www.cppblog.com/summericeyl/archive/2009/03/11/76244.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL 红宝书 混合</title><link>http://www.cppblog.com/summericeyl/archive/2009/03/08/75941.html</link><dc:creator>夏冰</dc:creator><author>夏冰</author><pubDate>Sun, 08 Mar 2009 15:33:00 GMT</pubDate><guid>http://www.cppblog.com/summericeyl/archive/2009/03/08/75941.html</guid><wfw:comment>http://www.cppblog.com/summericeyl/comments/75941.html</wfw:comment><comments>http://www.cppblog.com/summericeyl/archive/2009/03/08/75941.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/summericeyl/comments/commentRss/75941.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/summericeyl/services/trackbacks/75941.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/summericeyl/archive/2009/03/08/75941.html'>阅读全文</a><img src ="http://www.cppblog.com/summericeyl/aggbug/75941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/summericeyl/" target="_blank">夏冰</a> 2009-03-08 23:33 <a href="http://www.cppblog.com/summericeyl/archive/2009/03/08/75941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>