﻿<?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++博客-野猪世界</title><link>http://www.cppblog.com/zhuyeaini/</link><description>server ogre cegui bullet python lua</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 12:16:09 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 12:16:09 GMT</pubDate><ttl>60</ttl><item><title>c++ python twisted game server</title><link>http://www.cppblog.com/zhuyeaini/archive/2014/01/11/205308.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Sat, 11 Jan 2014 05:56:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2014/01/11/205308.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/205308.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2014/01/11/205308.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/205308.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/205308.html</trackback:ping><description><![CDATA[python的twisted网络库<br />c++的逻辑和速度<br />如果把两者结合起来<br />twisted网络库负责首发数据 收到的数据传给c++进行逻辑处理<br />一个比较优雅的网络服务库就成型了。。。<br />再扩展点 一些比较复杂的库就可以通过c++调用python来实现<br />python库就变成了c++的后花园了<br />实际世界中 在线游戏库要复杂点：<br /><img src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/server.png" width="600" height="216" alt="" /><br /><span style="color: e93300;"><strong>GS的代码就是c++为主程序 python作为网络模块</strong></span><br />python网络模块收到数据后 会传给c++代码处理<br />而c++在处理后会把结果交给python网络模块<br />python网络模块再回传给Gate Server<br />Gate Server再回传给Net Server<br />最后由Net Server传给用户<br /><br />好 国际惯例 放代码：<a href="http://pan.baidu.com/s/1dD4iDxv">http://pan.baidu.com/s/1dD4iDxv</a><br /><br /><div><a href="&#8220;http://pan.baidu.com/s/1dD4iDxv&#8221;&lt;/a"></a></div><a href="&#8220;http://pan.baidu.com/s/1dD4iDxv&#8221;&lt;/a">  </a><img src ="http://www.cppblog.com/zhuyeaini/aggbug/205308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2014-01-11 13:56 <a href="http://www.cppblog.com/zhuyeaini/archive/2014/01/11/205308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>wildpigEdit 再次起航</title><link>http://www.cppblog.com/zhuyeaini/archive/2014/01/09/205263.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Thu, 09 Jan 2014 15:12:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2014/01/09/205263.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/205263.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2014/01/09/205263.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/205263.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/205263.html</trackback:ping><description><![CDATA[wildpigEdit是用ogre cegui bullet skyx hydrax lua python poco等许多开源库写的 图形编辑器 没有什么特定方向 想到哪里实现到哪里 这次重构了下 以便以后更好地往下写<br />技术点：<br />1.内存池 即常用简单对象使用内存池 一次分配几百个以供后面使用<br />2.消息请求模式 各个对象之间使用消息进行调用 松耦合 消息序列化<br /><br />目前进度：已经完成地形的编辑 保存 载入<br />要做的：植被<br />未来：再次重构实现界面功能脚本化<br />感兴趣的可以看看：<a href="http://pan.baidu.com/share/link?shareid=2813701924&amp;uk=3762046617">http://pan.baidu.com/share/link?shareid=2813701924&amp;uk=3762046617<br /><br /></a>放图：<br /><img src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/gameScreen1.png" border="0" alt="" width="800" height="406" /><img src ="http://www.cppblog.com/zhuyeaini/aggbug/205263.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2014-01-09 23:12 <a href="http://www.cppblog.com/zhuyeaini/archive/2014/01/09/205263.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python c++</title><link>http://www.cppblog.com/zhuyeaini/archive/2013/12/10/204699.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Tue, 10 Dec 2013 10:27:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2013/12/10/204699.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/204699.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2013/12/10/204699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/204699.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/204699.html</trackback:ping><description><![CDATA[<div>#include &lt;boost/python.hpp&gt;</div><div></div><div>using namespace boost::python;</div><div></div><div>int add_five(int x) {</div><div><span style="white-space:pre">	</span>return x + 5;</div><div>}</div><div></div><div>#pragma comment(lib,"python27.lib")</div><div></div><div>BOOST_PYTHON_MODULE(Pointless)</div><div>{</div><div><span style="white-space:pre">	</span>def("add_five", add_five);</div><div>}</div><div></div><div>int main(int, char **) {</div><div></div><div><span style="white-space:pre">	</span>Py_Initialize();&nbsp;</div><div></div><div><span style="white-space:pre">	</span>try&nbsp;</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>initPointless(); // initialize Pointless</div><div></div><div><span style="white-space:pre">		</span>PyRun_SimpleString("import sys");</div><div><span style="white-space:pre">		</span>PyRun_SimpleString("sys.path.append('./')");</div><div></div><div><span style="white-space:pre">		</span>/*PyRun_SimpleString("import Pointless");</div><div><span style="white-space:pre">		</span>PyRun_SimpleString("print Pointless.add_five(4)");*/</div><div></div><div><span style="white-space:pre">		</span>PyRun_SimpleString("execfile('test.py')");</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>catch (error_already_set)&nbsp;</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>PyErr_Print();</div><div><span style="white-space:pre">	</span>}</div><div></div><div><span style="white-space:pre">	</span>Py_Finalize();</div><div><span style="white-space:pre">	</span>return 0;</div><div>}<br />//--------------------------------------------------------------------------------------<br />boost::python::manage_new_object<br />假如返回一个类型CZhu 那么使用时必须在python中注册CZhu对应的类<br />//--------------------------------------------------------------------------------------<br />boost::python::<span style="font-size: 14px;">return_opaque_pointer<br />这个就仅仅是个python包装的指针 用来传回给c++做点什么的<br /></span></div><img src ="http://www.cppblog.com/zhuyeaini/aggbug/204699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2013-12-10 18:27 <a href="http://www.cppblog.com/zhuyeaini/archive/2013/12/10/204699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模型</title><link>http://www.cppblog.com/zhuyeaini/archive/2013/05/31/200729.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Fri, 31 May 2013 12:37:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2013/05/31/200729.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/200729.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2013/05/31/200729.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/200729.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/200729.html</trackback:ping><description><![CDATA[代码原则：<br />1 一个对象只管理属于她自己的东西，其他对象用UUID来索引<br />2 要将特殊化转为一般化，易于管理<br />3 参数要一般化，最小化，重用原则<br />4 对象要分层，每层用type区分，每层只有自己的数据<br /><br />ogre渲染对象原则<br />1 考虑是在哪个RenderQueueGroup上<br />2 考虑和其对应实体联系，UUID的位置<br />3 透明 雾化<br />4 对反射，折射的影响<br />5 如何序列化<img src ="http://www.cppblog.com/zhuyeaini/aggbug/200729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2013-05-31 20:37 <a href="http://www.cppblog.com/zhuyeaini/archive/2013/05/31/200729.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql 字符集 草</title><link>http://www.cppblog.com/zhuyeaini/archive/2013/01/26/197574.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Sat, 26 Jan 2013 06:06:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2013/01/26/197574.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/197574.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2013/01/26/197574.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/197574.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/197574.html</trackback:ping><description><![CDATA[草<br />草<br />草<br />字符集还是挺麻烦的 就像有普通话 但同时还有数不清的方言 草 这就文化多样性<br />开始吧<br />mysql的字符集比较多：<br />character_set_client<br />character_set_connection<br />character_set_results<br /><br />character_set_server<br />character_set_database<br />还有一些其他的字符集 不多举出来了 怎么说呢<br />有时候我们只要知道怎么做就行 能完成工作就行 内部原理可以忽略一点<br />客观地说 仅仅从文档获得的信息是不够的 至少我无法完全理解 但可以知道大概的思路<br />字符集就是这样的 先来看看my.ini配置文件中和字符集有关的内容：<br />
<p>[mysql]</p>
<p>#default-character-set=latin1<br />default-character-set=gb2312<br /><br />[mysqld]<br />#character-set-server=latin1<br />character-set-server=utf8</p>可以看到mysql客户端和服务器端的默认编码设置<br />这个设置告诉我们什么：<br />服务器角度：客户端的字符集是gb2312 我要把这些字符内容转成utf8存起来<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当客户端向我请求数据 如查询等 我要取出utf8编码的字符内容 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后转换成gb2312发给客户端<br /><br />客户端角度：如果我程序中的字符编码是gb2312的 那很好 我用不着转换就可以<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;直接发给服务器 如果不是 那对不起 先要转换成gb2312 然后再发<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;给服务器哦 因为服务器默认把我发过去的字符当成是gb2312哦<br /><br />好 其实 这就是全部 至于内部如何转换什么的 老实讲 我不看到源码是不可能太清楚的 文档 得了吧<br /><img src ="http://www.cppblog.com/zhuyeaini/aggbug/197574.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2013-01-26 14:06 <a href="http://www.cppblog.com/zhuyeaini/archive/2013/01/26/197574.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通用的多线程处理模型</title><link>http://www.cppblog.com/zhuyeaini/archive/2013/01/24/197545.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Thu, 24 Jan 2013 12:07:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2013/01/24/197545.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/197545.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2013/01/24/197545.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/197545.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/197545.html</trackback:ping><description><![CDATA[好 草 多线程处理<br />放代码： 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ThreadTest<br /><img id="Codehighlighter1_17_561_Open_Image" onclick="this.style.display='none'; Codehighlighter1_17_561_Open_Text.style.display='none'; Codehighlighter1_17_561_Closed_Image.style.display='inline'; Codehighlighter1_17_561_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_17_561_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_17_561_Closed_Text.style.display='none'; Codehighlighter1_17_561_Open_Image.style.display='inline'; Codehighlighter1_17_561_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_17_561_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_17_561_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">:<br /><img id="Codehighlighter1_40_41_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_41_Open_Text.style.display='none'; Codehighlighter1_40_41_Closed_Image.style.display='inline'; Codehighlighter1_40_41_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_40_41_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_40_41_Closed_Text.style.display='none'; Codehighlighter1_40_41_Open_Image.style.display='inline'; Codehighlighter1_40_41_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;ThreadTest()</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_40_41_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_40_41_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_57_58_Open_Image" onclick="this.style.display='none'; Codehighlighter1_57_58_Open_Text.style.display='none'; Codehighlighter1_57_58_Closed_Image.style.display='inline'; Codehighlighter1_57_58_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_57_58_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_57_58_Closed_Text.style.display='none'; Codehighlighter1_57_58_Open_Image.style.display='inline'; Codehighlighter1_57_58_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">ThreadTest()</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_57_58_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_57_58_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;startup();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;addreq(</span><span style="color: #0000ff">int</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;_threadMain();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;_waitForNextRequest();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;_processNextRequest();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;WorkerFunc&nbsp;OGRE_THREAD_WORKER_INHERIT<br /><img id="Codehighlighter1_224_334_Open_Image" onclick="this.style.display='none'; Codehighlighter1_224_334_Open_Text.style.display='none'; Codehighlighter1_224_334_Closed_Image.style.display='inline'; Codehighlighter1_224_334_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_224_334_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_224_334_Closed_Text.style.display='none'; Codehighlighter1_224_334_Open_Image.style.display='inline'; Codehighlighter1_224_334_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_224_334_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_224_334_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThreadTest</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;mQueue;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WorkerFunc(ThreadTest</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;q)&nbsp;<br /><img id="Codehighlighter1_293_294_Open_Image" onclick="this.style.display='none'; Codehighlighter1_293_294_Open_Text.style.display='none'; Codehighlighter1_293_294_Closed_Image.style.display='inline'; Codehighlighter1_293_294_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_293_294_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_293_294_Closed_Text.style.display='none'; Codehighlighter1_293_294_Open_Image.style.display='inline'; Codehighlighter1_293_294_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;mQueue(q)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_293_294_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_293_294_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">operator</span><span style="color: #000000">()();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;WorkerFunc</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;mWorkerFunc;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;std::deque</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">int</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;RequestQueue;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;RequestQueue&nbsp;mRequestQueue;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;OGRE_MUTEX(mRequestMutex)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;OGRE_MUTEX(mProcessMutex)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;OGRE_MUTEX(mResponseMutex)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;OGRE_THREAD_SYNCHRONISER(mRequestCondition)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />}</span></span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ThreadTest::addreq(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i)<br /><img id="Codehighlighter1_596_702_Open_Image" onclick="this.style.display='none'; Codehighlighter1_596_702_Open_Text.style.display='none'; Codehighlighter1_596_702_Closed_Image.style.display='inline'; Codehighlighter1_596_702_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_596_702_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_596_702_Closed_Text.style.display='none'; Codehighlighter1_596_702_Open_Image.style.display='inline'; Codehighlighter1_596_702_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_596_702_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_596_702_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;OGRE_LOCK_MUTEX(mRequestMutex)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;mRequestQueue.push_back(i);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;OGRE_THREAD_NOTIFY_ONE(mRequestCondition)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ThreadTest::startup()<br /><img id="Codehighlighter1_731_875_Open_Image" onclick="this.style.display='none'; Codehighlighter1_731_875_Open_Text.style.display='none'; Codehighlighter1_731_875_Closed_Image.style.display='inline'; Codehighlighter1_731_875_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_731_875_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_731_875_Closed_Text.style.display='none'; Codehighlighter1_731_875_Open_Image.style.display='inline'; Codehighlighter1_731_875_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_731_875_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_731_875_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">3</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(i</span><span style="color: #000000">&gt;</span><span style="color: #000000">0</span><span style="color: #000000">)<br /><img id="Codehighlighter1_756_872_Open_Image" onclick="this.style.display='none'; Codehighlighter1_756_872_Open_Text.style.display='none'; Codehighlighter1_756_872_Closed_Image.style.display='inline'; Codehighlighter1_756_872_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_756_872_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_756_872_Closed_Text.style.display='none'; Codehighlighter1_756_872_Open_Image.style.display='inline'; Codehighlighter1_756_872_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_756_872_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_756_872_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mWorkerFunc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;OGRE_NEW_T(WorkerFunc(</span><span style="color: #0000ff">this</span><span style="color: #000000">),&nbsp;MEMCATEGORY_GENERAL);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OGRE_THREAD_CREATE(t,&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">mWorkerFunc);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000">--</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ThreadTest::WorkerFunc::</span><span style="color: #0000ff">operator</span><span style="color: #000000">()()<br /><img id="Codehighlighter1_919_945_Open_Image" onclick="this.style.display='none'; Codehighlighter1_919_945_Open_Text.style.display='none'; Codehighlighter1_919_945_Closed_Image.style.display='inline'; Codehighlighter1_919_945_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_919_945_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_919_945_Closed_Text.style.display='none'; Codehighlighter1_919_945_Open_Image.style.display='inline'; Codehighlighter1_919_945_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_919_945_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_919_945_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;mQueue</span><span style="color: #000000">-&gt;</span><span style="color: #000000">_threadMain();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ThreadTest::WorkerFunc::run()<br /><img id="Codehighlighter1_983_1009_Open_Image" onclick="this.style.display='none'; Codehighlighter1_983_1009_Open_Text.style.display='none'; Codehighlighter1_983_1009_Closed_Image.style.display='inline'; Codehighlighter1_983_1009_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_983_1009_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_983_1009_Closed_Text.style.display='none'; Codehighlighter1_983_1009_Open_Image.style.display='inline'; Codehighlighter1_983_1009_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_983_1009_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_983_1009_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;mQueue</span><span style="color: #000000">-&gt;</span><span style="color: #000000">_threadMain();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ThreadTest::_threadMain()<br /><img id="Codehighlighter1_1042_1115_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1042_1115_Open_Text.style.display='none'; Codehighlighter1_1042_1115_Closed_Image.style.display='inline'; Codehighlighter1_1042_1115_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_1042_1115_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1042_1115_Closed_Text.style.display='none'; Codehighlighter1_1042_1115_Open_Image.style.display='inline'; Codehighlighter1_1042_1115_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1042_1115_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_1042_1115_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">true</span><span style="color: #000000">)<br /><img id="Codehighlighter1_1059_1112_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1059_1112_Open_Text.style.display='none'; Codehighlighter1_1059_1112_Closed_Image.style.display='inline'; Codehighlighter1_1059_1112_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1059_1112_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1059_1112_Closed_Text.style.display='none'; Codehighlighter1_1059_1112_Open_Image.style.display='inline'; Codehighlighter1_1059_1112_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1059_1112_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_1059_1112_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_waitForNextRequest();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_processNextRequest();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ThreadTest::_waitForNextRequest()<br /><img id="Codehighlighter1_1157_1309_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1157_1309_Open_Text.style.display='none'; Codehighlighter1_1157_1309_Closed_Image.style.display='inline'; Codehighlighter1_1157_1309_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_1157_1309_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1157_1309_Closed_Text.style.display='none'; Codehighlighter1_1157_1309_Open_Image.style.display='inline'; Codehighlighter1_1157_1309_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1157_1309_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_1157_1309_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;OGRE_LOCK_MUTEX_NAMED(mRequestMutex,&nbsp;queueLock);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(mRequestQueue.empty())<br /><img id="Codehighlighter1_1238_1306_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1238_1306_Open_Text.style.display='none'; Codehighlighter1_1238_1306_Closed_Image.style.display='inline'; Codehighlighter1_1238_1306_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1238_1306_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1238_1306_Closed_Text.style.display='none'; Codehighlighter1_1238_1306_Open_Image.style.display='inline'; Codehighlighter1_1238_1306_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1238_1306_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_1238_1306_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OGRE_THREAD_WAIT(mRequestCondition,&nbsp;mRequestMutex,&nbsp;queueLock);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ThreadTest::_processNextRequest()<br /><img id="Codehighlighter1_1351_1558_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1351_1558_Open_Text.style.display='none'; Codehighlighter1_1351_1558_Closed_Image.style.display='inline'; Codehighlighter1_1351_1558_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_1351_1558_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1351_1558_Closed_Text.style.display='none'; Codehighlighter1_1351_1558_Open_Image.style.display='inline'; Codehighlighter1_1351_1558_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1351_1558_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_1351_1558_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;OGRE_LOCK_MUTEX(mProcessMutex)<br /><img id="Codehighlighter1_1386_1555_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1386_1555_Open_Text.style.display='none'; Codehighlighter1_1386_1555_Closed_Image.style.display='inline'; Codehighlighter1_1386_1555_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1386_1555_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1386_1555_Closed_Text.style.display='none'; Codehighlighter1_1386_1555_Open_Image.style.display='inline'; Codehighlighter1_1386_1555_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1386_1555_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_1386_1555_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OGRE_LOCK_MUTEX(mRequestMutex);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">mRequestQueue.empty())<br /><img id="Codehighlighter1_1454_1552_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1454_1552_Open_Text.style.display='none'; Codehighlighter1_1454_1552_Closed_Image.style.display='inline'; Codehighlighter1_1454_1552_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1454_1552_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1454_1552_Closed_Text.style.display='none'; Codehighlighter1_1454_1552_Open_Image.style.display='inline'; Codehighlighter1_1454_1552_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1454_1552_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_1454_1552_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;request&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mRequestQueue.front();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mRequestQueue.pop_front();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">request</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">endl;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span></div>当然 里面用到了一些ogre中的线程宏，展开也就是boost的线程api：<br />#define OGRE_LOCK_MUTEX(name) boost::recursive_mutex::scoped_lock ogrenameLock(name);<br />#define OGRE_LOCK_MUTEX_NAMED(mutexName, lockName) boost::recursive_mutex::scoped_lock lockName(mutexName);<br /><br />#define OGRE_THREAD_WAIT(sync, mutex, lock) sync.wait(lock);<br />#define OGRE_THREAD_NOTIFY_ONE(sync) sync.notify_one(); <br />#define OGRE_THREAD_NOTIFY_ALL(sync) sync.notify_all(); <br /><br />#define OGRE_THREAD_SYNCHRONISER(sync) boost::condition sync;<br /><br />#define OGRE_MUTEX(name) mutable boost::recursive_mutex name;<br /><br />#define OGRE_THREAD_WAIT(sync, mutex, lock) sync.wait(lock);<br /><br />主线程不断调用addreq()来增加请求并通知线程后马上返回 线程在得到通知后从阻塞中醒来处理请求<br />OGRE_LOCK_MUTEX(name)：就是在范围内只允许有一个线程进入<br /><span style="color: red;">OGRE_THREAD_WAIT(mRequestCondition, mRequestMutex, queueLock)：该宏会失去queueLock，阻塞当前线程直到被通知，在返回前取得queueLock</span><br />来看_waitForNextRequest()的代码：<br />_waitForNextRequest()<br />{<br />&nbsp;&nbsp;&nbsp;OGRE_LOCK_MUTEX_NAMED(mRequestMutex, queueLock);<br />&nbsp;&nbsp;&nbsp;&nbsp;if (mRequestQueue.empty())<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OGRE_THREAD_WAIT(mRequestCondition, mRequestMutex, queueLock);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />首先取得范围锁queueLock，如果mRequestQueue为空，就等着，同时要注意，由于失去queueLock，其他线程会得到queueLock，并再次导致queueLock的变化<br /><span style="color: red;">如果有三个线程，分别是1,2,3</span><br /><span style="color: red;">假设线程1最先取得queueLock，然后被阻塞，同时线程2或者3会在线程1失去queueLock时取得queueLock，最终，三个线程都会被阻塞</span>，queueLock为失去<br />继续往下走，假设这时主线程addreq()，那么有一个线程会被唤醒，同时得到queueLock，然后跳出该函数时，queueLock也随着超出范围变为失去，然后来看<br />下一个函数_processNextRequest()的代码：<br />_processNextRequest()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Request* request = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OGRE_LOCK_MUTEX(mRequestMutex) 
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!mRequestQueue.empty())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request = mRequestQueue.front();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mRequestQueue.pop_front();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (request)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processRequestResponse(request, false);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>}<br />函数内容改了下以看得更加清楚，函数取得mRequestMutex，当其队列非空时，从队列中弹出一个请求，随后丢失mRequestMutex，并处理request<br />在处理完request后，将结果放进一个响应队列中，主线程在其循环中将会看到，整个流程就是这样子<br />总结：请求队列要注意是否为空，由于有多个线程，需要将其设为阻塞并在需要时唤醒<br /><br /><img src ="http://www.cppblog.com/zhuyeaini/aggbug/197545.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2013-01-24 20:07 <a href="http://www.cppblog.com/zhuyeaini/archive/2013/01/24/197545.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bullet setp 流程</title><link>http://www.cppblog.com/zhuyeaini/archive/2013/01/10/197179.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Thu, 10 Jan 2013 12:06:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2013/01/10/197179.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/197179.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2013/01/10/197179.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/197179.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/197179.html</trackback:ping><description><![CDATA[好的 <img border="0" src="http://www.cppblog.com/Emoticons/QQ/icon11.gif" width="22" height="29" alt="" /><br />我要开始新篇了<br />新篇是Bullet的<br />刚开始看Bullet时 代码不熟 看后忘前 不过 怎么说呢 那我就每天看 草<br />于是 我就明白了<br />先看看那个step函数： 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;btDiscreteDynamicsWorld::internalSingleStepSimulation(btScalar&nbsp;timeStep)<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_78_1003_Open_Image" onclick="this.style.display='none'; Codehighlighter1_78_1003_Open_Text.style.display='none'; Codehighlighter1_78_1003_Closed_Image.style.display='inline'; Codehighlighter1_78_1003_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_78_1003_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_78_1003_Closed_Text.style.display='none'; Codehighlighter1_78_1003_Open_Image.style.display='inline'; Codehighlighter1_78_1003_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_78_1003_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_78_1003_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;BT_PROFILE(</span><span style="color: #000000">"</span><span style="color: #000000">internalSingleStepSimulation</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img id="Codehighlighter1_164_215_Open_Image" onclick="this.style.display='none'; Codehighlighter1_164_215_Open_Text.style.display='none'; Codehighlighter1_164_215_Closed_Image.style.display='inline'; Codehighlighter1_164_215_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_164_215_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_164_215_Closed_Text.style.display='none'; Codehighlighter1_164_215_Open_Image.style.display='inline'; Codehighlighter1_164_215_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;m_internalPreTickCallback)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_164_215_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_164_215_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #000000">*</span><span style="color: #000000">m_internalPreTickCallback)(</span><span style="color: #0000ff">this</span><span style="color: #000000">,&nbsp;timeStep);<br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span style="color: #008080">10</span><span style="color: #000000"><img id="Codehighlighter1_220_252_Open_Image" onclick="this.style.display='none'; Codehighlighter1_220_252_Open_Text.style.display='none'; Codehighlighter1_220_252_Closed_Image.style.display='inline'; Codehighlighter1_220_252_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_220_252_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_220_252_Closed_Text.style.display='none'; Codehighlighter1_220_252_Open_Image.style.display='inline'; Codehighlighter1_220_252_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_220_252_Closed_Text">/**/</span><span id="Codehighlighter1_220_252_Open_Text"><span style="color: #808080">///</span><span style="color: #008000">apply&nbsp;gravity,&nbsp;predict&nbsp;motion</span><span style="color: #808080"></span></span><br /><span style="color: #008080">11</span><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: red;">&nbsp;predictUnconstraintMotion(timeStep);</span><span style="color: #000000"><br /></span><span style="color: #008080">12</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span style="color: #008080">13</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;btDispatcherInfo</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;dispatchInfo&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getDispatchInfo();<br /></span><span style="color: #008080">14</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span style="color: #008080">15</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;dispatchInfo.m_timeStep&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;timeStep;<br /></span><span style="color: #008080">16</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;dispatchInfo.m_stepCount&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">17</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;dispatchInfo.m_debugDraw&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getDebugDrawer();<br /></span><span style="color: #008080">18</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span style="color: #008080">19</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span style="color: #008080">20</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;createPredictiveContacts(timeStep);<br /></span><span style="color: #008080">21</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">22</span><span style="color: #000000"><img id="Codehighlighter1_508_538_Open_Image" onclick="this.style.display='none'; Codehighlighter1_508_538_Open_Text.style.display='none'; Codehighlighter1_508_538_Closed_Image.style.display='inline'; Codehighlighter1_508_538_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_508_538_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_508_538_Closed_Text.style.display='none'; Codehighlighter1_508_538_Open_Image.style.display='inline'; Codehighlighter1_508_538_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_508_538_Closed_Text">/**/</span><span id="Codehighlighter1_508_538_Open_Text"><span style="color: #808080">///</span><span style="color: #008000">perform&nbsp;collision&nbsp;detection</span><span style="color: #808080"></span></span><br /><span style="color: #008080">23</span><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: red;">performDiscreteCollisionDetection();</span><span style="color: #000000"><br /></span><span style="color: #008080">24</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span style="color: #008080">25</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: red;">&nbsp;calculateSimulationIslands();</span><span style="color: #000000"><br /></span><span style="color: #008080">26</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span style="color: #008080">27</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">28</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;getSolverInfo().m_timeStep&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;timeStep;<br /></span><span style="color: #008080">29</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">30</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span style="color: #008080">31</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span style="color: #008080">32</span><span style="color: #000000"><img id="Codehighlighter1_657_701_Open_Image" onclick="this.style.display='none'; Codehighlighter1_657_701_Open_Text.style.display='none'; Codehighlighter1_657_701_Closed_Image.style.display='inline'; Codehighlighter1_657_701_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_657_701_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_657_701_Closed_Text.style.display='none'; Codehighlighter1_657_701_Open_Image.style.display='inline'; Codehighlighter1_657_701_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_657_701_Closed_Text">/**/</span><span id="Codehighlighter1_657_701_Open_Text"><span style="color: #808080">///</span><span style="color: #008000">solve&nbsp;contact&nbsp;and&nbsp;other&nbsp;joint&nbsp;constraints</span><span style="color: #808080"></span></span><br /><span style="color: #008080">33</span><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;solveConstraints(getSolverInfo());<br /></span><span style="color: #008080">34</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">35</span><span style="color: #000000"><img id="Codehighlighter1_741_789_Open_Image" onclick="this.style.display='none'; Codehighlighter1_741_789_Open_Text.style.display='none'; Codehighlighter1_741_789_Closed_Image.style.display='inline'; Codehighlighter1_741_789_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_741_789_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_741_789_Closed_Text.style.display='none'; Codehighlighter1_741_789_Open_Image.style.display='inline'; Codehighlighter1_741_789_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_741_789_Closed_Text">/**/</span><span id="Codehighlighter1_741_789_Open_Text"><span style="color: #808080">///</span><span style="color: #008000">CallbackTriggers();<br /></span><span style="color: #008080">36</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span style="color: #008080">37</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">integrate&nbsp;transforms</span><span style="color: #808080"></span></span><br /><span style="color: #008080">38</span><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><span style="color: #000000"><br /></span><span style="color: #008080">39</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;integrateTransforms(timeStep);<br /></span><span style="color: #008080">40</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span style="color: #008080">41</span><span style="color: #000000"><img id="Codehighlighter1_825_853_Open_Image" onclick="this.style.display='none'; Codehighlighter1_825_853_Open_Text.style.display='none'; Codehighlighter1_825_853_Closed_Image.style.display='inline'; Codehighlighter1_825_853_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_825_853_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_825_853_Closed_Text.style.display='none'; Codehighlighter1_825_853_Open_Image.style.display='inline'; Codehighlighter1_825_853_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_825_853_Closed_Text">/**/</span><span id="Codehighlighter1_825_853_Open_Text"><span style="color: #808080">///</span><span style="color: #008000">update&nbsp;vehicle&nbsp;simulation</span><span style="color: #808080"></span></span><br /><span style="color: #008080">42</span><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;updateActions(timeStep);<br /></span><span style="color: #008080">43</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">44</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;updateActivationState(&nbsp;timeStep&nbsp;);<br /></span><span style="color: #008080">45</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span style="color: #008080">46</span><span style="color: #000000"><img id="Codehighlighter1_952_1000_Open_Image" onclick="this.style.display='none'; Codehighlighter1_952_1000_Open_Text.style.display='none'; Codehighlighter1_952_1000_Closed_Image.style.display='inline'; Codehighlighter1_952_1000_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_952_1000_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_952_1000_Closed_Text.style.display='none'; Codehighlighter1_952_1000_Open_Image.style.display='inline'; Codehighlighter1_952_1000_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;m_internalTickCallback)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_952_1000_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_952_1000_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">47</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #000000">*</span><span style="color: #000000">m_internalTickCallback)(</span><span style="color: #0000ff">this</span><span style="color: #000000">,&nbsp;timeStep);<br /></span><span style="color: #008080">48</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">49</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">50</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span></div><br />看看里面几个重要的函数：<br />1 predictUnconstraintMotion(timeStep) ：给每个物体加重力作用力<br />2&nbsp;createPredictiveContacts(timeStep) ：和ccd有关 处理物体在高速运动时的碰撞<br />3 performDiscreteCollisionDetection()：此函数做碰撞 我们来看看<br /><br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;btCollisionWorld::performDiscreteCollisionDetection()<br /><img id="Codehighlighter1_59_444_Open_Image" onclick="this.style.display='none'; Codehighlighter1_59_444_Open_Text.style.display='none'; Codehighlighter1_59_444_Closed_Image.style.display='inline'; Codehighlighter1_59_444_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_59_444_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_59_444_Closed_Text.style.display='none'; Codehighlighter1_59_444_Open_Image.style.display='inline'; Codehighlighter1_59_444_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_59_444_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_59_444_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;BT_PROFILE(</span><span style="color: #000000">"</span><span style="color: #000000">performDiscreteCollisionDetection</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;btDispatcherInfo</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;dispatchInfo&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getDispatchInfo();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: red;">updateAabbs();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: red;">computeOverlappingPairs();</span><span style="color: #000000"><br /></span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;dispatcher&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getDispatcher();<br /><img id="Codehighlighter1_258_441_Open_Image" onclick="this.style.display='none'; Codehighlighter1_258_441_Open_Text.style.display='none'; Codehighlighter1_258_441_Closed_Image.style.display='inline'; Codehighlighter1_258_441_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_258_441_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_258_441_Closed_Text.style.display='none'; Codehighlighter1_258_441_Open_Image.style.display='inline'; Codehighlighter1_258_441_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_258_441_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_258_441_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BT_PROFILE(</span><span style="color: #000000">"</span><span style="color: #000000">dispatchAllCollisionPairs</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(dispatcher)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: red;">dispatcher</span><span style="color: red;">-&gt;</span><span style="color: red;">dispatchAllCollisionPairs(m_broadphasePairCache</span><span style="color: red;">-&gt;</span><span style="color: red;">getOverlappingPairCache(),dispatchInfo,m_dispatcher1);&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #000000">&nbsp; &nbsp; &nbsp; &nbsp;}<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" /></span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span></div><br />1)&nbsp;&nbsp;&nbsp;updateAabbs()：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把要参加broad碰撞的物体放进paircache，此时没有进行任何碰撞检测，仅仅是把物体加进paircache（addOverlappingPair）同时，放进ghost的paircache里<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (m_ghostPairCallback)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_ghostPairCallback-&gt;addOverlappingPair(proxy0,proxy1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在这个阶段可以设置一个回调函数，用于过滤一些特定物体<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;SIMD_FORCE_INLINE bool needsBroadphaseCollision(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1) const<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red;">&nbsp;if (m_overlapFilterCallback)</span><br /><span style="color: red;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return m_overlapFilterCallback-&gt;needBroadphaseCollision(proxy0,proxy1);</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool collides = (proxy0-&gt;m_collisionFilterGroup &amp; proxy1-&gt;m_collisionFilterMask) != 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;collides = collides &amp;&amp; (proxy1-&gt;m_collisionFilterGroup &amp; proxy0-&gt;m_collisionFilterMask);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return collides;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;m_overlapFilterCallback就是那个回调函数<br /><br />2)&nbsp;&nbsp;&nbsp; computeOverlappingPairs()：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;该函数执行broad碰撞，也就是类似于AABB的粗线条碰撞，以此过滤paircache中不用进行narrow碰撞的pair<br /><br />3)&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red;">dispatcher-&gt;dispatchAllCollisionPairs</span><span style="color: red;">(m_broadphasePairCache-&gt;getOverlappingPairCache(),dispatchInfo,m_dispatcher1):</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;该函数进行narrow碰撞，也就是精确碰撞，在这里，我们也可以设置回调，以过滤掉某些物体的精确碰撞<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;btCollisionDispatcher::</span><span style="color: red;">defaultNearCallback</span><span style="color: #000000">(btBroadphasePair</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;collisionPair,&nbsp;btCollisionDispatcher</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;dispatcher,&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;btDispatcherInfo</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;dispatchInfo)<br /><img id="Codehighlighter1_154_1453_Open_Image" onclick="this.style.display='none'; Codehighlighter1_154_1453_Open_Text.style.display='none'; Codehighlighter1_154_1453_Closed_Image.style.display='inline'; Codehighlighter1_154_1453_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_154_1453_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_154_1453_Closed_Text.style.display='none'; Codehighlighter1_154_1453_Open_Image.style.display='inline'; Codehighlighter1_154_1453_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_154_1453_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_154_1453_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btCollisionObject</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;colObj0&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(btCollisionObject</span><span style="color: #000000">*</span><span style="color: #000000">)collisionPair.m_pProxy0</span><span style="color: #000000">-&gt;</span><span style="color: #000000">m_clientObject;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btCollisionObject</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;colObj1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(btCollisionObject</span><span style="color: #000000">*</span><span style="color: #000000">)collisionPair.m_pProxy1</span><span style="color: #000000">-&gt;</span><span style="color: #000000">m_clientObject;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span style="color: red;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: red;">if</span><span style="color: red;">&nbsp;(dispatcher.needsCollision(colObj0,colObj1))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000"><br /><img id="Codehighlighter1_393_1450_Open_Image" onclick="this.style.display='none'; Codehighlighter1_393_1450_Open_Text.style.display='none'; Codehighlighter1_393_1450_Closed_Image.style.display='inline'; Codehighlighter1_393_1450_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_393_1450_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_393_1450_Closed_Text.style.display='none'; Codehighlighter1_393_1450_Open_Image.style.display='inline'; Codehighlighter1_393_1450_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_393_1450_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_393_1450_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btCollisionObjectWrapper&nbsp;obj0Wrap(</span><span style="color: #000000">0</span><span style="color: #000000">,colObj0</span><span style="color: #000000">-&gt;</span><span style="color: #000000">getCollisionShape(),colObj0,colObj0</span><span style="color: #000000">-&gt;</span><span style="color: #000000">getWorldTransform());<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btCollisionObjectWrapper&nbsp;obj1Wrap(</span><span style="color: #000000">0</span><span style="color: #000000">,colObj1</span><span style="color: #000000">-&gt;</span><span style="color: #000000">getCollisionShape(),colObj1,colObj1</span><span style="color: #000000">-&gt;</span><span style="color: #000000">getWorldTransform());<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">dispatcher&nbsp;will&nbsp;keep&nbsp;algorithms&nbsp;persistent&nbsp;in&nbsp;the&nbsp;collision&nbsp;pair</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">collisionPair.m_algorithm)<br /><img id="Codehighlighter1_719_803_Open_Image" onclick="this.style.display='none'; Codehighlighter1_719_803_Open_Text.style.display='none'; Codehighlighter1_719_803_Closed_Image.style.display='inline'; Codehighlighter1_719_803_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_719_803_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_719_803_Closed_Text.style.display='none'; Codehighlighter1_719_803_Open_Image.style.display='inline'; Codehighlighter1_719_803_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_719_803_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_719_803_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;collisionPair.m_algorithm&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dispatcher.findAlgorithm(</span><span style="color: #000000">&amp;</span><span style="color: #000000">obj0Wrap,</span><span style="color: #000000">&amp;</span><span style="color: #000000">obj1Wrap);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(collisionPair.m_algorithm)<br /><img id="Codehighlighter1_843_1446_Open_Image" onclick="this.style.display='none'; Codehighlighter1_843_1446_Open_Text.style.display='none'; Codehighlighter1_843_1446_Closed_Image.style.display='inline'; Codehighlighter1_843_1446_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_843_1446_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_843_1446_Closed_Text.style.display='none'; Codehighlighter1_843_1446_Open_Image.style.display='inline'; Codehighlighter1_843_1446_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_843_1446_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_843_1446_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btManifoldResult&nbsp;contactPointResult(</span><span style="color: #000000">&amp;</span><span style="color: #000000">obj0Wrap,</span><span style="color: #000000">&amp;</span><span style="color: #000000">obj1Wrap);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(dispatchInfo.m_dispatchFunc&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btDispatcherInfo::DISPATCH_DISCRETE)<br /><img id="Codehighlighter1_994_1152_Open_Image" onclick="this.style.display='none'; Codehighlighter1_994_1152_Open_Text.style.display='none'; Codehighlighter1_994_1152_Closed_Image.style.display='inline'; Codehighlighter1_994_1152_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_994_1152_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_994_1152_Closed_Text.style.display='none'; Codehighlighter1_994_1152_Open_Image.style.display='inline'; Codehighlighter1_994_1152_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_994_1152_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_994_1152_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&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">discrete&nbsp;collision&nbsp;detection&nbsp;query</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /></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;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;collisionPair.m_algorithm</span><span style="color: #000000">-&gt;</span><span style="color: #000000">processCollision(</span><span style="color: #000000">&amp;</span><span style="color: #000000">obj0Wrap,</span><span style="color: #000000">&amp;</span><span style="color: #000000">obj1Wrap,dispatchInfo,</span><span style="color: #000000">&amp;</span><span style="color: #000000">contactPointResult);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br /><img id="Codehighlighter1_1163_1441_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1163_1441_Open_Text.style.display='none'; Codehighlighter1_1163_1441_Closed_Image.style.display='inline'; Codehighlighter1_1163_1441_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1163_1441_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1163_1441_Closed_Text.style.display='none'; Codehighlighter1_1163_1441_Open_Image.style.display='inline'; Codehighlighter1_1163_1441_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1163_1441_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_1163_1441_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&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">continuous&nbsp;collision&nbsp;detection&nbsp;query,&nbsp;time&nbsp;of&nbsp;impact&nbsp;(toi)</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /></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;btScalar&nbsp;toi&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;collisionPair.m_algorithm</span><span style="color: #000000">-&gt;</span><span style="color: #000000">calculateTimeOfImpact(colObj0,colObj1,dispatchInfo,</span><span style="color: #000000">&amp;</span><span style="color: #000000">contactPointResult);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&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">if</span><span style="color: #000000">&nbsp;(dispatchInfo.m_timeOfImpact&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;toi)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dispatchInfo.m_timeOfImpact&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;toi;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span></div>
<p><br />这个是默认的callback所做的活，正如bulletManual上所说，可以换成我们自己的callback<br /><span style="color: red;">&nbsp;void&nbsp;setNearCallback(btNearCallback&nbsp;nearCallback)</span><br /><span style="color: red;">&nbsp;{</span><br /><span style="color: red;">&nbsp;&nbsp;m_nearCallback = nearCallback; </span><br /><span style="color: red;">&nbsp;}</span><br />另外，还可以重载btCollisionDispatcher，重写其<br /><span style="color: red;">&nbsp;virtual bool&nbsp;needsCollision(const btCollisionObject* body0,const btCollisionObject* body1);</span><br /><span style="color: red;">&nbsp;virtual bool&nbsp;needsResponse(const btCollisionObject* body0,const btCollisionObject* body1);</span><br /><span style="color: red;">&nbsp;virtual void&nbsp;dispatchAllCollisionPairs(btOverlappingPairCache* pairCache,const btDispatcherInfo&amp; dispatchInfo,btDispatcher* dispatcher) ;</span><br />从而完全定制其行为<br /><br />好 暂时over<br /><br /><br /><br /><br /><br /><br /></p><img src ="http://www.cppblog.com/zhuyeaini/aggbug/197179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2013-01-10 20:06 <a href="http://www.cppblog.com/zhuyeaini/archive/2013/01/10/197179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ogre Terrain LayerTexture 的混合方式</title><link>http://www.cppblog.com/zhuyeaini/archive/2012/12/13/196207.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Thu, 13 Dec 2012 05:07:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2012/12/13/196207.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/196207.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2012/12/13/196207.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/196207.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/196207.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">layer)<br /><img id="Codehighlighter1_14_172_Open_Image" onclick="this.style.display='none'; Codehighlighter1_14_172_Open_Text.style.display='none'; Codehighlighter1_14_172_Closed_Image.style.display='inline'; Codehighlighter1_14_172_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_14_172_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_14_172_Closed_Text.style.display='none'; Codehighlighter1_14_172_Open_Image.style.display='inline'; Codehighlighter1_14_172_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_14_172_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_14_172_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outStream&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;diffuse&nbsp;=&nbsp;diffuseSpecTex0.rgb;\n</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(prof</span><span style="color: #000000">-&gt;</span><span style="color: #000000">isLayerSpecularMappingEnabled())<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outStream&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;specular&nbsp;=&nbsp;diffuseSpecTex0.a;\n</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br /><img id="Codehighlighter1_183_464_Open_Image" onclick="this.style.display='none'; Codehighlighter1_183_464_Open_Text.style.display='none'; Codehighlighter1_183_464_Closed_Image.style.display='inline'; Codehighlighter1_183_464_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_183_464_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_183_464_Closed_Text.style.display='none'; Codehighlighter1_183_464_Open_Image.style.display='inline'; Codehighlighter1_183_464_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_183_464_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_183_464_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outStream&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;diffuse&nbsp;=&nbsp;lerp(diffuse,&nbsp;diffuseSpecTex</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;layer&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">.rgb,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;blendWeightStr&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);\n</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(prof</span><span style="color: #000000">-&gt;</span><span style="color: #000000">isLayerSpecularMappingEnabled())<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outStream&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;specular&nbsp;=&nbsp;lerp(specular,&nbsp;diffuseSpecTex</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;layer&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;&lt;</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;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;blendWeightStr&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);\n</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div><br />可以看出 第一张地形纹理默认是显示出来的纹理 如果后面还有其他层纹理 则和其进行lerp<img src ="http://www.cppblog.com/zhuyeaini/aggbug/196207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2012-12-13 13:07 <a href="http://www.cppblog.com/zhuyeaini/archive/2012/12/13/196207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>libnoise 的一些改动</title><link>http://www.cppblog.com/zhuyeaini/archive/2012/11/27/195720.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Tue, 27 Nov 2012 01:51:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2012/11/27/195720.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/195720.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2012/11/27/195720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/195720.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/195720.html</trackback:ping><description><![CDATA[让Ogre的地形能自动产生连续随机高度的方法 用到libnoise 发现其生成函数似乎有些不合适<br />对其实用工具的一些改动
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;NoiseMapBuilderPlane::Build&nbsp;()<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_40_1428_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_1428_Open_Text.style.display='none'; Codehighlighter1_40_1428_Closed_Image.style.display='inline'; Codehighlighter1_40_1428_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_40_1428_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_40_1428_Closed_Text.style.display='none'; Codehighlighter1_40_1428_Open_Image.style.display='inline'; Codehighlighter1_40_1428_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_40_1428_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_40_1428_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;m_upperXBound&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;m_lowerXBound<br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;m_upperZBound&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;m_lowerZBound<br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;m_destWidth&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;m_destHeight&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;m_pSourceModule&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;NULL<br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;m_pDestNoiseMap&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;NULL)&nbsp;<br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img id="Codehighlighter1_235_283_Open_Image" onclick="this.style.display='none'; Codehighlighter1_235_283_Open_Text.style.display='none'; Codehighlighter1_235_283_Closed_Image.style.display='inline'; Codehighlighter1_235_283_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_235_283_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_235_283_Closed_Text.style.display='none'; Codehighlighter1_235_283_Open_Image.style.display='inline'; Codehighlighter1_235_283_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_235_283_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_235_283_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">10</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;noise::ExceptionInvalidParam&nbsp;();<br /></span><span style="color: #008080">11</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">12</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /></span><span style="color: #008080">13</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Resize&nbsp;the&nbsp;destination&nbsp;noise&nbsp;map&nbsp;so&nbsp;that&nbsp;it&nbsp;can&nbsp;store&nbsp;the&nbsp;new&nbsp;output<br /></span><span style="color: #008080">14</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;values&nbsp;from&nbsp;the&nbsp;source&nbsp;model.</span><span style="color: #008000"><br /></span><span style="color: #008080">15</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pDestNoiseMap</span><span style="color: #000000">-&gt;</span><span style="color: #000000">SetSize&nbsp;(m_destWidth,&nbsp;m_destHeight);<br /></span><span style="color: #008080">16</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /></span><span style="color: #008080">17</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Create&nbsp;the&nbsp;plane&nbsp;model.</span><span style="color: #008000"><br /></span><span style="color: #008080">18</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;model::Plane&nbsp;planeModel;<br /></span><span style="color: #008080">19</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;planeModel.SetModule&nbsp;(</span><span style="color: #000000">*</span><span style="color: #000000">m_pSourceModule);<br /></span><span style="color: #008080">20</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /></span><span style="color: #008080">21</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;xExtent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;m_upperXBound&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;m_lowerXBound;<br /></span><span style="color: #008080">22</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;zExtent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;m_upperZBound&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;m_lowerZBound;<br /></span><span style="color: #008080">23</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;xDelta&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;xExtent&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">double</span><span style="color: #000000">)(m_destWidth</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;;<br /></span><span style="color: #008080">24</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;zDelta&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;zExtent&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">double</span><span style="color: #000000">)(m_destHeight</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">);<br /></span><span style="color: #008080">25</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;xCur&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;m_lowerXBound;<br /></span><span style="color: #008080">26</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;zCur&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;m_lowerZBound;<br /></span><span style="color: #008080">27</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /></span><span style="color: #008080">28</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Fill&nbsp;every&nbsp;point&nbsp;in&nbsp;the&nbsp;noise&nbsp;map&nbsp;with&nbsp;the&nbsp;output&nbsp;values&nbsp;from&nbsp;the&nbsp;model.</span><span style="color: #008000"><br /></span><span style="color: #008080">29</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;z&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;z&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;m_destHeight;&nbsp;z</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;<br /></span><span style="color: #008080">30</span><span style="color: #000000"><img id="Codehighlighter1_968_1424_Open_Image" onclick="this.style.display='none'; Codehighlighter1_968_1424_Open_Text.style.display='none'; Codehighlighter1_968_1424_Closed_Image.style.display='inline'; Codehighlighter1_968_1424_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_968_1424_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_968_1424_Closed_Text.style.display='none'; Codehighlighter1_968_1424_Open_Image.style.display='inline'; Codehighlighter1_968_1424_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_968_1424_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_968_1424_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">31</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(z</span><span style="color: #000000">==</span><span style="color: #000000">m_destHeight</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)<br /></span><span style="color: #008080">32</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zCur</span><span style="color: #000000">=</span><span style="color: #000000">m_upperZBound;<br /></span><span style="color: #008080">33</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">float</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pDest&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;m_pDestNoiseMap</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetSlabPtr&nbsp;(z);<br /></span><span style="color: #008080">34</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xCur&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;m_lowerXBound;<br /></span><span style="color: #008080">35</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;x&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;x&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;m_destWidth;&nbsp;x</span><span style="color: #000000">++</span><span style="color: #000000">)<br /></span><span style="color: #008080">36</span><span style="color: #000000"><img id="Codehighlighter1_1145_1336_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1145_1336_Open_Text.style.display='none'; Codehighlighter1_1145_1336_Closed_Image.style.display='inline'; Codehighlighter1_1145_1336_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1145_1336_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1145_1336_Closed_Text.style.display='none'; Codehighlighter1_1145_1336_Open_Image.style.display='inline'; Codehighlighter1_1145_1336_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1145_1336_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1145_1336_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">37</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(x</span><span style="color: #000000">==</span><span style="color: #000000">m_destWidth</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)<br /></span><span style="color: #008080">38</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xCur&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;m_upperXBound;<br /></span><span style="color: #008080">39</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">float</span><span style="color: #000000">&nbsp;finalValue;<br /></span><span style="color: #008080">40</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /></span><span style="color: #008080">41</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finalValue&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;planeModel.GetValue&nbsp;(xCur,&nbsp;zCur);<br /></span><span style="color: #008080">42</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">43</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">pDest</span><span style="color: #000000">++</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;finalValue;<br /></span><span style="color: #008080">44</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xCur&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;xDelta;<br /></span><span style="color: #008080">45</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">46</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zCur&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;zDelta;<br /></span><span style="color: #008080">47</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(m_pCallback&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;NULL)<br /></span><span style="color: #008080">48</span><span style="color: #000000"><img id="Codehighlighter1_1391_1419_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1391_1419_Open_Text.style.display='none'; Codehighlighter1_1391_1419_Closed_Image.style.display='inline'; Codehighlighter1_1391_1419_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1391_1419_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1391_1419_Closed_Text.style.display='none'; Codehighlighter1_1391_1419_Open_Image.style.display='inline'; Codehighlighter1_1391_1419_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1391_1419_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1391_1419_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">49</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pCallback&nbsp;(z);<br /></span><span style="color: #008080">50</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">51</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">52</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">53</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />实现无缝的地形高度拼接<img src ="http://www.cppblog.com/zhuyeaini/aggbug/195720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2012-11-27 09:51 <a href="http://www.cppblog.com/zhuyeaini/archive/2012/11/27/195720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ogre paging 的魔法</title><link>http://www.cppblog.com/zhuyeaini/archive/2012/11/19/195366.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Mon, 19 Nov 2012 08:52:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2012/11/19/195366.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/195366.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2012/11/19/195366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/195366.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/195366.html</trackback:ping><description><![CDATA[让子弹再飞一会<img border="0" src="http://www.cppblog.com/Emoticons/QQ/27.gif" width="20" height="20"  alt="" /><br />好的 ogre的page 本身比较复杂 层次比较多 OgreTerrain简化了其实现&nbsp;<br />如下图：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;pagedWord<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;pagedWorldSection(TerrainGroup)-&gt;Terrains<br />pageManager-&gt;pagedWord-&gt;pagedWorldSection(TerrainGroup)-&gt;Terrains<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;pagedWorldSection(TerrainGroup)-&gt;Terrains<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .....<br /><br />当然 pagedWorldSection含有page 其本身内部采用TerrainGroup的实现&nbsp;&nbsp;<br />好 继续<br />看看ogre自带的terrain例子是个好的开始<br />我开始摇滚了<br />我们要paging 于是在terrain.h中打开#define paging（去掉注释就可以了）<br />编译 运行 我假设你的ogre是启用了boost thread的<br />好 出错了吗 没有？ 靠 反正我是出错了 FileNotFound 仔细看 是没找到类似terrain0000000.dat的文件 靠靠靠<br />在其media下看看 是没有这个文件嘛<br />好的 先关掉paging 注释#define paging 编译 运行 一切OK 地形能出来 如果你保存了该地形 那么在media在会有一个类似terrain0000000000.dat的文件<br />好 让我们来分析下 <br />通过查看TerrainPagedWorldSection.cpp的代码<br />找到函数loadPage()<br />我们可以看到defineTerrain(x,y)的代码 好 这个函数会默认根据x,y产生一个文件名 然后 该terrain将会从该文件中载入地形高度等信息 如果没有这个文件 当然就报错了<br />解决思想是先看看有没有该文件 如果没有 就使用defineTerrain(x,y,0) 即默认高度为0的一个地形 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;TerrainPagedWorldSection::loadPage(PageID&nbsp;pageID,&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;forceSynchronous)<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_80_751_Open_Image" onclick="this.style.display='none'; Codehighlighter1_80_751_Open_Text.style.display='none'; Codehighlighter1_80_751_Closed_Image.style.display='inline'; Codehighlighter1_80_751_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_80_751_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_80_751_Closed_Text.style.display='none'; Codehighlighter1_80_751_Open_Image.style.display='inline'; Codehighlighter1_80_751_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_80_751_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_80_751_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">mParent</span><span style="color: #000000">-&gt;</span><span style="color: #000000">getManager()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">getPagingOperationsEnabled())<br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PageMap::iterator&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mPages.find(pageID);<br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(i&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;mPages.end())<br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img id="Codehighlighter1_226_690_Open_Image" onclick="this.style.display='none'; Codehighlighter1_226_690_Open_Text.style.display='none'; Codehighlighter1_226_690_Closed_Image.style.display='inline'; Codehighlighter1_226_690_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_226_690_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_226_690_Closed_Text.style.display='none'; Codehighlighter1_226_690_Open_Image.style.display='inline'; Codehighlighter1_226_690_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_226_690_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_226_690_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;trigger&nbsp;terrain&nbsp;load</span><span style="color: #008000"><br /></span><span style="color: #008080">10</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;x,&nbsp;y;<br /></span><span style="color: #008080">11</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;pageID&nbsp;is&nbsp;the&nbsp;same&nbsp;as&nbsp;a&nbsp;packed&nbsp;index</span><span style="color: #008000"><br /></span><span style="color: #008080">12</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup</span><span style="color: #000000">-&gt;</span><span style="color: #000000">unpackIndex(pageID,&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);<br /></span><span style="color: #008080">13</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">14</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::String&nbsp;geneFileName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mTerrainGroup</span><span style="color: #000000">-&gt;</span><span style="color: #000000">generateFilename(x,y);<br /></span><span style="color: #008080">15</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(Ogre::ResourceGroupManager::getSingleton().resourceExistsInAnyGroup(geneFileName))<br /></span><span style="color: #008080">16</span><span style="color: #000000"><img id="Codehighlighter1_524_569_Open_Image" onclick="this.style.display='none'; Codehighlighter1_524_569_Open_Text.style.display='none'; Codehighlighter1_524_569_Closed_Image.style.display='inline'; Codehighlighter1_524_569_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_524_569_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_524_569_Closed_Text.style.display='none'; Codehighlighter1_524_569_Open_Image.style.display='inline'; Codehighlighter1_524_569_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_524_569_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_524_569_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">17</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup</span><span style="color: #000000">-&gt;</span><span style="color: #000000">defineTerrain(x,&nbsp;y);<br /></span><span style="color: #008080">18</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">19</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br /></span><span style="color: #008080">20</span><span style="color: #000000"><img id="Codehighlighter1_582_631_Open_Image" onclick="this.style.display='none'; Codehighlighter1_582_631_Open_Text.style.display='none'; Codehighlighter1_582_631_Closed_Image.style.display='inline'; Codehighlighter1_582_631_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_582_631_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_582_631_Closed_Text.style.display='none'; Codehighlighter1_582_631_Open_Image.style.display='inline'; Codehighlighter1_582_631_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_582_631_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_582_631_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">21</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup</span><span style="color: #000000">-&gt;</span><span style="color: #000000">defineTerrain(x,y,</span><span style="color: #000000">0.0f</span><span style="color: #000000">);<br /></span><span style="color: #008080">22</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">23</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup</span><span style="color: #000000">-&gt;</span><span style="color: #000000">loadTerrain(x,&nbsp;y,&nbsp;forceSynchronous);<br /></span><span style="color: #008080">24</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">25</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /></span><span style="color: #008080">26</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PagedWorldSection::loadPage(pageID,&nbsp;forceSynchronous);<br /></span><span style="color: #008080">27</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">28</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span></div>再次打开#define paging<br />OK OVER<br /><br /><img src ="http://www.cppblog.com/zhuyeaini/aggbug/195366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2012-11-19 16:52 <a href="http://www.cppblog.com/zhuyeaini/archive/2012/11/19/195366.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>3D 数学</title><link>http://www.cppblog.com/zhuyeaini/archive/2012/11/09/194981.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Fri, 09 Nov 2012 08:23:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2012/11/09/194981.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/194981.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2012/11/09/194981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/194981.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/194981.html</trackback:ping><description><![CDATA[<p><span style="color: red">1.坐标系转换：</span><br />讨论范围：右手坐标系<br />坐标系A<br />坐标系B<br />仅考虑旋转：坐标系B的x y z轴在坐标系A中可表示为x' y' z'<br />则坐标系A中的一点P在坐标系B下的新坐标为P'：<br />(x'<br />&nbsp;y'&nbsp;&nbsp; * P = P'<br />&nbsp;z')<br /><br /><span style="color: red">2.关于叉积：</span><br />叉积在数学上是用右手定则来判断结果向量的<br />x轴和y轴的叉积是z 但在左手坐标系下 x轴和y轴的叉积是-z轴<br /><br /><span style="color: red">3 tangent space 本质</span><br />靠 为什么不能插表情了 <br />好 直入主题 什么是tangent space<br />本质 我们看的是本质 本质就是一坐标系 谁的坐标系 纹理空间的坐标系<br />好 现在我们要做的就是 在世界坐标系和纹理坐标系这两个坐标系之间的某种变换<br />这种变换是一个4x4矩阵，包括位移，旋转，缩放，错切等<br />特别地，当我们知道其中一个坐标系的原点以及三个坐标系的方向在另一个坐标系中的值时<br />这个变换就可以很容易的写出来：<br />假如新坐标系S'的X轴,Y轴,Z轴在原坐标系中为X'，Y'，Z'，原点不变，那么新坐标系下的A&#8217;点<br />在原坐标系下的A点为：(A'为Px' Py' Pz' 1)<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;&nbsp;&nbsp;&nbsp; 0<br />A&nbsp;&nbsp; = X' &nbsp;&nbsp;&nbsp; Y' &nbsp;&nbsp; Z' &nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp; A'<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;&nbsp; 0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 1<br /><br />假如不考虑位移 且V'为新坐标系下的某个单位方向<br /></p>
<div>那么，其在原坐标系下的方向V为：<br />V= X' &nbsp;&nbsp;&nbsp; Y' &nbsp;&nbsp; Z'&nbsp; *V'<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>现在 我们再回到原问题<br />我们知道的是：三角形面的三个顶点 顶点的纹理<br />一般来说 这个问题的变换上我们关心的是旋转 因为我们只在乎：<br />在纹理空间下的法线方向对应世界坐标系中的方向<br />所以，我们只要知道对应的U,N,V对应在世界坐标系的方向，这个变换就知道了<br />这就变成了上面的那个方向变换问题，我们通过顶点的世界坐标和纹理坐标可以<br />知道对应的在两个坐标系下的方向 其中的N在世界坐标系中的方向可以通过面法线<br />马上知道 其它两个方向通过等式就可以得出：<br />V1 = (U N V) V1'<br />V2 = (U N V) V2'<br />其中，V1为世界坐标系方向 V1'为纹理坐标系方向 可分别通过顶点坐标和纹理坐标得到<br />当然，纹理坐标的N向量为0，事实上，变换到最后用不着N法线，可参考：<br /><a href="http://www.cppblog.com/tx7do/archive/2008/12/09/68898.html"><font color="#0000ff">http://www.cppblog.com/tx7do/archive/2008/12/09/68898.html</font></a><br /><br />现在 是否明白<br />当然 原理基本上就是这样 具体情况视应用而定 <img src ="http://www.cppblog.com/zhuyeaini/aggbug/194981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2012-11-09 16:23 <a href="http://www.cppblog.com/zhuyeaini/archive/2012/11/09/194981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ogre 中的线程 workqueue</title><link>http://www.cppblog.com/zhuyeaini/archive/2012/11/09/194980.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Fri, 09 Nov 2012 08:01:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2012/11/09/194980.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/194980.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2012/11/09/194980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/194980.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/194980.html</trackback:ping><description><![CDATA[<span style="widows: 2; text-transform: none; text-indent: 0px; display: inline !important; font: 14px/21px verdana, 'courier new'; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">好 我开始ogre 线程</span><br style="widows: 2; text-transform: none; text-indent: 0px; font: 14px/21px verdana, 'courier new'; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; text-indent: 0px; display: inline !important; font: 14px/21px verdana, 'courier new'; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">怎么说呢 有个workqueue&nbsp;</span><br style="widows: 2; text-transform: none; text-indent: 0px; font: 14px/21px verdana, 'courier new'; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; text-indent: 0px; display: inline !important; font: 14px/21px verdana, 'courier new'; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">初始化时创建几个线程 这些线程监听请求队列和结果队列 请求队列里面有一些请求<span class="Apple-converted-space">&nbsp;</span></span><br style="widows: 2; text-transform: none; text-indent: 0px; font: 14px/21px verdana, 'courier new'; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; text-indent: 0px; display: inline !important; font: 14px/21px verdana, 'courier new'; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">线程函数就是不断从其请求队列里弹出一个请求来处理 处理完后把处理结果放结果队列里<br /></span>主线程会不断查看结果队列处理相应结果<br style="widows: 2; text-transform: none; text-indent: 0px; font: 14px/21px verdana, 'courier new'; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; text-indent: 0px; display: inline !important; font: 14px/21px verdana, 'courier new'; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">用户需要设置下请求和结果的回调函数 看些例子： 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">1</span><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000">WorkQueue</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;wq&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Root::getSingleton().getWorkQueue();<br /></span><span style="color: #008080">2</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mWorkQueueChannel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;wq</span><span style="color: #000000">-&gt;</span><span style="color: #000000">getChannel(</span><span style="color: #000000">"</span><span style="color: #000000">Ogre/TerrainGroup</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">3</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wq</span><span style="color: #000000">-&gt;</span><span style="color: #000000">addRequestHandler(mWorkQueueChannel,&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br /></span><span style="color: #008080">4</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wq</span><span style="color: #000000">-&gt;</span><span style="color: #000000">addResponseHandler(mWorkQueueChannel,&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">);</span></div>第二个参数就是那个继承了回调函数的类 这样 当有请求过来时 就会在后台调用RequestHandler的回调函数 完成后 把结果放<br />结果队列 主线程检测到后就调用我们设置的回调函数来处理<br />现在 假如我们要加一个请求 看些例子： 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">1</span><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;WorkQueue::RequestID&nbsp;DefaultWorkQueueBase::addRequest(uint16&nbsp;channel,&nbsp;uint16&nbsp;requestType,&nbsp;<br /></span><span style="color: #008080">2</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;Any</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;rData,&nbsp;uint8&nbsp;retryCount,&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;forceSynchronous)</span></div>注意一个channel的参数 在加回调函数和加请求时都有用到 相同channel的请求都会使用那个请求所对应的handlers<br />如果有多个handlers 那会依次调用 看下代码： 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(RequestHandlerList::reverse_iterator&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;handlers.rbegin();&nbsp;j&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;handlers.rend();&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">j)<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_95_248_Open_Image" onclick="this.style.display='none'; Codehighlighter1_95_248_Open_Text.style.display='none'; Codehighlighter1_95_248_Closed_Image.style.display='inline'; Codehighlighter1_95_248_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_95_248_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_95_248_Closed_Text.style.display='none'; Codehighlighter1_95_248_Open_Image.style.display='inline'; Codehighlighter1_95_248_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_95_248_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_95_248_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&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;threadsafe&nbsp;call&nbsp;which&nbsp;tests&nbsp;canHandleRequest&nbsp;and&nbsp;calls&nbsp;it&nbsp;if&nbsp;so&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #008000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">*</span><span style="color: #000000">j)</span><span style="color: #000000">-&gt;</span><span style="color: #000000">handleRequest(r,&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /><br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(response)<br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&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 /></span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><br /></span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />Response</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;handleRequest(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;Request</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;req,&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;WorkQueue</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;srcQ)<br /></span><span style="color: #008080">11</span><span style="color: #000000"><img id="Codehighlighter1_321_671_Open_Image" onclick="this.style.display='none'; Codehighlighter1_321_671_Open_Text.style.display='none'; Codehighlighter1_321_671_Closed_Image.style.display='inline'; Codehighlighter1_321_671_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_321_671_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_321_671_Closed_Text.style.display='none'; Codehighlighter1_321_671_Open_Image.style.display='inline'; Codehighlighter1_321_671_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_321_671_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_321_671_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&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;Read&nbsp;mutex&nbsp;so&nbsp;that&nbsp;multiple&nbsp;requests&nbsp;can&nbsp;be&nbsp;processed&nbsp;by&nbsp;the<br /></span><span style="color: #008080">13</span><span style="color: #008000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&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;same&nbsp;handler&nbsp;in&nbsp;parallel&nbsp;if&nbsp;required</span><span style="color: #008000"><br /></span><span style="color: #008080">14</span><span style="color: #008000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OGRE_LOCK_RW_MUTEX_READ(mRWMutex);<br /></span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;response&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">16</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(mHandler)<br /></span><span style="color: #008080">17</span><span style="color: #000000"><img id="Codehighlighter1_524_645_Open_Image" onclick="this.style.display='none'; Codehighlighter1_524_645_Open_Text.style.display='none'; Codehighlighter1_524_645_Closed_Image.style.display='inline'; Codehighlighter1_524_645_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_524_645_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_524_645_Closed_Text.style.display='none'; Codehighlighter1_524_645_Open_Image.style.display='inline'; Codehighlighter1_524_645_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_524_645_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_524_645_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">18</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&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">if</span><span style="color: #000000">&nbsp;(mHandler</span><span style="color: #000000">-&gt;</span><span style="color: #000000">canHandleRequest(req,&nbsp;srcQ))<br /></span><span style="color: #008080">19</span><span style="color: #000000"><img id="Codehighlighter1_579_639_Open_Image" onclick="this.style.display='none'; Codehighlighter1_579_639_Open_Text.style.display='none'; Codehighlighter1_579_639_Closed_Image.style.display='inline'; Codehighlighter1_579_639_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_579_639_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_579_639_Closed_Text.style.display='none'; Codehighlighter1_579_639_Open_Image.style.display='inline'; Codehighlighter1_579_639_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_579_639_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_579_639_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">20</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mHandler</span><span style="color: #000000">-&gt;</span><span style="color: #000000">handleRequest(req,&nbsp;srcQ);<br /></span><span style="color: #008080">21</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">22</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">23</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;response;<br /></span><span style="color: #008080">24</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>每次处理请求之前 会调用canHandleRequest()查看是否能用该handler处理 当然 只要返回一个结果 后续的handler就不处理了<br />基本上就是这样子 GoodLuck<br /><br /></span><img src ="http://www.cppblog.com/zhuyeaini/aggbug/194980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2012-11-09 16:01 <a href="http://www.cppblog.com/zhuyeaini/archive/2012/11/09/194980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二叉树 动态规划  回溯算法</title><link>http://www.cppblog.com/zhuyeaini/archive/2012/06/14/118969.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Thu, 14 Jun 2012 09:20:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2012/06/14/118969.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/118969.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2012/06/14/118969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/118969.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/118969.html</trackback:ping><description><![CDATA[算法博大精深 平时就多积累点<br />1.二叉树的非递归遍历<br />*先序<br />思想：a.根树进栈；<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b.只要栈不为空 得到栈顶节点 开始循环遍历其左树 同时访问并进栈 一直到左树为空；<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.出栈直到找到有右子树的节点；<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d.访问该右子树并进栈；<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.转到b步骤<br />大概如下：<br />
<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: #0000ff;">void</span><span style="color: #000000;">&nbsp;preOrderTravel(BinTree</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;t)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;std::stack</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">BinTree</span><span style="color: #000000;">*</span><span style="color: #000000;">,std::list</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">BinTree</span><span style="color: #000000;">*&gt;&gt;</span><span style="color: #000000;">&nbsp;s;<br />&nbsp;&nbsp;&nbsp;&nbsp;BinTree</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;p</span><span style="color: #000000;">=</span><span style="color: #000000;">NULL;<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;">t)&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">t</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">data</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;s.push(t);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">s.empty())<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="color: #000000;">=</span><span style="color: #000000;">s.top();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">left)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">left</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">data</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">left);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="color: #000000;">=</span><span style="color: #000000;">p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">left;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="color: #000000;">=</span><span style="color: #000000;">s.pop();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">(p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">right)</span><span style="color: #000000;">&amp;&amp;!</span><span style="color: #000000;">s.empty())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="color: #000000;">=</span><span style="color: #000000;">s.pop();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">right)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">right</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">data</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(p</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">right);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div>
<br /><img src ="http://www.cppblog.com/zhuyeaini/aggbug/118969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2012-06-14 17:20 <a href="http://www.cppblog.com/zhuyeaini/archive/2012/06/14/118969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tcp nagle算法</title><link>http://www.cppblog.com/zhuyeaini/archive/2011/12/22/162616.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Thu, 22 Dec 2011 13:46:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2011/12/22/162616.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/162616.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2011/12/22/162616.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/162616.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/162616.html</trackback:ping><description><![CDATA[好 这tcp什么的确实比较复杂<br />知道多少写多少<br />nagle算法是什么：它的目标是防止大量小数据包的出现而影响网络效率<br />实际实现上有两种：1网络上的空闲段限制 2发送数据包的限制<br />如何做的：如果网络上有超过上面两种的限制 那么将会累积后面的数据包直至网络空闲时发送<br />看几个例子<br />平常 nagle算法平时并不怎么影响tcp <br />比如：A发送N个数据到B B接受N个数据 并发送ack给A A继续下一次发送 假如A处理比较慢 这时B会累积后面的数据包直至收到ack后一次性发送<br />但是：假如A想要发送N+K个数据到B 首先发送N个数据 B接受N+K个数据 这时 A因为nagle算法不会继续发送直到收到ACK<br />但B因为还在等待后K个数据而不会发送ACK 这时通信效率比较低下<br />因此 具体实现看应用程序吧<br />思想就是如此 介绍一个比较好的游戏网络库：<br />里面有nagle算法的应用 还有设置缓冲区为0的操作<br /><div><a href="http://code.google.com/p/yynetsdk/">http://code.google.com/p/yynetsdk/</a></div><img src ="http://www.cppblog.com/zhuyeaini/aggbug/162616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2011-12-22 21:46 <a href="http://www.cppblog.com/zhuyeaini/archive/2011/12/22/162616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bullet 中的stepSimulation和MotionState</title><link>http://www.cppblog.com/zhuyeaini/archive/2011/12/10/161862.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Sat, 10 Dec 2011 02:27:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2011/12/10/161862.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/161862.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2011/12/10/161862.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/161862.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/161862.html</trackback:ping><description><![CDATA[<div><span style="widows: 2; text-transform: none; text-indent: 0px; font: 14px/21px verdana,'courier new'; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px">最近看bullet，有源码就是看得明白点，有时候文档真的是无法说清的<br />就比如这个函数：<br /></span>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<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: #0000ff">virtual</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;stepSimulation(&nbsp;btScalar&nbsp;timeStep,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;maxSubSteps</span><span style="color: #000000">=</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;btScalar&nbsp;fixedTimeStep</span><span style="color: #000000">=</span><span style="color: #000000">btScalar(</span><span style="color: #000000">1</span><span style="color: #000000">.)</span><span style="color: #000000">/</span><span style="color: #000000">btScalar(</span><span style="color: #000000">60</span><span style="color: #000000">.));</span></div>非要看看源码才行的<br />默认情况下，最大执行步骤为1，固定步长为1/60，第一个参数为实际步长<br />这是一个放大的时间步长：0~2/60，物体在0时间为A状态，1/60为B状态，2/60为C状态<br />物体状态A &nbsp; &nbsp; &nbsp; &nbsp; 物体状态B&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 物体状态C &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />0----------------1/60--------------2/60<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -timeStep <span style="color: red">//在0~1/60以内，bullet并不执行物理模拟，剩余时间motionstate会进行进一步模拟</span><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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -timeStep<span style="color: red"> //在1/60~2/60以内，bullet执行一个物理模拟，bullet中物体处于B状态，但实际上物体应该还要在后面一个时间点，于是剩<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;&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; 余时间为总时间减去一个固定步长的时间，motionstate会根据这个剩余时间基于状态B进行进一步模拟<br /></span>所谓进一步模拟 看代码 注意函数中的timeStep参数 该参数就是那个剩余时间：
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;integrateTransform(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;btTransform</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;curTrans,</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;btVector3</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;linvel,</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;btVector3</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;angvel,btScalar&nbsp;timeStep,btTransform</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;predictedTransform)<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_159_1368_Open_Image" onclick="this.style.display='none'; Codehighlighter1_159_1368_Open_Text.style.display='none'; Codehighlighter1_159_1368_Closed_Image.style.display='inline'; Codehighlighter1_159_1368_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_159_1368_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_159_1368_Closed_Text.style.display='none'; Codehighlighter1_159_1368_Open_Image.style.display='inline'; Codehighlighter1_159_1368_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_159_1368_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_159_1368_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;predictedTransform.setOrigin(curTrans.getOrigin()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;linvel&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;timeStep);<br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;QUATERNION_DERIVATIVE</span><span style="color: #008000"><br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;QUATERNION_DERIVATIVE<br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btQuaternion&nbsp;predictedOrn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;curTrans.getRotation();<br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;predictedOrn&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;(angvel&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;predictedOrn)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;(timeStep&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;btScalar(</span><span style="color: #000000">0.5</span><span style="color: #000000">));<br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;predictedOrn.normalize();<br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#else</span><span style="color: #000000"><br /></span><span style="color: #008080">10</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Exponential&nbsp;map<br /></span><span style="color: #008080">11</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">google&nbsp;for&nbsp;"Practical&nbsp;Parameterization&nbsp;of&nbsp;Rotations&nbsp;Using&nbsp;the&nbsp;Exponential&nbsp;Map",&nbsp;F.&nbsp;Sebastian&nbsp;Grassia</span><span style="color: #008000"><br /></span><span style="color: #008080">12</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000"><br /></span><span style="color: #008080">13</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btVector3&nbsp;axis;<br /></span><span style="color: #008080">14</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btScalar&nbsp;&nbsp;&nbsp;&nbsp;fAngle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;angvel.length();&nbsp;<br /></span><span style="color: #008080">15</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">limit&nbsp;the&nbsp;angular&nbsp;motion</span><span style="color: #008000"><br /></span><span style="color: #008080">16</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(fAngle</span><span style="color: #000000">*</span><span style="color: #000000">timeStep&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;ANGULAR_MOTION_THRESHOLD)<br /></span><span style="color: #008080">17</span><span style="color: #000000"><img id="Codehighlighter1_722_775_Open_Image" onclick="this.style.display='none'; Codehighlighter1_722_775_Open_Text.style.display='none'; Codehighlighter1_722_775_Closed_Image.style.display='inline'; Codehighlighter1_722_775_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_722_775_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_722_775_Closed_Text.style.display='none'; Codehighlighter1_722_775_Open_Image.style.display='inline'; Codehighlighter1_722_775_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_722_775_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_722_775_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">18</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fAngle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ANGULAR_MOTION_THRESHOLD&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;timeStep;<br /></span><span style="color: #008080">19</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">20</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /></span><span style="color: #008080">21</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;fAngle&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;btScalar(</span><span style="color: #000000">0.001</span><span style="color: #000000">)&nbsp;)<br /></span><span style="color: #008080">22</span><span style="color: #000000"><img id="Codehighlighter1_814_982_Open_Image" onclick="this.style.display='none'; Codehighlighter1_814_982_Open_Text.style.display='none'; Codehighlighter1_814_982_Closed_Image.style.display='inline'; Codehighlighter1_814_982_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_814_982_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_814_982_Closed_Text.style.display='none'; Codehighlighter1_814_982_Open_Image.style.display='inline'; Codehighlighter1_814_982_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_814_982_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_814_982_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">23</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;use&nbsp;Taylor's&nbsp;expansions&nbsp;of&nbsp;sync&nbsp;function</span><span style="color: #008000"><br /></span><span style="color: #008080">24</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;axis&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;angvel</span><span style="color: #000000">*</span><span style="color: #000000">(&nbsp;btScalar(</span><span style="color: #000000">0.5</span><span style="color: #000000">)</span><span style="color: #000000">*</span><span style="color: #000000">timeStep</span><span style="color: #000000">-</span><span style="color: #000000">(timeStep</span><span style="color: #000000">*</span><span style="color: #000000">timeStep</span><span style="color: #000000">*</span><span style="color: #000000">timeStep)</span><span style="color: #000000">*</span><span style="color: #000000">(btScalar(</span><span style="color: #000000">0.020833333333</span><span style="color: #000000">))</span><span style="color: #000000">*</span><span style="color: #000000">fAngle</span><span style="color: #000000">*</span><span style="color: #000000">fAngle&nbsp;);<br /></span><span style="color: #008080">25</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">26</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br /></span><span style="color: #008080">27</span><span style="color: #000000"><img id="Codehighlighter1_993_1102_Open_Image" onclick="this.style.display='none'; Codehighlighter1_993_1102_Open_Text.style.display='none'; Codehighlighter1_993_1102_Closed_Image.style.display='inline'; Codehighlighter1_993_1102_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_993_1102_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_993_1102_Closed_Text.style.display='none'; Codehighlighter1_993_1102_Open_Image.style.display='inline'; Codehighlighter1_993_1102_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_993_1102_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_993_1102_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">28</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;sync(fAngle)&nbsp;=&nbsp;sin(c*fAngle)/t</span><span style="color: #008000"><br /></span><span style="color: #008080">29</span><span style="color: #008000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;axis&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;angvel</span><span style="color: #000000">*</span><span style="color: #000000">(&nbsp;btSin(btScalar(</span><span style="color: #000000">0.5</span><span style="color: #000000">)</span><span style="color: #000000">*</span><span style="color: #000000">fAngle</span><span style="color: #000000">*</span><span style="color: #000000">timeStep)</span><span style="color: #000000">/</span><span style="color: #000000">fAngle&nbsp;);<br /></span><span style="color: #008080">30</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">31</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btQuaternion&nbsp;dorn&nbsp;(axis.x(),axis.y(),axis.z(),btCos(&nbsp;fAngle</span><span style="color: #000000">*</span><span style="color: #000000">timeStep</span><span style="color: #000000">*</span><span style="color: #000000">btScalar(</span><span style="color: #000000">0.5</span><span style="color: #000000">)&nbsp;));<br /></span><span style="color: #008080">32</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btQuaternion&nbsp;orn0&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;curTrans.getRotation();<br /></span><span style="color: #008080">33</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /></span><span style="color: #008080">34</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btQuaternion&nbsp;predictedOrn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dorn&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;orn0;<br /></span><span style="color: #008080">35</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;predictedOrn.normalize();<br /></span><span style="color: #008080">36</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#endif</span><span style="color: #000000"><br /></span><span style="color: #008080">37</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;predictedTransform.setRotation(predictedOrn);<br /></span><span style="color: #008080">38</span><span style="color: #000000"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div><br /><br />所以，motionstate总是以插值的形态出现，代表物体的实际运动位置，可以用在实际游戏模拟中<br />靠，现在应该清楚的吧，如果还不清楚，请看源代码<br />到点了 请女人吃饭去了 附上相关代码：<br /><br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<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">int</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;btDiscreteDynamicsWorld::stepSimulation(&nbsp;btScalar&nbsp;timeStep,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;maxSubSteps,&nbsp;btScalar&nbsp;fixedTimeStep)<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;startProfiling(timeStep);<br /></span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BT_PROFILE(</span><span style="color: #000000">"</span><span style="color: #000000">stepSimulation</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">&nbsp;6</span>&nbsp;<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">int</span><span style="color: #000000">&nbsp;numSimulationSubSteps&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;8</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(maxSubSteps)<br /></span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">fixed&nbsp;timestep&nbsp;with&nbsp;interpolation</span><span style="color: #008000"><br /></span><span style="color: #008080">12</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_localTime&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;timeStep;<br /></span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(m_localTime&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;fixedTimeStep)<br /></span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numSimulationSubSteps&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">(&nbsp;m_localTime&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;fixedTimeStep);<br /></span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_localTime&nbsp;</span><span style="color: #000000">-=</span><span style="color: #000000">&nbsp;numSimulationSubSteps&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;fixedTimeStep;<br /></span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br /></span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">variable&nbsp;timestep</span><span style="color: #008000"><br /></span><span style="color: #008080">21</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fixedTimeStep&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;timeStep;<br /></span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_localTime&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;timeStep;<br /></span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(btFuzzyZero(timeStep))<br /></span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numSimulationSubSteps&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">26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxSubSteps&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">27</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br /></span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numSimulationSubSteps&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">30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxSubSteps&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">31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000"><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">process&nbsp;some&nbsp;debugging&nbsp;flags</span><span style="color: #008000"><br /></span><span style="color: #008080">35</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(getDebugDrawer())<br /></span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080">37</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btIDebugDraw</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;debugDrawer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getDebugDrawer&nbsp;();<br /></span><span style="color: #008080">38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gDisableDeactivation&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(debugDrawer</span><span style="color: #000000">-&gt;</span><span style="color: #000000">getDebugMode()&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;btIDebugDraw::DBG_NoDeactivation)&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">39</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">40</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(numSimulationSubSteps)<br /></span><span style="color: #008080">41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080">42</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">43</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">clamp&nbsp;the&nbsp;number&nbsp;of&nbsp;substeps,&nbsp;to&nbsp;prevent&nbsp;simulation&nbsp;grinding&nbsp;spiralling&nbsp;down&nbsp;to&nbsp;a&nbsp;halt</span><span style="color: #008000"><br /></span><span style="color: #008080">44</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;clampedSimulationSteps&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(numSimulationSubSteps&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;maxSubSteps)</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;maxSubSteps&nbsp;:&nbsp;numSimulationSubSteps;<br /></span><span style="color: #008080">45</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">46</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saveKinematicState(fixedTimeStep</span><span style="color: #000000">*</span><span style="color: #000000">clampedSimulationSteps);<br /></span><span style="color: #008080">47</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">48</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;applyGravity();<br /></span><span style="color: #008080">49</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">50</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">51</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">52</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">clampedSimulationSteps;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br /></span><span style="color: #008080">53</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080">54</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;internalSingleStepSimulation(fixedTimeStep);<br /></span><span style="color: #008080">55</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;synchronizeMotionStates();<br /></span><span style="color: #008080">56</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">57</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">58</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br /></span><span style="color: #008080">59</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080">60</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;synchronizeMotionStates();<br /></span><span style="color: #008080">61</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">62</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">63</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;clearForces();<br /></span><span style="color: #008080">64</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">65</span>&nbsp;<span style="color: #000000">#ifndef&nbsp;BT_NO_PROFILE<br /></span><span style="color: #008080">66</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CProfileManager::Increment_Frame_Counter();<br /></span><span style="color: #008080">67</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">#endif</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">BT_NO_PROFILE</span><span style="color: #000000"><br /></span><span style="color: #008080">68</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">69</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;numSimulationSubSteps;<br /></span><span style="color: #008080">70</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">71</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">72</span>&nbsp;<span style="color: #000000"></span></div><br /><span style="widows: 2; text-transform: none; text-indent: 0px; font: 14px/21px verdana,'courier new'; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px"><br /></span></div><img src ="http://www.cppblog.com/zhuyeaini/aggbug/161862.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2011-12-10 10:27 <a href="http://www.cppblog.com/zhuyeaini/archive/2011/12/10/161862.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lua 中调用C函数</title><link>http://www.cppblog.com/zhuyeaini/archive/2011/04/27/145149.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Wed, 27 Apr 2011 07:48:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2011/04/27/145149.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/145149.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2011/04/27/145149.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/145149.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/145149.html</trackback:ping><description><![CDATA[<p>好的 现在讲讲Lua中调用C函数<br>怎么调用？<img height=20 src="http://www.cppblog.com/Emoticons/QQ/icon18.gif" width=25 border=0><br>extern "C"<br>{<br>#include &lt;lua.h&gt;<br>#include &lt;lauxlib.h&gt;</p>
<p>#pragma&nbsp; comment(lib,"lua51.lib")</p>
<p>&nbsp;static int l_test(lua_State* l)<br>&nbsp;{<br>&nbsp;&nbsp;double d=lua_tonumber(l,1);<br>&nbsp;&nbsp;lua_pushnumber(l,d*d);<br>&nbsp;&nbsp;return 1;<br>&nbsp;}</p>
<p>&nbsp;__declspec(dllexport) int luaopen_test(lua_State* l)<br>&nbsp;{<br>&nbsp;&nbsp;static const luaL_reg maps[]={<br>&nbsp;&nbsp;&nbsp;{"test",l_test},<br>&nbsp;&nbsp;&nbsp;{NULL,NULL}<br>&nbsp;&nbsp;};<br>&nbsp;&nbsp;luaL_register(l,"mytest",maps);<br>&nbsp;&nbsp;return 1;<br>&nbsp;}<br>}<br>参数在lua中给出，而在c函数中，通过取栈操作得到参数，c经过处理，把结果压入栈中，ok<br><br>要点有二：<br>1. __declspec(dllexport) 要有<br>2. luaopen_模块名，假设生成的dll叫test.dll，那么函数名就叫luaopen_test<br><br>好 就是这样 谢谢</p>
<img src ="http://www.cppblog.com/zhuyeaini/aggbug/145149.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2011-04-27 15:48 <a href="http://www.cppblog.com/zhuyeaini/archive/2011/04/27/145149.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>boost pool object_pool</title><link>http://www.cppblog.com/zhuyeaini/archive/2011/04/26/145075.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Tue, 26 Apr 2011 10:18:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2011/04/26/145075.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/145075.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2011/04/26/145075.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/145075.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/145075.html</trackback:ping><description><![CDATA[<p>&nbsp;</p><div>好 看了一天的object_pool &nbsp;容易嘛 &nbsp; 现在总结下</div><div>这个 什么的 继承自pool&nbsp;</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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">class</span>&nbsp;pool<br />{<br />&nbsp;&nbsp;&nbsp;details::PODptr&lt;size_type&gt;&nbsp;list;<br />}</div></div><div>这里list干什么的呢 如下所示 保存着分配的所有数据块&nbsp;</div><div>其中的sz不仅仅包含数据本身的大小 还包括下个数据块的指针和大小</div><div>所以 整个数据块就可以串联起来 就像名字list一样</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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">class</span>&nbsp;PODptr<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*&nbsp;ptr;<br />&nbsp;&nbsp;&nbsp;&nbsp;size_type&nbsp;sz;<br />}</div></div><div>一个pool的内存就在ptr里面了 一开始空的</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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;size_type&nbsp;partition_size&nbsp;=&nbsp;alloc_size();<br /><span style="color: #008080; ">2</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;size_type&nbsp;POD_size&nbsp;=&nbsp;next_size&nbsp;*&nbsp;partition_size&nbsp;+<br /><span style="color: #008080; ">3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;details::pool::ct_lcm&lt;<span style="color: #0000FF; ">sizeof</span>(size_type),&nbsp;<span style="color: #0000FF; ">sizeof</span>(<span style="color: #0000FF; ">void</span>&nbsp;*)&gt;::value&nbsp;+&nbsp;<span style="color: #0000FF; ">sizeof</span>(size_type);<br /><span style="color: #008080; ">4</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;ptr&nbsp;=&nbsp;UserAllocator::malloc(POD_size);<br /><span style="color: #008080; ">5</span>&nbsp;&nbsp;&nbsp;next_size&nbsp;&lt;&lt;=&nbsp;1;</div></div><div>在这里就分配内存了 第一次next_size=32 然后是64,128...partition_size 大概就是我们要分配类型的字节大小</div><div>后面两个值details::pool::ct_lcm&lt;sizeof(size_type), sizeof(void *)&gt;::value和sizeof(size_type)</div><div>&nbsp;一个是指向下个内存块的指针，一个是下个内存块的大小</div><div>一般都为4个字节，加起来就是8个字节，</div><div>所以其总大小为数据块大小+8个字节</div><div>好 下面就是比较关键的 就是对这块内存块的管理&nbsp;</div><div>好 pool继承自simple_segregated_storage</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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">class</span>&nbsp;simple_segregated_storage<br />{<br />&nbsp;<span style="color: #0000FF; ">protected</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*&nbsp;first;<br />}</div></div><div>然后嘛 first在一开始内存分配的时候就指向内存块的开始&nbsp;</div><div>并且采用boost大无上手法可以让内存块串联起来 不管怎么样 nextof(first)就是下一个我们的类型块，</div><div>一开始不是分配了32块那样的类型嘛，值得注意的是，</div><div>first始终是指向第一个空闲块的，每次要分配一个类型块时，取first值，返回给请求者，然后first=nextof(first)</div><div>好 那么释放怎么做的呢 事实上很简单 即把要释放的块重新用first回收起来 并且是有序的串起来 即按照内存从小到大用next()</div><div>串起来 这样有啥好处呢 在~object_pool发生时，比较方便快速，具体看代码就是了 为了每次在destroy()时保持有序：<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;1</span>&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;ordered_free(<span style="color: #0000FF; ">void</span>&nbsp;*&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;chunk)<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;This&nbsp;(slower)&nbsp;implementation&nbsp;of&nbsp;'free'&nbsp;places&nbsp;the&nbsp;memory<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;back&nbsp;in&nbsp;the&nbsp;list&nbsp;in&nbsp;its&nbsp;proper&nbsp;order.<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Find&nbsp;where&nbsp;"chunk"&nbsp;goes&nbsp;in&nbsp;the&nbsp;free&nbsp;list</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;loc&nbsp;=&nbsp;find_prev(chunk);<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Place&nbsp;either&nbsp;at&nbsp;beginning&nbsp;or&nbsp;in&nbsp;middle/end</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(loc&nbsp;==&nbsp;0)<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(chunk);<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nextof(chunk)&nbsp;=&nbsp;nextof(loc);<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nextof(loc)&nbsp;=&nbsp;chunk;<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;}<br /><span style="color: #008080; ">16</span>&nbsp;template&nbsp;&lt;typename&nbsp;SizeType&gt;<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*&nbsp;simple_segregated_storage&lt;SizeType&gt;::find_prev(<span style="color: #0000FF; ">void</span>&nbsp;*&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;ptr)<br /><span style="color: #008080; ">18</span>&nbsp;{<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Handle&nbsp;border&nbsp;case</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(first&nbsp;==&nbsp;0&nbsp;||&nbsp;std::greater&lt;<span style="color: #0000FF; ">void</span>&nbsp;*&gt;()(first,&nbsp;ptr))<br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*&nbsp;iter&nbsp;=&nbsp;first;<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(<span style="color: #0000FF; ">true</span>)<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;if&nbsp;we're&nbsp;about&nbsp;to&nbsp;hit&nbsp;the&nbsp;end&nbsp;or<br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;if&nbsp;we've&nbsp;found&nbsp;where&nbsp;"ptr"&nbsp;goes</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(nextof(iter)&nbsp;==&nbsp;0&nbsp;||&nbsp;std::greater&lt;<span style="color: #0000FF; ">void</span>&nbsp;*&gt;()(nextof(iter),&nbsp;ptr))<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;iter;<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iter&nbsp;=&nbsp;nextof(iter);<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">31</span>&nbsp;}</div></div><div>很容易构造一种最坏复杂度的情况：</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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;N&nbsp;=&nbsp;10000;<br /><span style="color: #008080; ">2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sample*&nbsp;a[N];<br /><span style="color: #008080; ">3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(&nbsp;i=0;&nbsp;i&lt;N;&nbsp;++i)<br /><span style="color: #008080; ">4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i]&nbsp;=&nbsp;pool.cunstruct();<br /><span style="color: #008080; ">5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i=0;&nbsp;i&lt;N;&nbsp;++i)<br /><span style="color: #008080; ">6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pool.destory(&nbsp;a[i]&nbsp;);</div></div><div>在这种情况下，每次的find_prev会耗费O(N)时间，需要注意下。。。</div><p>&nbsp;</p><img src ="http://www.cppblog.com/zhuyeaini/aggbug/145075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2011-04-26 18:18 <a href="http://www.cppblog.com/zhuyeaini/archive/2011/04/26/145075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ogre 渲染流程</title><link>http://www.cppblog.com/zhuyeaini/archive/2011/01/08/138159.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Sat, 08 Jan 2011 10:31:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2011/01/08/138159.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/138159.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2011/01/08/138159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/138159.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/138159.html</trackback:ping><description><![CDATA[<br /><br />ogre渲染流程：<br />&nbsp;&nbsp;&nbsp; <span style="color: red;">1. _fireFrameStarted()</span><br />&nbsp;&nbsp;&nbsp; 2. 按某种优先级更新所有渲染目标<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.1 <span style="color: #b718ff;">firePreUpdate()</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2 更新所有视口<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.1 <span style="color: #ff9308;">fireViewportPreUpdate()</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2 场景管理的渲染函数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.1 更新阴影<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.2 更新动画<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.3 更新节点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.4 更新一些参数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.5 清空渲染队列<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.6 填充渲染队列 进行可见性判别<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.6.1 <span style="color: #3366ff;">firePreFindVisibleObjects()</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.6.2 查找可见节点并加入渲染队列<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.6.3 <span style="color: #3366ff;">firePostFindVisibleObjects()</span><br /><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000;">firePreRenderQueues();</span></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.7 依次渲染每个队列组<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.7.1 <span style="color: #dc6eec;">fireRenderQueueStarted()</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.7.2 渲染该队列组<br /><div><span style="color: #993300;">&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; fireRenderSingleObject()&nbsp;&nbsp;&nbsp;&nbsp; <div>&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;&nbsp;&nbsp; <span style="color: #ff0000;">preRender()</span><br /><span style="color: #ff0000;">&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;&nbsp;&nbsp; 渲染</span><br /><span style="color: #ff0000;">&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;&nbsp;&nbsp; postRender()</span></div></span></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.7.3 <span style="color: #dc6eec;">fireRenderQueueEnded()</span><br /><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;"> firePostRenderQueues();</span></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.3 <span style="color: #ff9308;">fireViewportPostUpdate()</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.3 <span style="color: #b718ff;">firePostUpdate()</span><br />&nbsp;&nbsp;&nbsp; <span style="color: red;">3. _fireFrameRenderingQueued()</span><br />&nbsp;&nbsp;&nbsp; 4. swapBuffer()<br />&nbsp;&nbsp;&nbsp; <span style="color: red;">5. _fireFrameEnded()<br /><br /><br /><br /><br /></span><img src ="http://www.cppblog.com/zhuyeaini/aggbug/138159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2011-01-08 18:31 <a href="http://www.cppblog.com/zhuyeaini/archive/2011/01/08/138159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>迷宫问题 回溯法</title><link>http://www.cppblog.com/zhuyeaini/archive/2010/08/12/123188.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Thu, 12 Aug 2010 08:07:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2010/08/12/123188.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/123188.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2010/08/12/123188.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/123188.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/123188.html</trackback:ping><description><![CDATA[<img alt="" src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/shiye.png" height="256" width="256" /><br /><br />如图，有如此的一个迷宫，要从起点到终点，紫色方格是障碍物方格，不可通行。<br />求：<br />找出一条从起点到终点的道路，在到达终点之前，必须走遍所有可通行的方格一次，而且到达终点的<br />转弯次数要最少，每改变一次前进方向算作转弯一次。<br /><br />经典的回溯法解题思路：<br />
<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: #008000;">//</span><span style="color: #008000;">方格m*n,k个障碍物</span><span style="color: #008000;"><br /></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;m,n,k;<br /></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">目标方格</span><span style="color: #008000;"><br /></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;dx,dy;<br /></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">当前拐弯数，最右拐弯数</span><span style="color: #008000;"><br /></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;dirs,best;<br /></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">总共找到几条路线</span><span style="color: #008000;"><br /></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;count;<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;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;search(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;depth,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;x,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;y,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;di)<br /></span><span style="color: #008080;">11</span>&nbsp;<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;">if</span><span style="color: #000000;">(depth</span><span style="color: #000000;">==</span><span style="color: #000000;">m</span><span style="color: #000000;">*</span><span style="color: #000000;">n</span><span style="color: #000000;">-</span><span style="color: #000000;">k&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;dx</span><span style="color: #000000;">==</span><span style="color: #000000;">x&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;dy</span><span style="color: #000000;">==</span><span style="color: #000000;">y&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;)<br /></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">找到一条路线</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;&nbsp;&nbsp;&nbsp;&nbsp;count</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(dirs</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">best)<br /></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;best</span><span style="color: #000000;">=</span><span style="color: #000000;">dirs;<br /></span><span style="color: #008080;">20</span>&nbsp;<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;">保存最优路径，即标记不为0的方格</span><span style="color: #008000;"><br /></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;save();<br /></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br /></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br /></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">8</span><span style="color: #000000;">;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br /></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(没有出边界&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;该方格未行走过)<br /></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;board[x</span><span style="color: #000000;">+</span><span style="color: #000000;">dx[i]][y</span><span style="color: #000000;">+</span><span style="color: #000000;">dy[i]]</span><span style="color: #000000;">=</span><span style="color: #000000;">depth</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(di</span><span style="color: #000000;">!=</span><span style="color: #000000;">i)&nbsp;dirs</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;search(depth</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">,x</span><span style="color: #000000;">+</span><span style="color: #000000;">dx[i],y</span><span style="color: #000000;">+</span><span style="color: #000000;">dy[i],i);<br /></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&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;">恢复转弯次数</span><span style="color: #008000;"><br /></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(di</span><span style="color: #000000;">!=</span><span style="color: #000000;">i)&nbsp;dirs</span><span style="color: #000000;">--</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&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;">恢复未行走标记</span><span style="color: #008000;"><br /></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;board[x</span><span style="color: #000000;">+</span><span style="color: #000000;">dx[i]][y</span><span style="color: #000000;">+</span><span style="color: #000000;">dy[i]]</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">}</span></div>
<br />看上去挺复杂的问题，用回溯法可以很好地解决，还可以加入剪枝函数，即检测当前dirs是否已经大于best，如果<br />是的话，直接返回。<br /><img src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/emkulou.gif" align="absmiddle" border="0"  alt="" /><br /><img src ="http://www.cppblog.com/zhuyeaini/aggbug/123188.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2010-08-12 16:07 <a href="http://www.cppblog.com/zhuyeaini/archive/2010/08/12/123188.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模板类的构造函数 =操作符重载</title><link>http://www.cppblog.com/zhuyeaini/archive/2010/08/09/122793.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Mon, 09 Aug 2010 08:23:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2010/08/09/122793.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/122793.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2010/08/09/122793.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/122793.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/122793.html</trackback:ping><description><![CDATA[<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: #000000;">template</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;T</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;ye<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ye(){cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">I'm&nbsp;ye()</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;}<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<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: #008000;">//</span><span style="color: #008000;">-------------------------------</span><span style="color: #008000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //普通拷贝构造函数<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ye(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;ye</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">T</span><span style="color: #000000;">&gt;&amp;</span><span style="color: #000000;">y){cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">I'm&nbsp;ye(const&nbsp;ye&lt;T&gt;&amp;)</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #579817;">//模板拷贝构造函数</span><br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;template</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;K</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ye(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;ye</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">K</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">){cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">I'm&nbsp;template&lt;class&nbsp;K&gt;ye(const&nbsp;ye&lt;K&gt;&amp;)</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;}<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">-------------------------------<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #008000;"><br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">-------------------------------</span><span style="color: #008000;"><br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ye(T</span><span style="color: #000000;">*</span><span style="color: #000000;">)<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">I'm&nbsp;ye(T*)</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;template</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Y</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ye(Y</span><span style="color: #000000;">*</span><span style="color: #000000;">){cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">I'm&nbsp;template&lt;class&nbsp;Y&gt;&nbsp;ye(Y*)</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;}<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">-------------------------------<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #008000;"><br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">-------------------------------</span><span style="color: #008000;"><br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;"></span><span style="color: #008000;">ye&amp;&nbsp;operator=(const&nbsp;ye&lt;T&gt;&nbsp;&amp;)<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;"I'm&nbsp;operator=(const&nbsp;ye&lt;T&gt;&amp;)"&lt;&lt;endl;<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;*this;<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #008000;"></span><span style="color: #000000;"><br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;"></span><span style="color: #008000;">template&lt;class&nbsp;N&gt;<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;ye&amp;&nbsp;operator=(const&nbsp;ye&lt;N&gt;&nbsp;&amp;)<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;"I'm&nbsp;template&lt;class&nbsp;N&gt;&nbsp;operator=(const&nbsp;ye&lt;N&gt;&amp;)"&lt;&lt;endl;<br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;*this;<br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #008000;"></span><span style="color: #000000;"><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;">-------------------------------</span><span style="color: #008000;"><br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;"><br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">};</span></div>
<br>上面是一个典型的模板类 首先看构造函数<br>当我们输入<br>ye&lt;int&gt; y;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #579817;">//输出</span><span style="color: #000000;"><span style="color: #579817;">I'm&nbsp;ye()</span><br>ye&lt;int&gt; k=y;或ye&lt;int&gt; k(y);<span style="color: #579817;">//输出</span></span><span style="color: #579817;"></span><span style="color: #000000;"><span style="color: #579817;">I'm&nbsp;ye(const&nbsp;ye&lt;T&gt;&amp;)</span><br>ye&lt;float&gt; f=k;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #579817;">//输出</span></span><span style="color: #579817;">I'm&nbsp;template&lt;class&nbsp;K&gt;ye(const&nbsp;ye&lt;K&gt;&amp;)</span><span style="color: #000000;"><br>到此 没什么问题<br><br>现在注释掉两个拷贝构造函数<br>输入<br>ye&lt;int&gt; y;&nbsp;&nbsp; <span style="color: #579817;">//输出</span></span><span style="color: #579817;">I'm&nbsp;ye()</span><br><span style="color: #000000;">ye&lt;int&gt; k=y; <span style="color: #579817;">//无输出，使用默认的构造函数<br></span></span><br>清空 输入<br>ye&lt;int&gt; y;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000000;"><span style="color: #579817;"></span></span><span style="color: #579817;"></span><br>ye&lt;float&gt; k=y; <span style="color: #9c3f3f;">//会出现编译错误</span><br><br>清空 输入<br>ye&lt;int&gt; y;<br>ye&lt;int&gt; k;<br>y=k;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #5a8c53;">//</span><span style="color: #008000;">I'm&nbsp;operator=(const&nbsp;ye&lt;T&gt;&amp;)</span><br>ye&lt;float&gt; h;<br>h=k;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #5a8c53;">//</span><span style="color: #008000;">I'm&nbsp;template&lt;class&nbsp;N&gt;&nbsp;operator=(const&nbsp;ye&lt;N&gt;&amp;)</span><br><br>如果把操作符重载函数注释掉<br>当出现y=k时 就会调用相应默认的赋值函数<br>当出现h=k时 就会出现编译错误<br><br><br> <img src ="http://www.cppblog.com/zhuyeaini/aggbug/122793.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2010-08-09 16:23 <a href="http://www.cppblog.com/zhuyeaini/archive/2010/08/09/122793.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c# 材质编辑器</title><link>http://www.cppblog.com/zhuyeaini/archive/2010/08/08/122653.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Sun, 08 Aug 2010 06:55:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2010/08/08/122653.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/122653.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2010/08/08/122653.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/122653.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/122653.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 最近在实现一个材质编辑器 主体的功能代码都实验完毕 主要的难点有二<br>&nbsp;&nbsp;&nbsp; 1. 窗体的嵌入<br>&nbsp;&nbsp;&nbsp; 下载<a href="http://code.google.com/p/mogresdk/downloads/list">Mogre</a> 里面samples自带一个嵌入ogre窗体的工程 基本是没什么问题的 在真正使用时 要加个定时器 然后主动<br>&nbsp;&nbsp;&nbsp; 更新窗口 另外一点让人有些疑惑的是当窗体大小改变的时候 mogre能自动调用相应的代码让camera设置新的比例 <br>&nbsp;&nbsp;&nbsp; 感觉做的有点太过到位 不习惯。。。<br>&nbsp; <br>&nbsp;&nbsp;&nbsp; 2. <a href="http://scintillanet.codeplex.com/">scintilla.net</a>控件的使用<br>&nbsp;&nbsp;&nbsp; 入手有点困难，主要是绘制文本的window api没怎么接触过 使得此控件看上去有点神奇 不过我们只是要使用她 <br>&nbsp;&nbsp;&nbsp; 下面是一个实现cg编辑器的一段代码：<br>
<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;&nbsp;1</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">init&nbsp;edit，scintilla1是该控件的一个实例</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">scintilla1.Lexing.Lexer&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ScintillaNet.Lexer.Cpp;<br></span><span style="color: #008080;">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #000000;">ScintillaNet.KeywordCollection&nbsp;kc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;scintilla1.Lexing.Keywords;<br><br></span><span style="color: #008080;">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">下面还可以加更多的关键字</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">kc[</span><span style="color: #000000;">0</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;"><br></span><span style="color: #008080;">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #000000;">short&nbsp;<br></span><span style="color: #008080;">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #000000;">short2&nbsp;<br></span><span style="color: #008080;">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #000000;">short3<br></span><span style="color: #008080;">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #000000;">short4&nbsp;<br></span><span style="color: #008080;">&nbsp;10</span>&nbsp;<span style="color: #000000;">short1x1&nbsp;<br></span><span style="color: #008080;">&nbsp;11</span>&nbsp;<span style="color: #000000;">short1x2<br></span><span style="color: #008080;">&nbsp;12</span>&nbsp;<span style="color: #000000;">short1x3<br></span><span style="color: #008080;">&nbsp;13</span>&nbsp;<span style="color: #000000;">short1x4<br></span><span style="color: #008080;">&nbsp;14</span>&nbsp;<span style="color: #000000;">TEXCOORD0<br></span><span style="color: #008080;">&nbsp;15</span>&nbsp;<span style="color: #000000;">TEXCOORD1<br></span><span style="color: #008080;">&nbsp;16</span>&nbsp;<span style="color: #000000;">TEXCOORD2<br></span><span style="color: #008080;">&nbsp;17</span>&nbsp;<span style="color: #000000;">TEXCOORD3<br></span><span style="color: #008080;">&nbsp;18</span>&nbsp;<span style="color: #000000;"></span><span style="color: #000000;">"</span><span style="color: #000000;">;<br><br></span><span style="color: #008080;">&nbsp;19</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">也是关键字，颜色会不一样，下面有设置</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;20</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">kc[</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;"><br></span><span style="color: #008080;">&nbsp;21</span>&nbsp;<span style="color: #000000;">abs<br></span><span style="color: #008080;">&nbsp;22</span>&nbsp;<span style="color: #000000;">acos<br></span><span style="color: #008080;">&nbsp;23</span>&nbsp;<span style="color: #000000;">all<br></span><span style="color: #008080;">&nbsp;24</span>&nbsp;<span style="color: #000000;">any<br></span><span style="color: #008080;">&nbsp;25</span>&nbsp;<span style="color: #000000;">asin<br></span><span style="color: #008080;">&nbsp;26</span>&nbsp;<span style="color: #000000;">atan<br></span><span style="color: #008080;">&nbsp;27</span>&nbsp;<span style="color: #000000;">atan2<br></span><span style="color: #008080;">&nbsp;28</span>&nbsp;<span style="color: #000000;">ceil<br></span><span style="color: #008080;">&nbsp;29</span>&nbsp;<span style="color: #000000;">clamp<br></span><span style="color: #008080;">&nbsp;30</span>&nbsp;<span style="color: #000000;"></span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;31</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;32</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">显示行号</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;33</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">scintilla1.Margins[</span><span style="color: #000000;">0</span><span style="color: #000000;">].Width&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">20</span><span style="color: #000000;">;<br><br></span><span style="color: #008080;">&nbsp;34</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">设置相应的显示style<br><br></span><span style="color: #008080;">&nbsp;35</span>&nbsp;<span style="color: #008000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">SCE_C_COMMENT&nbsp;注释颜色&nbsp;字体</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;36</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">scintilla1.Styles[</span><span style="color: #000000;">1</span><span style="color: #000000;">].ForeColor&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Color.FromA#</span><span style="color: #000000;">008000</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;37</span>&nbsp;<span style="color: #000000;">scintilla1.Styles[</span><span style="color: #000000;">1</span><span style="color: #000000;">].FontName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">simhei</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br><br></span><span style="color: #008080;">&nbsp;38</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">SCE_C_COMMENTLINE</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;39</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">scintilla1.Styles[</span><span style="color: #000000;">2</span><span style="color: #000000;">].ForeColor&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Color.FromA#</span><span style="color: #000000;">008000</span><span style="color: #000000;">;<br><br></span><span style="color: #008080;">&nbsp;40</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">SCE_C_STRING&nbsp;字符串颜色</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;41</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">scintilla1.Styles[</span><span style="color: #000000;">6</span><span style="color: #000000;">].ForeColor&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Color.FromA#c8c8c8;<br><br></span><span style="color: #008080;">&nbsp;42</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">SCE_C_WORD&nbsp;关键字颜色</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;43</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">scintilla1.Styles[</span><span style="color: #000000;">5</span><span style="color: #000000;">].ForeColor&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Color.FromA#0000ff;<br><br></span><span style="color: #008080;">&nbsp;44</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">SCE_C_WORD2&nbsp;也是关键字颜色</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;45</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">scintilla1.Styles[</span><span style="color: #000000;">16</span><span style="color: #000000;">].ForeColor&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Color.FromA#</span><span style="color: #000000;">880000</span><span style="color: #000000;">;<br><br></span><span style="color: #008080;">&nbsp;46</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">SCE_C_NUMBER&nbsp;数字颜色</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;47</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">scintilla1.Styles[</span><span style="color: #000000;">4</span><span style="color: #000000;">].ForeColor&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Color.FromA#</span><span style="color: #000000;">000080</span><span style="color: #000000;">;<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;"></span><span style="color: #008000;">//</span><span style="color: #008000;">auto&nbsp;complete<br></span><span style="color: #008080;">&nbsp;50</span>&nbsp;<span style="color: #008000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">和关键字不同的是，自动完成生词必须是有序的，不然选择时会出现错误</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;51</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">scintilla1.AutoComplete.MaxHeight&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">6</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;52</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;autowords&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">@"</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;53</span>&nbsp;<span style="color: #000000;">abc<br></span><span style="color: #008080;">&nbsp;54</span>&nbsp;<span style="color: #000000;">apple<br></span><span style="color: #008080;">&nbsp;55</span>&nbsp;<span style="color: #000000;">lea<br></span><span style="color: #008080;">&nbsp;56</span>&nbsp;<span style="color: #000000;">sampler<br></span><span style="color: #008080;">&nbsp;57</span>&nbsp;<span style="color: #000000;">sampler_state<br></span><span style="color: #008080;">&nbsp;58</span>&nbsp;<span style="color: #000000;">sampler1D<br></span><span style="color: #008080;">&nbsp;59</span>&nbsp;<span style="color: #000000;">sampler2D<br></span><span style="color: #008080;">&nbsp;60</span>&nbsp;<span style="color: #000000;">sampler3D<br></span><span style="color: #008080;">&nbsp;61</span>&nbsp;<span style="color: #000000;">samplerCUBE<br></span><span style="color: #008080;">&nbsp;62</span>&nbsp;<span style="color: #000000;">shared<br></span><span style="color: #008080;">&nbsp;63</span>&nbsp;<span style="color: #000000;">signed<br></span><span style="color: #008080;">&nbsp;64</span>&nbsp;<span style="color: #000000;"></span><span style="color: #000000;">"</span><span style="color: #000000;">;<br><br></span><span style="color: #008080;">&nbsp;65</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">排序上面的words</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;66</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">sortString(</span><span style="color: #0000ff;">ref</span><span style="color: #000000;">&nbsp;autowords);<br><br></span><span style="color: #008080;">&nbsp;67</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">设置auto&nbsp;words</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;68</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">scintilla1.AutoComplete.ListString&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;autowords;<br></span><span style="color: #008080;">&nbsp;69</span>&nbsp;<span style="color: #000000;">scintilla1.KeyDown&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;KeyEventHandler(scintilla1_KeyDown);<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;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;scintilla1_KeyDown(</span><span style="color: #0000ff;">object</span><span style="color: #000000;">&nbsp;sender,&nbsp;KeyEventArgs&nbsp;e)<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;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">决定何时显示自动完成的单词列表&nbsp;可以根据自己要求的逻辑来</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;74</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(InputLanguage.CurrentInputLanguage.LayoutName&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">简体中文&nbsp;-&nbsp;美式键盘</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br></span><span style="color: #008080;">&nbsp;75</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">&nbsp;76</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">输入中文时不显示，遇到下列字符也不显示</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;77</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(e.KeyCode&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Keys.Enter&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;78</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.KeyCode&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Keys.Up&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;79</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.KeyCode&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Keys.Down&nbsp;&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;80</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.KeyCode&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Keys.Left&nbsp;&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;81</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.KeyCode&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Keys.Right&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;82</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.KeyCode</span><span style="color: #000000;">==</span><span style="color: #000000;">Keys.Back&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;83</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.KeyCode</span><span style="color: #000000;">==</span><span style="color: #000000;">Keys.Space)<br></span><span style="color: #008080;">&nbsp;84</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;85</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;86</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">得到当前光标位置</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;87</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;cpos&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;scintilla1.CurrentPos;<br></span><span style="color: #008080;">&nbsp;88</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">查看光标前一位置的字符</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;89</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;prechar&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;scintilla1.CharAt(cpos</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br></span><span style="color: #008080;">&nbsp;90</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">当前输入的字符</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;91</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;curchar&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">)e.KeyValue;<br></span><span style="color: #008080;">&nbsp;92</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;"></span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;93</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(prechar&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">\n</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;prechar&nbsp;</span><span style="color: #000000;">==</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;">||</span><span style="color: #000000;">&nbsp;prechar</span><span style="color: #000000;">==</span><span style="color: #000000;">'</span><span style="color: #000000;">\t</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;cpos</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br></span><span style="color: #008080;">&nbsp;94</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">&nbsp;95</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">如果前一字符是以上的字符，且当前字符为auto&nbsp;words中某个词的首字母<br></span><span style="color: #008080;">&nbsp;96</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">显示自动完成</span><span style="color: #008000;">列表<br></span><span style="color: #008080;">&nbsp;97</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(autoFirstLetters.BinarySearch(curchar)</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br></span><span style="color: #008080;">&nbsp;98</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">&nbsp;99</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scintilla1.AutoComplete.Show();<br></span><span style="color: #008080;">100</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">101</span>&nbsp;<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;<br></span><span style="color: #008080;">102</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">103</span>&nbsp;<span style="color: #000000;">}</span></div>
<br>当然，还可以加入更多功能和控制逻辑，如在换行的时候将光标跳到合适的位置，而不总是在最前面<br>从此，不用在vc中写一群黑压压的cg或是材质脚本 生活会更亲松和艺术点。。。<br><img src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/emrainbow.gif" align="absmiddle" border="0"><br><br> <img src ="http://www.cppblog.com/zhuyeaini/aggbug/122653.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2010-08-08 14:55 <a href="http://www.cppblog.com/zhuyeaini/archive/2010/08/08/122653.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>wildpig 初次show</title><link>http://www.cppblog.com/zhuyeaini/archive/2010/07/31/121781.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Sat, 31 Jul 2010 07:11:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2010/07/31/121781.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/121781.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2010/07/31/121781.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/121781.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/121781.html</trackback:ping><description><![CDATA[<strong style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; line-height: normal; background-color: #e5ecf9; "><em>下载地址：http</em></strong><span style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; line-height: normal; background-color: #e5ecf9; ">://wildpigdev.googlecode.com/svn/trunk/</span>&nbsp;<br />wildpig是我新开的轻量级的游戏编辑器demo 主要侧重自然景物的渲染 保持简单性和可扩展性 追求最大真实度 <br />限于开发机子的性能（ati 2系列的显卡） 像深度阴影之类的特耗GPU的效果就没上&nbsp; 等有了新机器再说吧 555555<br /><br />开发环境 ogre1.7.1 cegui0.7.1 boost1.42 一些天龙的模型<br /><br />目前进度：地形+天空+植被+水<br /><br />地形支持可编辑高度纹理：地形分为一个一个的tile 纹理混合因子放在顶点的纹理坐标中<br />天空参考caelum 增加如太阳光晕等效果 光晕：camPos向照相机方向走一定距离(太阳到照相机的距离的一半)到P <br />然后在太阳到点P的向量方向上按照不同距离画光晕<br />植被方面 bush（花花草草之类）每个地形块的同类bush打包成一个渲染体 树模型在近处真实渲染 远处用Billboard代替 因此可支持较大规模的植被系统<br />水支持反射 衍射效果 特别地 像天空 太阳等特殊物体的反射效果需要注意点 她们不会随着摄像机的移动而移动 在代码上要注意处理下<br /><br />未来支持特性：角色寻路、换装 cegui道具管理 物理 物理 还是物理 <br />未来肯定会公开源代码 从开源中来 到开源中去 <br /><br />也终于试下传说中的预编译 很好很强大 好快啊<img src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/face9.gif" align="absmiddle" border="0"  alt="" /><br />放图：<br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/gameScreen2.png" height="768" width="1024" /><br />白天 中午<br /><br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/gameScreen4.png" /><br />傍晚吧<br /><br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/gameScreen7.png" height="768" width="1024" /><br />看看月亮<br /><br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/gameScreen11.png" /><br />早上<br /><br /><img src ="http://www.cppblog.com/zhuyeaini/aggbug/121781.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2010-07-31 15:11 <a href="http://www.cppblog.com/zhuyeaini/archive/2010/07/31/121781.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CEGUI 探讨 定制</title><link>http://www.cppblog.com/zhuyeaini/archive/2010/06/29/118895.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Tue, 29 Jun 2010 05:59:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2010/06/29/118895.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/118895.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2010/06/29/118895.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/118895.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/118895.html</trackback:ping><description><![CDATA[<img src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/emfilm.gif" align="absmiddle" border="0"> 我喜欢看张国荣的《东邪西毒》<br>讨论对象：CEGUI 0.7.1<br>1.从源代码开始<br>下完cegui 0.7.1 解压到当前文件夹 得到一个CEGUI-0.7.1文件夹 下载deps 解压到该目录下 形成类似<br>./CEGUI-0.7.1<br>./CEGUI-0.7.1/dependencies<br>./CEGUI-0.7.1/bin<br>的目录结构 转到./CEGUI-0.7.1/projects/premake/ <br>里面有许多版本的VS 我的版本是VS 2008的 在运行build_vs2008.bat之前 打开config.lua<br>该文件定制cegui的各个模块 来看下我的：<br>
<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: #000000;">--</span><span style="color: #000000;"><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;CEGUI&nbsp;premake&nbsp;configuration&nbsp;script<br></span><span style="color: #000000;">--</span><span style="color: #000000;"><br><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;comment&nbsp;this&nbsp;to&nbsp;disable&nbsp;debug&nbsp;suffixes&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;dynamic&nbsp;module&nbsp;dlls<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;you&nbsp;want&nbsp;to&nbsp;use&nbsp;another&nbsp;suffix,&nbsp;just&nbsp;change&nbsp;the&nbsp;string&nbsp;:)<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;all&nbsp;the&nbsp;debug&nbsp;cegui&nbsp;libraries&nbsp;are&nbsp;built&nbsp;with&nbsp;this&nbsp;suffix<br>DEBUG_DLL_SUFFIX&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">_d</span><span style="color: #800000;">"</span><span style="color: #000000;"><br><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;SDK&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;dependency&nbsp;paths<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;{&nbsp;base,&nbsp;include_suffix,&nbsp;library_suffix&nbsp;}<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;base&nbsp;can&nbsp;be&nbsp;absolute&nbsp;</span><span style="color: #0000ff;">or</span><span style="color: #000000;">&nbsp;relative&nbsp;to&nbsp;the&nbsp;root&nbsp;cegui_mk2&nbsp;dir<br>IRRLICHT_PATHS&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">irrlicht-1.4</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">include</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">lib/Win32-visualstudio</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;}<br>OGRE_PATHS&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">D:/wildpigdev/ogre/ogre_src_v1-7-1/vc9/sdk</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">include/OGRE</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">lib</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;}<br>OIS_PATHS&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">D:/wildpigdev/ogre/ogre_src_v1-7-1/vc9/sdk</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">include/OIS</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">lib</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;}<br><br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;Irrlicht&nbsp;SDK&nbsp;Version<br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">14</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;means&nbsp;</span><span style="color: #000000;">1.4</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">or</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1.5</span><span style="color: #000000;">.x&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">16</span><span style="color: #000000;">&nbsp;means&nbsp;</span><span style="color: #000000;">1.6</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;above?)<br>CEGUI_IRR_SDK_VERSION&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">14</span><span style="color: #000000;"><br><br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;OIS&nbsp;API&nbsp;version&nbsp;to&nbsp;be&nbsp;used&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;the&nbsp;Ogre&nbsp;samples&nbsp;base&nbsp;app.<br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;true:&nbsp;use&nbsp;older&nbsp;numKeyboards&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;numMice<br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;false:&nbsp;use&nbsp;getNumberOfDevices<br>CEGUI_OLD_OIS_API&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br><br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;Lua&nbsp;version<br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">51</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">5.1</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;above?)&nbsp;From&nbsp;</span><span style="color: #000000;">0.7</span><span style="color: #000000;">.0&nbsp;onwards,&nbsp;lua&nbsp;</span><span style="color: #000000;">5.0</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;no&nbsp;longer&nbsp;supported.<br>CEGUI_LUA_VER&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">51</span><span style="color: #000000;"><br><br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;Freetype&nbsp;library<br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;CEGUI&nbsp;uses&nbsp;the&nbsp;freetype&nbsp;library&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;some&nbsp;of&nbsp;it</span><span style="color: #800000;">'</span><span style="color: #800000;">s&nbsp;font&nbsp;support.&nbsp;&nbsp;To&nbsp;disable</span><span style="color: #800000;"><br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;the&nbsp;use&nbsp;of&nbsp;freetype,&nbsp;set&nbsp;this&nbsp;to&nbsp;false.<br>CEGUI_USE_FREETYPE&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;true<br><br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;PCRE&nbsp;library<br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;CEGUI&nbsp;uses&nbsp;the&nbsp;pcre&nbsp;library&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;it</span><span style="color: #800000;">'</span><span style="color: #800000;">s&nbsp;regular&nbsp;expression&nbsp;based&nbsp;string</span><span style="color: #800000;"><br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;validation&nbsp;as&nbsp;used&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;the&nbsp;Editbox&nbsp;(</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;derived&nbsp;classes,&nbsp;such&nbsp;as&nbsp;Spinner).<br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;To&nbsp;disable&nbsp;the&nbsp;use&nbsp;of&nbsp;PCRE&nbsp;(</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;therefore&nbsp;the&nbsp;validation&nbsp;factilities),&nbsp;set<br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;this&nbsp;to&nbsp;false.&nbsp;&nbsp;(Attempts&nbsp;to&nbsp;set&nbsp;validation&nbsp;string&nbsp;will&nbsp;throw).<br>CEGUI_USE_PCRE_REGEX&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;true<br><br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;CEGUI::DefaultLogger<br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;To&nbsp;disable&nbsp;compilation&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;use&nbsp;of&nbsp;the&nbsp;CEGUI::DefaultLogger,&nbsp;set&nbsp;this&nbsp;to<br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;false.<br></span><span style="color: #000000;">---</span><span style="color: #000000;"><br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;Note:&nbsp;If&nbsp;you&nbsp;disable&nbsp;this,&nbsp;you&nbsp;MUST&nbsp;provide&nbsp;an&nbsp;alternative&nbsp;CEGUI::Logger<br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;based&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;instantiate&nbsp;it&nbsp;before&nbsp;creating&nbsp;the&nbsp;main&nbsp;CEGUI::System&nbsp;object.<br>CEGUI_USE_DEFAULT_LOGGER&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;true<br><br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;BiDirectional&nbsp;text&nbsp;support.<br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;To&nbsp;enable&nbsp;support&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;bi</span><span style="color: #000000;">-</span><span style="color: #000000;">directional&nbsp;text&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;CEGUI,&nbsp;set&nbsp;CEGUI_BIDI_SUPPORT<br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;to&nbsp;true.<br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;With&nbsp;bidirectional&nbsp;support&nbsp;enabled,&nbsp;CEGUI_USE_MINIBIDI&nbsp;then&nbsp;controls&nbsp;whether<br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;that&nbsp;support&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;provided&nbsp;viaan&nbsp;embedded&nbsp;copy&nbsp;of&nbsp;minibidi&nbsp;(true)&nbsp;</span><span style="color: #0000ff;">or</span><span style="color: #000000;">&nbsp;an<br></span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;external&nbsp;copy&nbsp;of&nbsp;the&nbsp;fribidi&nbsp;library&nbsp;(false).<br>CEGUI_BIDI_SUPPORT&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false;<br>CEGUI_USE_MINIBIDI&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;true;<br><br></span><span style="color: #000000;">-------------</span><span style="color: #000000;"><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;Renderers<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;this&nbsp;controls&nbsp;which&nbsp;renderer&nbsp;modules&nbsp;are&nbsp;built<br>OPENGL_RENDERER&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br>DIRECT3D9_RENDERER&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br>DIRECT3D10_RENDERER&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br>IRRLICHT_RENDERER&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br>OGRE_RENDERER&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;true<br><br></span><span style="color: #000000;">----------------</span><span style="color: #000000;"><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;Image&nbsp;Codecs<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;this&nbsp;controls&nbsp;which&nbsp;image&nbsp;codecs&nbsp;are&nbsp;built<br>TGA_IMAGE_CODEC&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br>SILLY_IMAGE_CODEC&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br>DEVIL_IMAGE_CODEC&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br>FREEIMAGE_IMAGE_CODEC&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;true<br>CORONA_IMAGE_CODEC&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;this&nbsp;setting&nbsp;selects&nbsp;the&nbsp;default&nbsp;image&nbsp;codec&nbsp;module<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;can&nbsp;be&nbsp;either&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">tga</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">silly</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">devil</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">freeimage</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">or</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">corona</span><span style="color: #800000;">"</span><span style="color: #000000;"><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;SILLY&nbsp;was&nbsp;written&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;CEGUI<br>DEFAULT_IMAGE_CODEC&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">freeimage</span><span style="color: #800000;">"</span><span style="color: #000000;"><br><br></span><span style="color: #000000;">---------------</span><span style="color: #000000;"><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;Window&nbsp;Renderers<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;controls&nbsp;window&nbsp;renderers&nbsp;built<br>FALAGARD_WR&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;true<br><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;default&nbsp;WR<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;available:&nbsp;falagard<br>DEFAULT_WINDOW_RENDERER&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">falagard</span><span style="color: #800000;">"</span><span style="color: #000000;"><br><br><br><br><br></span><span style="color: #000000;">---------------</span><span style="color: #000000;"><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;XML&nbsp;parsers<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;this&nbsp;controls&nbsp;which&nbsp;xml&nbsp;parser&nbsp;modules&nbsp;are&nbsp;built<br>EXPAT_PARSER&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;true<br>XERCES_PARSER&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br>TINYXML_PARSER&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br>LIBXML_PARSER&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;this&nbsp;selects&nbsp;the&nbsp;default&nbsp;XML&nbsp;parser&nbsp;module<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;can&nbsp;be&nbsp;either&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">expat</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">xerces</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">tinyxml</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">or</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">libxml</span><span style="color: #800000;">"</span><span style="color: #000000;"><br>DEFAULT_XML_PARSER&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">expat</span><span style="color: #800000;">"</span><span style="color: #000000;"><br><br><br></span><span style="color: #000000;">-------</span><span style="color: #000000;"><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;Lua<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;this&nbsp;controls&nbsp;whether&nbsp;CEGUILua&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;enabled<br>LUA_SCRIPT_MODULE&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;true<br><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;disable&nbsp;this&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;a&nbsp;smaller&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;faster,&nbsp;but&nbsp;less&nbsp;safe&nbsp;Lua&nbsp;module<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;only&nbsp;affects&nbsp;Release&nbsp;builds.&nbsp;Debug&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;ReleaseWithSymbols&nbsp;always<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;enable&nbsp;this<br>LUA_SCRIPT_MODULE_SAFE&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;enable&nbsp;this&nbsp;to&nbsp;build&nbsp;the&nbsp;bundled&nbsp;tolua</span><span style="color: #000000;">++</span><span style="color: #000000;">&nbsp;as&nbsp;a&nbsp;static&nbsp;library<br>TOLUA_STATIC&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br><br><br></span><span style="color: #000000;">-----------</span><span style="color: #000000;"><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;Samples<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;remember&nbsp;you&nbsp;have&nbsp;to&nbsp;edit&nbsp;CEGUISamplesConfig.h&nbsp;as&nbsp;well&nbsp;this&nbsp;just&nbsp;controls<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;dependencies&nbsp;etc.&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;the&nbsp;renderer&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;disabled&nbsp;this&nbsp;has&nbsp;no&nbsp;effect<br>SAMPLES_GL&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br>SAMPLES_DX9&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br>SAMPLES_DX10&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br>SAMPLES_IRRLICHT&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;false<br>SAMPLES_OGRE&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;true<br><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;this&nbsp;setting&nbsp;controls&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;the&nbsp;samples&nbsp;should&nbsp;be&nbsp;included&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;the&nbsp;same<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;solution&nbsp;as&nbsp;the&nbsp;core&nbsp;libraries.&nbsp;If&nbsp;this&nbsp;setting&nbsp;</span><span style="color: #0000ff;">is</span><span style="color: #000000;">&nbsp;disabled&nbsp;you&nbsp;can<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;still&nbsp;generate&nbsp;a&nbsp;seperate&nbsp;solution&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;the&nbsp;samples<br></span><span style="color: #000000;">--</span><span style="color: #000000;"><br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;due&nbsp;to&nbsp;a&nbsp;missing&nbsp;feature&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;premake&nbsp;enabling&nbsp;this&nbsp;will&nbsp;cause&nbsp;the<br></span><span style="color: #000000;">--</span><span style="color: #000000;">&nbsp;output&nbsp;files&nbsp;to&nbsp;be&nbsp;placed&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;cegui_mk2</span><span style="color: #000000;">/</span><span style="color: #000000;">bin&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">not</span><span style="color: #000000;">&nbsp;cegui_mk2</span><span style="color: #000000;">/</span><span style="color: #000000;">Samples</span><span style="color: #000000;">/</span><span style="color: #000000;">bin<br></span><span style="color: #000000;">--</span><span style="color: #000000;"><br>SAMPLES_INCLUDED&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;true<br></span></div>
<br>我是用ogre来渲染的 需要注意的是<span style="color: #000000;">OGRE_PATHS </span><span style="color: #000000;">OIS_PATHS</span> 该路径自己选择 其他的都可根据个人需求定制 比如ImageCodec<br>定制完该lua脚本后 生成对应的VS版本 编译下 一般没啥问题 然后 可以看看自带的ogre的gui例子<br>说说初始化 在这个版本中相当简单 一行代码搞定<br>
<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: #000000;">// 初始化<br>CEGUI::OgreRenderer::bootstrapSystem();<br>// 创建gui<br>CEGUI::SchemeManager::getSingleton().create("TaharezLook.scheme");<br>CEGUI::WindowManager&amp; winMgr = CEGUI::WindowManager::getSingleton();<br>CEGUI::Window* root= winMgr.loadWindowLayout("yezhu.layout");<br>CEGUI::System::getSingleton().setGUISheet(root);<br>CEGUI::System::getSingletonPtr()-&gt;setDefaultMouseCursor((CEGUI::utf8*)"TaharezLook", (CEGUI::utf8*)"MouseArrow");<br></span></div>
如果想知道更多 可以看其源代码<br>如果要定制窗口 需要看看<span style="color: #000000;">TaharezLook.scheme这个文件 </span>这是个xml文件 里面放着Imageset定义 <br>Font定义 LookNFeel定义 了解这些新名词是定制窗口的关键 事情可以这样理解 <br>LookNFeel文件在这里起着关键因素 我们生成的gui窗口的外貌和这个文件是息息相关的<br>打开这个LookNFeel文件 我们可以看到各种窗口的外观定义 如果我们要定制外观 <br>修改现有的或者增加新的外观定义 特别感兴趣的可以 看看《火炬之光》里面的gui <br>迅雷单机游戏里有下的 玩起来还行。。。 ogre+cegui做的 可以打开她的gui文件看看 <br><br>2.定制窗口<br>好 接下来 我们要定制窗口了 假如我们现在需要个性点的窗口 假如叫她MyButton 继承自CEGUI::PushButton <br>
<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: #000000;">#ifndef MYBUTTON_H<br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;"> MYBUTTON_H</span><span style="color: #000000;"></span><span style="color: #000000;"><br>#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><br></span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;CEGUI<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> MyButton :&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> PushButton<br>&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyButton(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;String&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">type,&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;String&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">name);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">virtual</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">~MyButton</span><span style="color: #000000;">();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;String&nbsp;WidgetTypeName;</span><span style="color: #000000;"></span><span style="color: #0000ff;"></span>//工厂名<br><span style="color: #000000;">&nbsp;&nbsp;&nbsp;};<br>}<br></span><span style="color: #0000ff;">#endif</span></div>
需要注意的是WidgetTypeName 我们在创建窗口的时候最终会通过该名字来找到相应的工厂<br>&nbsp;每一个窗口都有相应的工厂用来创建自己<br>如果你查看cegui的初始化代码 你会看到一些类似以下的代码：<br>
<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: #000000;">WindowFactoryManager::addFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;TplWindowFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">GUISheet</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">();<br>WindowFactoryManager::addFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;TplWindowFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">DragContainer</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">() <br>WindowFactoryManager::addFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;TplWindowFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">ScrolledContainer</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">();<br>WindowFactoryManager::addFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;TplWindowFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">ClippedContainer</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">();<br>WindowFactoryManager::addFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;TplWindowFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Checkbox</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">();<br>WindowFactoryManager::addFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;TplWindowFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">PushButton</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">();<br>WindowFactoryManager::addFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;TplWindowFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">RadioButton</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">();<br>WindowFactoryManager::addFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;TplWindowFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Combobox</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">();</span><span style="color: #000000;"><br></span><span style="color: #000000;"></span></div>
所以 现在 我们要做的也是加入MyButton对应的工厂 不错 正如你所看到的 一行代码搞定<br><span style="color: #000000;">
<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: #000000;">WindowFactoryManager::addFactory</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;TplWindowFactory</span><span style="color: #000000;">&lt;MyButton</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">()</span></div>
</span>注意的是 很显然 该行代码要在我们使用该窗口之前调用<br>接下来 看看MyButton的实现文件<br>
<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: #000000;">#include&nbsp;</span><span style="color: #000000;">"MyButton</span><span style="color: #000000;">.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;CEGUI<br>{<br>&nbsp;&nbsp;&nbsp; // 工厂名 通过该名字找到对应工厂<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;String MyButton::WidgetTypeName(</span><span style="color: #000000;">"</span><span style="color: #000000;">Custom/MyButton</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp; MyButton::MyButton(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;String&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">type,&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;String&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">name)&nbsp;:PushButton(type,&nbsp;name)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp; MyButton::</span><span style="color: #000000;">~</span><span style="color: #000000;">MyButton()<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
没啥特别的地方 你可以放置任何其他数据 好 目前为止 我们新建了一个窗口类 并把对应的工厂加入系统 <br>回过头看TaharezLook.scheme文件 我们可以看到里面有许多类似这样的元素：<br>
<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: #0000ff;">&lt;</span><span style="color: #800000;">FalagardMapping&nbsp;</span><span style="color: #ff0000;">WindowType</span><span style="color: #0000ff;">="TaharezLook/Button"</span><span style="color: #ff0000;">&nbsp;TargetType</span><span style="color: #0000ff;">="CEGUI/PushButton"</span><span style="color: #ff0000;">&nbsp;Renderer</span><span style="color: #0000ff;">="Falagard/Button"</span><span style="color: #ff0000;">&nbsp;LookNFeel</span><span style="color: #0000ff;">="TaharezLook/Button"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">FalagardMapping&nbsp;</span><span style="color: #ff0000;">WindowType</span><span style="color: #0000ff;">="TaharezLook/Checkbox"</span><span style="color: #ff0000;">&nbsp;TargetType</span><span style="color: #0000ff;">="CEGUI/Checkbox"</span><span style="color: #ff0000;">&nbsp;Renderer</span><span style="color: #0000ff;">="Falagard/ToggleButton"</span><span style="color: #ff0000;">&nbsp;LookNFeel</span><span style="color: #0000ff;">="TaharezLook/Checkbox"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">FalagardMapping&nbsp;</span><span style="color: #ff0000;">WindowType</span><span style="color: #0000ff;">="TaharezLook/ImageButton"</span><span style="color: #ff0000;">&nbsp;TargetType</span><span style="color: #0000ff;">="CEGUI/PushButton"</span><span style="color: #ff0000;">&nbsp;Renderer</span><span style="color: #0000ff;">="Falagard/Button"</span><span style="color: #ff0000;">&nbsp;LookNFeel</span><span style="color: #0000ff;">="TaharezLook/ImageButton"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"></span><span style="color: #0000ff;"></span><span style="color: #000000;"></span><span style="color: #0000ff;"></span><span style="color: #0000ff;"></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">FalagardMapping&nbsp;</span><span style="color: #ff0000;">WindowType</span><span style="color: #0000ff;">="TaharezLook/Titlebar"</span><span style="color: #ff0000;">&nbsp;TargetType</span><span style="color: #0000ff;">="CEGUI/Titlebar"</span><span style="color: #ff0000;">&nbsp;Renderer</span><span style="color: #0000ff;">="Falagard/Titlebar"</span><span style="color: #ff0000;">&nbsp;LookNFeel</span><span style="color: #0000ff;">="TaharezLook/Titlebar"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">FalagardMapping&nbsp;</span><span style="color: #ff0000;">WindowType</span><span style="color: #0000ff;">="TaharezLook/SystemButton"</span><span style="color: #ff0000;">&nbsp;TargetType</span><span style="color: #0000ff;">="CEGUI/PushButton"</span><span style="color: #ff0000;">&nbsp;Renderer</span><span style="color: #0000ff;">="Falagard/Button"</span><span style="color: #ff0000;">&nbsp;LookNFeel</span><span style="color: #0000ff;">="TaharezLook/Button"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">FalagardMapping&nbsp;</span><span style="color: #ff0000;">WindowType</span><span style="color: #0000ff;">="TaharezLook/Editbox"</span><span style="color: #ff0000;">&nbsp;TargetType</span><span style="color: #0000ff;">="CEGUI/Editbox"</span><span style="color: #ff0000;">&nbsp;Renderer</span><span style="color: #0000ff;">="Falagard/Editbox"</span><span style="color: #ff0000;">&nbsp;LookNFeel</span><span style="color: #0000ff;">="TaharezLook/Editbox"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">FalagardMapping&nbsp;</span><span style="color: #ff0000;">WindowType</span><span style="color: #0000ff;">="TaharezLook/Menubar"</span><span style="color: #ff0000;">&nbsp;TargetType</span><span style="color: #0000ff;">="CEGUI/Menubar"</span><span style="color: #ff0000;">&nbsp;Renderer</span><span style="color: #0000ff;">="Falagard/Menubar"</span><span style="color: #ff0000;">&nbsp;LookNFeel</span><span style="color: #0000ff;">="TaharezLook/Menubar"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br></span></div>
WindowType是我们在创建窗口时用到的名字 当然 我们也可以直接用后面的TargetType <br>该名字就是对应的工厂名 Render不用去管她 相当于如何渲染 <br>LookNFeel是重点 在对应的LookNFeel文件中我们可以找到该名字对应的定义 <br>就是这些定义使得我们的窗口会呈现各种外观 所以下面的工作就是写LookNFeel定义 <br>并通过程序加入如上的映射<br>好 关于如何写LookNFeel定义 好吧 这是另外一个主题了 在这里 <br>我们假设在外观文件中新增一个外观定义&#8220;CustomLook/MyButton&#8221;<br>现在 我们要加入一个映射：<br>
<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: #000000;">CEGUI::WindowFactoryManager</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;wfMgr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CEGUI::WindowFactoryManager::getSingleton(); </span><span style="color: #000000;"><br>wfMgr.addFalagardWindowMapping(</span><span style="color: #000000;">"</span><span style="color: #0000ff;">TaharezLook/MyButton</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;"></span><span style="color: #000000;">Custom/MyButton</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span>CustomLook/MyButton<span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Falagard/Button</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br></span></div>
映射函数参数依次是 映射名 工厂名 外观定义名 Render名<br>好了 现在你就可以使用这个新窗口了<br>
<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: #000000;">CEGUI::WindowManager&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;m_WndMgr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CEGUI::WindowManager::getSingletonPtr();<br>m_WndMgr-&gt;createWindow("TaharezLook/MyButton","mytestwindow");<br></span></div>
createWindow会从对应映射中找到工厂创建窗口<br>基本就是这样 over~<img src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/emrosesad.gif" align="absmiddle" border="0"><br><br>PS:<br>另外 当我们只需要改变某个窗口的lookNFeel定义时 <br>调用void Window::setLookNFeel(const String&amp; look)<br>可以在运行时改变窗口的lookNFeel定义<br><br>   <img src ="http://www.cppblog.com/zhuyeaini/aggbug/118895.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2010-06-29 13:59 <a href="http://www.cppblog.com/zhuyeaini/archive/2010/06/29/118895.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>stl 排序</title><link>http://www.cppblog.com/zhuyeaini/archive/2010/06/27/118825.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Sun, 27 Jun 2010 08:35:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2010/06/27/118825.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/118825.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2010/06/27/118825.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/118825.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/118825.html</trackback:ping><description><![CDATA[<img src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/emvamp.gif" align="absmiddle" border="0"> 好 我喜欢这个小蝙蝠<br>vector list map 这些结构的使用率比较高 看看如何定制其排序<br>1 vector<br>vector是无序结构 可以使用标准算法std::sort方法来排序 查看sort的源码可以了解到<br>sort算法总体是采用快速排序 局部采用插入排序 效率良好 通过指定sort的第3个参数 <br>一个函数对象的实例 我们可以定制排序行为 让其从大到小或从小到大 我们看例子：<br>
<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;">class</span><span style="color: #000000;">&nbsp;SortMethod<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;"></span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">operator</span><span style="color: #000000;">()(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b) const<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">b;<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<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;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">11</span>&nbsp;<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;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008080;"><br>12</span><span style="color: #000000;"><br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;v;<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;v.push_back(</span><span style="color: #000000;">5</span><span style="color: #000000;">);<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;v.push_back(</span><span style="color: #000000;">8</span><span style="color: #000000;">);<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;v.push_back(</span><span style="color: #000000;">2</span><span style="color: #000000;">);<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;std::sort(v.begin(),v.end(),SortMethod());<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">19</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;">20</span>&nbsp;<span style="color: #000000;">}</span></div>
如果要让其按反序排列 修改重载函数为 return a&gt;b 如果没有提供第3个参数<br>默认是std::less&lt;&gt;() 该类是重载了()操作符的模板类 效果和SortMethod类似<br>现在我们的数据类型是int 如果是class或者struct且接受默认比较函数对象<br>就得在类中实现重载&lt;操作符 看例子：<br>
<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: #0000ff;">class</span><span style="color: #000000;">&nbsp;yezhu<br>{<br></span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;yezhu():i(</span><span style="color: #000000;">0</span><span style="color: #000000;">){cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">I'm&nbsp;yezhu&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">i</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">~</span><span style="color: #000000;">yezhu(){cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">del&nbsp;yezhu&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">i</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;}<br>&nbsp;&nbsp;&nbsp;&nbsp;yezhu(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n):i(n){cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">I'm&nbsp;yezhu&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">i</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setValue(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n){i</span><span style="color: #000000;">=</span><span style="color: #000000;">n;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;&nbsp;getValue()&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">{</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;i;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">operator</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;yezhu</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;val)&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;"><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;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">val.i;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #0000ff;">protected</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i;<br>};<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">yezhu</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;v;<br>&nbsp;&nbsp;&nbsp;&nbsp;v.push_back(yezhu(</span><span style="color: #000000;">3</span><span style="color: #000000;">));<br>&nbsp;&nbsp;&nbsp;&nbsp;v.push_back(yezhu(</span><span style="color: #000000;">2</span><span style="color: #000000;">));<br>&nbsp;&nbsp;&nbsp;&nbsp;v.push_back(yezhu(</span><span style="color: #000000;">1</span><span style="color: #000000;">));<br>&nbsp;&nbsp;&nbsp;&nbsp;std::sort(v.begin(),v.end());<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&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>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
<br>2.list<br>list有自己的sort函数 有一个可选参数 默认是std::less&lt;&gt;() 不能用标准sort()函数排序<br><br>3.map<br>map是有序结构 在其构造的时候可以指定比较函数对象 注意 这里提供的不是实例 而是类型<br>
<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: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;map</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">,</span><span style="color: #0000ff;">char</span><span style="color: #000000;">,greater</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;m;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&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>}&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
<br><br><img src ="http://www.cppblog.com/zhuyeaini/aggbug/118825.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2010-06-27 16:35 <a href="http://www.cppblog.com/zhuyeaini/archive/2010/06/27/118825.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在ogre中寻路</title><link>http://www.cppblog.com/zhuyeaini/archive/2010/06/26/118797.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Sat, 26 Jun 2010 13:23:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2010/06/26/118797.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/118797.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2010/06/26/118797.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/118797.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/118797.html</trackback:ping><description><![CDATA[<img src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/emrose.gif" align="absmiddle" border="0" alt="" /> 好 先来朵花 渲染一下气氛<br />
早先写了个寻路的demo 现在总结分享下 <br />
核心算法采用流行的A*寻路算法<br />
Demo大概是这样的：通过cegui(界面库)添加些障碍物 地形用一个简单的平面来代替(因为demo的重点是寻路 能简化<br />
的就简化了) 场景中有几个主角人物乔峰(天龙里的模型) 通过左键选择一个或多个主角 右键确认寻路目标点 主角会绕开障碍物进行寻路 感兴趣的可以从这里下载<br /><strong style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; line-height: normal; background-color: #e5ecf9; "><em>http</em></strong><span style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; line-height: normal; background-color: #e5ecf9; ">://wildpigdev.googlecode.com/svn/trunk/</span>&nbsp;<br /><br />&nbsp;整个寻路主要有3部分组成：1.寻路准备 2.寻路 3.优化路径点<br />
1.寻路准备<br />
在选定要移动的角色后 右键确定目标点 首先发生的是寻路准备<br />
寻路准备是指确认角色要搜寻的范围，开始位置，目标位置 在demo中 我们以人物为中心建立了一个N*N的搜寻方格 一般说来 方格的数量越多
那么搜寻就越费时 方格的大小决定了搜寻的精度 我们在检查此方格是否可以通行时<br />
是以方格的大小作为碰撞的包围盒大小 如果此方格的包围盒和障碍物的包围盒产生碰撞 我们就认为此方格是不可<br />
通行的 在寻路时将排除该方格 如果方格越小 同样的搜寻范围就需要更多的方格 但产生的路径就越精细<br />
2.寻路<br />
贪心算法的思想 算法有两个列表称之为开放列表和闭合列表 一开始都为空 开放列表加入开始方格
每次都从开放列表中选择一个算法认为是最接近目标点的方格 我们称之为代价最小的方格 然后 从开放列表中删除该方格<br />
接下来 判断此方格是否为目标方格 如果是 寻路结束 如果不是 加入到闭合列表 检查该方格周围的8个邻居 对每个邻居 如果该方格不在开放列表
也不在闭合列表 并没有和障碍物发生碰撞 那么 把该方格加入到开放列表中 并在同时计算代价 还要注意为该方块记录其行走路径
也就是从哪个方块走到哪个方块的 一直循环到开放列表为空<br />
或找到目标方格 在找到目标方格后 根据其行走路径可以往前倒推到开放方格 形成一条路径 当然 也可能找不到<br />
路径 <br />
3.优化路径点<br />
优化路径点的思想是尽量使路径直线化 demo中没有做这步优化 算法比较容易实现 从起始点到最后一个点 对于路径中的每一个路径点A
依次检查位于其后的每个路径点B1,B2... 如果A与B1是互相可见(中间无障碍物)的且A与B2也是互相可见的 则B1点是可以去掉的
于是路径变成了A,B2...<br />放几张截图：<br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/1597933442787592477.png" height="562" width="750" /><br /><br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/3190800335993835836.png" /><br /><br />动态寻路：<br />增加动态寻路的角色更新逻辑：<br />为了避免重复寻路 每个角色有一个碰撞列表<br /><br />1. 初始化该角色的碰撞列表为空<br />2. 得出和该角色发生碰撞的其他角色colChas<br />3. 如果colChas为空，更新碰撞列表为空，goUpdate()<br />4. 如果colChas不为空，检查是否有新的碰撞角色(即原碰撞列表中没有的角色)<br />5. 如果没有 goUpdate() 更新列表<br />6. 如果有 判断优先级(只判断状态为go状态的) 如果是最高的 重新寻路 更新列表 如果不是 不作什么 更新列表<img src ="http://www.cppblog.com/zhuyeaini/aggbug/118797.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2010-06-26 21:23 <a href="http://www.cppblog.com/zhuyeaini/archive/2010/06/26/118797.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>