﻿<?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++博客-&lt;font size=5&gt;俊的blog&lt;/font&gt;</title><link>http://www.cppblog.com/mybios/</link><description>游戏开发 C++ DirectX 数学 计算机图形学 SQL Server
&lt;BR&gt;
&lt;BR&gt;
&lt;a href="http://www.cppblog.com/mybios" style="font-size:14px;color:#FFFFFF"&gt;返回我的Blog首页&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 07 Jul 2008 15:31:01 GMT</lastBuildDate><pubDate>Mon, 07 Jul 2008 15:31:01 GMT</pubDate><ttl>60</ttl><item><title>深圳网域高薪诚聘Ogre 3D程序员</title><link>http://www.cppblog.com/mybios/archive/2008/03/19/44855.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Wed, 19 Mar 2008 07:04:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2008/03/19/44855.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/44855.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2008/03/19/44855.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/44855.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/44855.html</trackback:ping><description><![CDATA[<p>深圳网域高薪诚聘:<br>职位:高级3D程序员<br>1、计算机图形学基础扎实，精通D3D或OpenGL。<br>2、精通常见室外、室内渲染技术，如地形渲染、LOD、多叉树、bsp、portal等。<br>3、熟悉各种3D性能优化技术，对3D引擎性能优化有丰富经验。<br>4、精通vertex shader 、 pixel shader 、 HLSL。<br>5、熟悉OGRE等一种或多种常见游戏引擎者优先。<br>6、精通C++，有大型软件系统开发应验者优先。<br>7、熟悉网络游戏，熟悉热爱网络游戏事业，有良好的团队意识和沟通能力</p>
<p>公司地址：深圳市南山高新科技园中区高新四路维用大厦三楼<br>公司网址：<a href="http://www.szdomain.com/">www.szdomain.com</a><br>邮　　箱：<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#121;&#98;&#105;&#111;&#115;&#64;&#113;&#113;&#46;&#99;&#111;&#109;">mybios@qq.com</a>&nbsp; <br>Q&nbsp;&nbsp;&nbsp; Q: 30743734</p>
<img src ="http://www.cppblog.com/mybios/aggbug/44855.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2008-03-19 15:04 <a href="http://www.cppblog.com/mybios/archive/2008/03/19/44855.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>刚完成了一个基于Ogre渲染的世界编辑器，发图留念</title><link>http://www.cppblog.com/mybios/archive/2008/03/09/44046.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Sun, 09 Mar 2008 14:55:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2008/03/09/44046.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/44046.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2008/03/09/44046.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/44046.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/44046.html</trackback:ping><description><![CDATA[<p>这个世界编辑器，从一开始设计的时候就考虑使用即见即所得的形式来实现，地图载入、保存等等操作是独立封装在一个叫DisplaySystem的Dll中，而世界编辑器使用插件的形式来实现各种功能，如：地形编辑插件、网格插件、物件编辑插件、环境编辑插件等等。用插件的形式实现的好处很多，以后要增加新功能的时候世界编辑器本身的代码就不需要修改了。而且对于团队开发也很有利，一个人负责一个插件的开发就可以。<br>发几个图：<br><br>以下是没有启用插件的模式：<br><img src="http://www.cppblog.com/images/cppblog_com/mybios/WorldEditor.jpg" border=0><br><br>以下是启用了地形编辑器插件的模式：<br><img src="http://www.cppblog.com/images/cppblog_com/mybios/TerrainEditor.jpg" border=0><br><br>以下是启用了物件编辑器插件的模式：<br><img height=768 src="http://www.cppblog.com/images/cppblog_com/mybios/NoPlugins.jpg" width=1257 border=0><br></p>
<img src ="http://www.cppblog.com/mybios/aggbug/44046.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2008-03-09 22:55 <a href="http://www.cppblog.com/mybios/archive/2008/03/09/44046.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ogre 的渲染到纹理的关键的3个步骤</title><link>http://www.cppblog.com/mybios/archive/2007/12/27/39764.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Thu, 27 Dec 2007 13:06:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2007/12/27/39764.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/39764.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2007/12/27/39764.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/39764.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/39764.html</trackback:ping><description><![CDATA[<p>好久没写技术的东西了。现在辗转间又回到了深圳工作，还是做我喜欢的游戏开发。奉献点东西给大家。</p>
<p><br>1、创建渲染目标纹理，关键要指定TU_RENDERTARGET参数，在创建这个渲染目标纹理的过程中，Ogre会自动调用&nbsp; Root::getSingleton().getRenderSystem()-&gt;attachRenderTarget把这个纹理添加到Root的渲染目标中，也就是说每帧都会渲染到这个纹理。<br>TexturePtr texture = TextureManager::getSingleton().createManual( "RttTex", <br>&nbsp;ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_2D, <br>&nbsp;512, 512, 0, PF_R8G8B8, TU_RENDERTARGET );</p>
<p>2、获得渲染目标，有了渲染目标，才能给目标指定视口和摄像机<br>RenderTarget *rttTex = texture-&gt;getBuffer()-&gt;getRenderTarget();</p>
<p>3、给这个渲染目标指定摄像机，做了这步骤之后，每帧更新时就会把这个摄像机看到的东西渲染到texture中<br>Viewport *v = rttTex-&gt;addViewport( mReflectCam );</p>
<p>4、OK！</p>
<img src ="http://www.cppblog.com/mybios/aggbug/39764.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2007-12-27 21:06 <a href="http://www.cppblog.com/mybios/archive/2007/12/27/39764.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我们公司开始招人了~有技术的要钱的进来</title><link>http://www.cppblog.com/mybios/archive/2007/09/18/32417.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Tue, 18 Sep 2007 05:53:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2007/09/18/32417.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/32417.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2007/09/18/32417.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/32417.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/32417.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>杭州坤祥网络有限公司核心研发部招聘信息</span></p>
<p><span>公司简介：</span></p>
<p><span>杭州坤祥网络有限公司是一家年轻的，以高科技产业集团为背景，以计算机技术为核心的，软件开发和网络游戏开发的高新技术企业，因公司发展和产品研发，急需大量优秀游戏人才的加入，公司提供舒适的办公环境，优越的待遇，每周</span><span>40</span><span>个工作时，会让你全身心的投入到工作中。现所招的部门是核心研发部，分别是核心研发组，研发管理组以及产品管理组</span><span>.</span><span>我们不仅仅希望</span><span>为空缺的位置找到合适的人选，更希望为优秀的人提供最杰出的合作伙伴！</span></p>
<p><span>如果你有自信，并且符合我们的要求</span><span>,</span><span>我们非常期待您的到来！</span></p>
<p>&nbsp;</p>
<p><span>以下为核心研发部程序员基本职位要求：</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>大学本科以上学历，计算机软件或数学专业等相关专业；</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>精通</span><span>C++</span><span>语言、</span><span>STL</span><span>技术；</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>精通设计模式理论及应用；</span></p>
<p><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>良好的面向对象编程习惯；</span></p>
<p><span><span>5.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>良好的文档习惯；</span></p>
<p><span><span>6.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>良好的英文阅读能力，命名用词准确。</span></p>
<p>&nbsp;</p>
<p><span>招聘职位</span><span>:</span></p>
<h1><span><span>第1章</span></span><span> </span><span>程序组</span></h1>
<h2><span><span>1.1节 </span></span><span>服务端</span></h2>
<p><span>主要职责</span><span>:</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>依据应用设计案，进行数据库架构、数据表分析；</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>负责数据库业务逻辑处理分析与架构；</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>负责数据库性能优化方案供给、维护方案供给；</span></p>
<p><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>负责服务端系统架构设计与实现；</span></p>
<p><span><span>5.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>负责服务端各类技术方案供给与相关实现方案；</span></p>
<p><span><span>6.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>负责服务端性能优化方案供给与实现；</span></p>
<p><span><span>7.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>配合</span><span>IDE</span><span>系统及功能开发；</span></p>
<p><span><span>8.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>协调客户端系统及功能开发。</span></p>
<p><span>职位要求</span><span>:</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>程序员基本职位要求；</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>2</span><span>年以上</span><span>WIN32</span><span>、</span><span>VC++</span><span>平台开发经验；</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>1</span><span>年以上</span><span>3D</span><span>网游服务端数据库设计经验；</span></p>
<p><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>精通</span><span>MS SQL Server</span><span>数据库优先；</span></p>
<p><span><span>5.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>精通数据库存储过程技术、数据库优化技术；</span></p>
<p><span><span>6.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>精通数据库建模技术、精通</span><span>ERStudio</span><span>建模优先；</span></p>
<p><span><span>7.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>1</span><span>年以上网游服务端开发经验；</span></p>
<p><span><span>8.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>精通</span><span>socket</span><span>编程；</span></p>
<p><span><span>9.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>精通</span><span>SQL server</span><span>等数据库编程技术；</span></p>
<p><span><span>10.<span>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>精通多线程编程，有良好的算法和数学基础。</span></p>
<p><span>薪资</span><span>:9000</span><span>—</span><span>12000RMB</span></p>
<p>&nbsp;</p>
<h2><span><span>1.2节 </span></span><span>3D</span><span>开发</span></h2>
<p><span>主要职责</span><span>:</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>程序员基本职位要求；</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>2</span><span>年以上</span><span>WIN32</span><span>、</span><span>VC++</span><span>平台开发经验；</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>1</span><span>年以上</span><span>3D</span><span>网游客户端开发经验；</span></p>
<p><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>良好的高等数学与计算机图形学基础；</span></p>
<p><span><span>5.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>精通</span><span>DirectX 3D</span><span>或</span><span>OpenGL</span><span>；</span></p>
<p><span><span>6.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>熟悉</span><span>Ogre3D</span><span>引擎者优先；</span></p>
<p><span><span>7.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>良好的客户端优化思路；</span></p>
<p><span><span>8.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>熟悉</span><span>3D</span><span>裁减等等算法；</span></p>
<p><span><span>9.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>精通地形、水体、阴影等各类</span><span>3D</span><span>技术与实现；</span></p>
<p><span>职位要求</span><span>:</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>负责各类</span><span>3D</span><span>技术方案供给及实现方案；</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>为客户端、</span><span>IDE</span><span>开发等职位提供</span><span>3D</span><span>技术支持；</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>负责</span><span>3D</span><span>功能开发；</span></p>
<p><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>熟悉游戏相关图形图像编程理论、算法</span></p>
<p><span>薪资</span><span>:8000</span><span>—</span><span>10000RMB</span></p>
<p>&nbsp;</p>
<h2><span><span>1.3节 </span></span><span>客户端逻辑</span></h2>
<p><span>主要职责</span><span>:</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>负责客户端系统架构设计与实现；</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>负责客户端各类技术方案供给与相关实现方案；</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>负责客户端性能优化方案供给与实现；</span></p>
<p><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>配合</span><span>IDE</span><span>系统及功能开发；</span></p>
<p><span><span>5.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>配合服务端系统及功能开发；</span></p>
<p><span><span>6.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>协调</span><span>3D</span><span>功能开发。</span></p>
<p><span>职位要求</span><span>:</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>程序员基本职位要求；</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>2</span><span>年以上</span><span>WIN32</span><span>、</span><span>VC++</span><span>平台开发经验；</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>1</span><span>年以上</span><span>3D</span><span>网游客户端逻辑开发经验；</span></p>
<p><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>有一定的高等数学与计算机图形学基础；</span></p>
<p><span><span>5.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>精通</span><span>DirectX 3D</span><span>或</span><span>OpenGL</span><span>；</span></p>
<p><span>薪资</span><span>:6000</span><span>—</span><span>8000RMB</span></p>
<p>&nbsp;</p>
<h2><span><span>1.4节 </span></span><span>IDE</span><span>开发</span></h2>
<p><span>主要职责</span><span>:</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>程序员基本职位要求；</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>2</span><span>年以上</span><span>WIN32</span><span>、</span><span>VC++</span><span>平台开发经验；</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>精通</span><span>MFC</span><span>界面开发；</span></p>
<p><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>1</span><span>年以上</span><span>3D</span><span>网游编辑器开发</span></p>
<p><span><span>5.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>熟悉</span><span>DirectX 3D</span><span>或</span><span>OpenGL</span><span>；</span></p>
<p><span><span>6.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>熟悉</span><span>Ogre3D</span><span>引擎者优先；</span></p>
<p><span>职位要求</span><span>:</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>负责</span><span>IDE</span><span>系统架构与实现；</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>负责</span><span>IDE</span><span>功能架构与实现，并协调相关服务端、客户端功能开发、相关数据输入输出规范；</span></p>
<p><span>薪资</span><span>:6000</span><span>—</span><span>8000RMB</span></p>
<p>&nbsp;</p>
<p><span>备注</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>工作地</span><span>:</span><span>杭州滨江信诚路</span><span>99</span><span>号</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>休息</span><span>:</span><span>双休</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>转证以后公司提供良好的福利待遇</span></p>
<p><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>简历请投</span><span>: kunxianghr@163.com</span></p>
<p><span><span>5.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>联系</span><span>QQ</span><span>：</span><span>673979897</span></p>
<p><span><span>6.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>联系电话：</span><span>13588838310</span><span>（</span><span>Linda</span><span>转接）</span><span>9am</span><span>—６</span><span>pm</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/mybios/aggbug/32417.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2007-09-18 13:53 <a href="http://www.cppblog.com/mybios/archive/2007/09/18/32417.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>魔兽3贴图方法</title><link>http://www.cppblog.com/mybios/archive/2007/08/28/31043.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Tue, 28 Aug 2007 10:57:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2007/08/28/31043.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/31043.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2007/08/28/31043.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/31043.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/31043.html</trackback:ping><description><![CDATA[关键在于他的贴图的索引方式。如下所示。明眼人就能看出规律来。<br>只能说这么多了。公司有保密制度。请见谅！<br><br><img height=256 alt="" src="http://www.cppblog.com/images/cppblog_com/mybios/Lords_Grass.tga.jpg" width=512 border=0>
<img src ="http://www.cppblog.com/mybios/aggbug/31043.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2007-08-28 18:57 <a href="http://www.cppblog.com/mybios/archive/2007/08/28/31043.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>终于实现了魔兽3贴图算法，发图留念</title><link>http://www.cppblog.com/mybios/archive/2007/08/28/31021.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Tue, 28 Aug 2007 07:00:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2007/08/28/31021.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/31021.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2007/08/28/31021.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/31021.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/31021.html</trackback:ping><description><![CDATA[魔兽3的地形贴图算法非常的巧妙。不过，认真观看他的地图编辑器和用工具导出他的地形贴图看看，还是可以摸出规律来的。<br><br><img height=627 alt="" src="http://www.cppblog.com/images/cppblog_com/mybios/WC3.JPG" width=808 border=0>
<img src ="http://www.cppblog.com/mybios/aggbug/31021.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2007-08-28 15:00 <a href="http://www.cppblog.com/mybios/archive/2007/08/28/31021.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于CEGUI的String的调试问题</title><link>http://www.cppblog.com/mybios/archive/2007/07/29/28914.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Sun, 29 Jul 2007 02:17:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2007/07/29/28914.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/28914.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2007/07/29/28914.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/28914.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/28914.html</trackback:ping><description><![CDATA[CEGUI的String不是std::string或std::wstring，而是自己实现的一个字符串类，他的功能跟std的string很接近。<br>但是，他支持unicode，内部存储是使用utf32编码规范来存储unicode字符，也就是说&nbsp;typedef&nbsp;&nbsp;uint32&nbsp;utf32; utf32*&nbsp;&nbsp;d_buffer;用这个32位无符号整型的数组来保存unicode字符串。优点是显而易见的，就是世界上所有字符都可以包囊进去，毕竟是32位啊！但是，缺点也出来了，有两点：<br>第一、内存占用过多，一个字符就要占4个字节，也太浪费了点；<br>第二、调试不方便，由于VS2005的调试窗口只支持ansi和utf16的格式，所以，CEGUI的String在调试器中只能看到一堆数字数组，而看不到字符，这是很郁闷的，每次要查看都要翻到内存那里看，而且还一堆乱码，超级麻烦。<br><br>解决办法：修改String类，使用utf16来代替CEGUI的utf32。<br>优点：<br>解决了内存占用过多的问题，一个字符只要2个字节就可以了；<br>解决了调试问题，VS2005直接支持utf16的显示。<br>缺点：<br>可能不支持全世界的字符，因为utf16不能表示超过16位的字符，但是，对于大多数国家的字符来说，已经足够了，毕竟windows2000/xp也是基于utf16编码的。<br><br>然后，下面是修改后的字符串类：<a title=CEGUIString href="http://www.cppblog.com/Files/mybios/CEGUIString.rar">CEGUIString</a><br>
<img src ="http://www.cppblog.com/mybios/aggbug/28914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2007-07-29 10:17 <a href="http://www.cppblog.com/mybios/archive/2007/07/29/28914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在windows下使用patch工具更新源码</title><link>http://www.cppblog.com/mybios/archive/2007/07/28/28900.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Sat, 28 Jul 2007 09:09:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2007/07/28/28900.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/28900.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2007/07/28/28900.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/28900.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/28900.html</trackback:ping><description><![CDATA[经常在网上看到有人发布patch文件来更新他们的开源代码，例如cegui、ogre等都使用这种形式来修bug或者增加一些小功能。<br>但是，我们下载到的patch文件，貌似是linux/unix的diff工具生成的，要用linux/unix的patch工具才能把补丁文件更新到源码中。<br>后来，我发现了个windows下可以使用的patch工具，网址如下：<a href="http://gnuwin32.sourceforge.net/packages/patch.htm">http://gnuwin32.sourceforge.net/packages/patch.htm</a><br>使用是很简单的，用命令行方式执行：<br>patch 源文件 补丁文件<br><br>例如我们有源文件test.cpp，下载了个补丁文件test.patch，那么执行patch test.cpp test.patch，就会自动把patch里的内容更新到test.cpp中去了。<br><br>PS：cygwin貌似也有这个工具吧。。以前看过里面好像还有diff工具，可以生成patch文件，呵呵。
<img src ="http://www.cppblog.com/mybios/aggbug/28900.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2007-07-28 17:09 <a href="http://www.cppblog.com/mybios/archive/2007/07/28/28900.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于GOOF的新版本</title><link>http://www.cppblog.com/mybios/archive/2007/07/18/28250.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Wed, 18 Jul 2007 01:21:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2007/07/18/28250.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/28250.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2007/07/18/28250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/28250.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/28250.html</trackback:ping><description><![CDATA[我们现在用的是比较老的版本了，昨天特意到官网上问那个作者，终于得到了明确答复，说是8月中旬就会发布新版本。贴一些作者说的话：<br><br><span class=postbody><font size=2>Yeah, I'm currently hard at work on the core engine, as the editor is nearly complete. The major feature I need to add for the editor is the ability to add new object definitions without needing to go through text files, but I'm a bit burned out on the editor part so I'm taking a break and working on one of the biggest engine features that needs some work: handling meshes. <br><br>Basically I'm reworking the MeshGameObject class completely so it's more viable for large worlds. <br><br>As far as features go before I release alpha, the list is still sorta large. <br><br>1. Finish the physics system so that it can be used for character movement. <br>2. An attachment system to be able to specify attachment locations on an object and attach any other object to it. <br>3. Mesh animation, animation blending, animation sharing between objects. <br>4. Character class which plays animations based on current state (movement direction, velocity, jumping, strafing, etc.) <br>5. Redo the mesh system (in progress). This is a biggy and involves a lot crazy stuff that is too complex to explain in bullet point. Basically, will be using all of Ogre's advanced features for mesh lods, material lods, etc. but also tie into background resource loading, load only the lods that are necessary, track which lods are currently loaded, etc. <br>6. Ability to add, update and delete meta objects from the editor using property dialog functionality. Once a meta object is updated, call a function on all objects that use that meta data so they can update themselves with newest data. <br>7. Managed material system <br>8. Create plugins of all dlls and dynamically load. <br>9. Create a viewer application that is separate from the editor and can load any world file. <br>10. Update the lighting system, particle system, to use new fading code based on updated mesh code <br><br>Those are my major todos, once finished and tested I release alpha. I will likely update CVS after I get the meta objects finished though. I may also fit in the vegetation system before I release alpha. How long will the above list take? Based on my current speed of development, 3 months. <br><br>I have a core list of features that I think are necessary for an engine, and they include: <br><br>1. Physics simulation, character movement, vehicles, damage, explosions, breakable objects <br>2. Lighting - ambient occlusion, realtime lighting and shadows. Lighting manager is required to control ambient, shadows when moving from interior to exterior <br>3. Trees and vegetation <br>4. Dynamic environment. Sky transitioning, clouds, fog, global ambient, sun position and direction, sun glare, dynamic shadows <br>5. Networking using ReplicaNet. Run GOOF engine in server mode where it doesn't initialize any rendering systems. Update all objects to know whether they're being created on standalone server or not. <br>6. Sound management, 2d sounds, 3d sounds, sound line, background music. <br>7. Doors, triggers, elevators <br>8. In-game cutscenes <br>9. Background loading, resource garbage collection, forced loading <br>10. AI framework <br>11. Character inventory, equipping with 3 clothing types: shared skeleton, individual skeleton, attached to bone <br>12. Terrain with splatting <br><br>The above will take me years unless I have help </font><img alt=Smile src="http://www.ogre3d.org/phpBB2addons/images/smiles/icon_smile.gif" border=0><br><br><span class=postbody><font size=2>Oh yeah, the editor is very nice now, in my opinion. <br><br>Not only did I port to wxWidgets, I fixed and added a lot of general features to the GOOF Engine Editor Tool (the tool for creating scenes for the GOOF engine). <br><br>1. Multi select objects from the selection dialog <br>2. Ctrl drag to box select objects in the viewport, or Alt drag to box unselect, with selection lines to show what you're selecting. <br>3. Option to orient objects to the normal of the collided object when in drag mode. Means you can basically drag things up walls now if you're in a room and the object, such as a painting, will orient to the wall you drag it along. <br>4. Redid the movement axis manipulator so it now moves to exactly where you want it to move to instead of sliding along crazily. <br>5. Added a line that shows what you're linking to when you are in link mode. <br>6. Tree view for the select dialog, with scene hierarchy <br>7. Ability to click and edit partition properties from the same select dialog, and shows objects under their partition with the active partition listed at the top. <br>8. Obviously, all the wxWidgets stuff such as window snapping, toolbar, menu, automatic viewport resizing, view menu which lists windows, redid all the open/save functionality to support a standard file dialog, etc. <br><br>Fixed tons of bugs. Undo system works now. Linking and unlinking objects fixed. Deleting multiple objects fixed when there are parent/child relationships between objects. The movement axis manipulator fixed. Fixed dragging over other objects - the object used to jump around crazily. <br><br>Probably tons more as well, but this is what I remember off the top of my head. </font><br><br><img src="http://www.larabie.net/ogre/GOOFEditorSep29-06.JPG" border=0></span></span>
<img src ="http://www.cppblog.com/mybios/aggbug/28250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2007-07-18 09:21 <a href="http://www.cppblog.com/mybios/archive/2007/07/18/28250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于GOOF的bug问题</title><link>http://www.cppblog.com/mybios/archive/2007/07/16/28157.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Mon, 16 Jul 2007 14:53:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2007/07/16/28157.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/28157.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2007/07/16/28157.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/28157.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/28157.html</trackback:ping><description><![CDATA[<p>使用了几天GOOF，发现他存在很多bug啊，什么缓存溢出，数组越界之类的。。很明显这个框架没有真正用在一个项目上的。我列举几个大问题吧。好让大家别到处碰壁。<br>首先，最严重的bug莫过于这个<br>vector&lt;CoreGameObject*&gt;::iterator itr = mObjects.begin();<br>for(; itr != mObjects.end(); ++itr)<br>所有这种写法都是错误的！要改成for(vector&lt;CoreGameObject*&gt;::iterator itr = mObjects.begin();<br>&nbsp;itr != mObjects.end(); ++itr)<br><br>其次，bool EnvironmentGameSystem::save(DataElementPtr element)这个函数没有实现，所以无法保存环境信息。<br><br>还有<br>&nbsp;void GridPartition::enumerateConnectedPartitions(vector&lt;CorePartition*&gt;&amp; connected)<br>&nbsp;{<br>&nbsp;&nbsp;//get surrounding grid cells within a certain radius<br>&nbsp;&nbsp;float loadRadius = mGridPartitionMgr-&gt;getGridCellLoadRadius();</p>
<p>&nbsp;&nbsp;//enumerate partitions<br>&nbsp;&nbsp;vector&lt;CorePartition*&gt; partitions;<br>&nbsp;&nbsp;mGridPartitionMgr-&gt;enumeratePartitions(partitions);</p>
<p>&nbsp;&nbsp;//iterate through and check distance<br>&nbsp;&nbsp;for(vector&lt;CorePartition*&gt;::iterator itr = partitions.begin(); itr != partitions.end(); ++itr)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;float distance = Vector3(getWorldPosition() - (*itr)-&gt;getWorldPosition()).length();<br>&nbsp;&nbsp;&nbsp;// add by 李锦俊 2007-7-16<br>&nbsp;&nbsp;&nbsp;// 不要返回自己作为邻居，会产生bug<br>&nbsp;&nbsp;&nbsp;if(distance &lt; loadRadius &amp;&amp; *itr != this)<br>&nbsp;&nbsp;&nbsp;&nbsp;connected.push_back(*itr);<br>&nbsp;&nbsp;}<br>&nbsp;}<br><br>再给出一个比较严重的bug<br>GOOFTranslationManipulator.h中的<br>&nbsp;&nbsp;// add by 李锦俊 2007-7-12<br>&nbsp;&nbsp;// 不要用魔术数，搞到缓存溢出<br>&nbsp;&nbsp;SceneNode* mNode[AT_LAST];<br>&nbsp;&nbsp;Entity* mEnt[AT_LAST];<br>&nbsp;&nbsp;Entity* mConeEnt[AT_LAST];<br>&nbsp;&nbsp;CollisionShapePtr mCol[AT_LAST];<br>&nbsp;&nbsp;AxisManipulatorHandle* mHandle[AT_LAST];<br><br>另外，CorePartition中的setSkyboxMaterial、setGlobalAmbient之类的代码貌似没用。准备弃之。<br></p>
<br>&nbsp;&nbsp;&nbsp;&nbsp;// add by 李锦俊 2007-7-16<br>&nbsp;&nbsp;&nbsp;&nbsp;// 这个算法暂时有问题，先屏蔽，以后再慢慢解决<br>&nbsp;&nbsp;&nbsp;&nbsp;//disable static geometry until it is fixed<br>&nbsp;&nbsp;&nbsp;&nbsp;if(false)// getStaticGeometryRule() == SGR_ALWAYS || (getStaticGeometryRule() == SGR_WHEN_NOT_PROX_IMMEDIATE &amp;&amp; getPartition()-&gt;getProximity() != CorePartition::PROX_IMMEDIATE)) <br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;willConvertToStaticGeometry = true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getPartition()-&gt;addObjectToConvertToStaticGeometry(this);<br>&nbsp;&nbsp;&nbsp;&nbsp;}
<img src ="http://www.cppblog.com/mybios/aggbug/28157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2007-07-16 22:53 <a href="http://www.cppblog.com/mybios/archive/2007/07/16/28157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于OGRE渲染引擎的地形插件PLSM2的编辑器GOOF</title><link>http://www.cppblog.com/mybios/archive/2007/07/06/27620.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Fri, 06 Jul 2007 12:28:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2007/07/06/27620.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/27620.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2007/07/06/27620.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/27620.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/27620.html</trackback:ping><description><![CDATA[这个地形引擎相当的不错，支持无限大，自动分页，局部载入，支持多贴图。但是，我初次的使用过程中遇到了两个问题，第一是不知道如何增加纹理贴图的数量，第二是不知道为何分页的地方会有裂缝，看来要慢慢阅读他的源码才行。<br><br><img height=768 alt="" src="http://www.cppblog.com/images/cppblog_com/mybios/goof.JPG" width=996 border=0>
<img src ="http://www.cppblog.com/mybios/aggbug/27620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2007-07-06 20:28 <a href="http://www.cppblog.com/mybios/archive/2007/07/06/27620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>经过将近一个月的努力，服务器框架终于搭建起来了</title><link>http://www.cppblog.com/mybios/archive/2007/06/05/25605.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Tue, 05 Jun 2007 15:12:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2007/06/05/25605.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/25605.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2007/06/05/25605.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/25605.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/25605.html</trackback:ping><description><![CDATA[<p>好久没更新blog了啊。找到新工作都已经很久了，本来在深圳做得好好的，公司突然又搬到杭州来了，没办法，跟着来了杭州。现在我做客户端逻辑与服务器引擎架构一起搞，好晕啊，天天加班做。幸好客户端是用现成的引擎，只是，不太喜欢现在这个引擎，Torque game engine advance，架构实在太差了，以后有机会一定要换成Ogre或Nebula2才行啊。<br><br>现在在开发一款全新的MMORPG游戏，现在是项目立项阶段，需要出技术演示，没办法啊，时间紧迫，我跟另外一个程序主管用了将近一个月完成了项目的第一个里程碑。完成了玩家登录、角色创建/删除、人物行走、多人在线、怪物生成与行走AI等等网络功能了，当然客户端方面也做好了。可惜项目主管不是我，图也不允许抓下来啊，对不起大家了。欢迎加QQ：30743734交流MMORPG开发。<br><br>明天爸爸要做肺部肿瘤切除手术了，祝愿他一切顺利啊，等他痊愈后我发誓要让他过上幸福的晚年生活。祝爸爸健康幸福。。。大伙们帮忙祝福一下吧，谢谢大家了。</p>
爸爸，请原谅儿子我的不孝，路途遥远，不能赶回来陪着您做手术，我以后一定会好好孝顺您的。 
<img src ="http://www.cppblog.com/mybios/aggbug/25605.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2007-06-05 23:12 <a href="http://www.cppblog.com/mybios/archive/2007/06/05/25605.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一年一度的农历新年快到了，拜个早年，顺便贴我的简历，希望找到好工作</title><link>http://www.cppblog.com/mybios/archive/2007/02/12/18687.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Mon, 12 Feb 2007 07:27:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2007/02/12/18687.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/18687.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2007/02/12/18687.html#Feedback</comments><slash:comments>23</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/18687.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/18687.html</trackback:ping><description><![CDATA[
		<div align="center">
				<table class="MsoNormalTable" cellspacing="0" cellpadding="0" width="650" border="0">
						<tbody>
								<tr>
										<td>
												<br />
												<b>个人基本简历</b>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<br />  
<div align="center"><table class="MsoNormalTable" cellspacing="1" cellpadding="0" width="657" border="0"><tbody><tr><td width="105"><br />姓　　名：</td><td width="188"><br />李锦俊 先生</td><td width="105"><br />国　　籍：</td><td><br />中国</td></tr><tr><td width="105"><br />目前住地：</td><td><br />广东江门</td><td><br />民　　族：</td><td><br />汉族</td></tr><tr><td width="105"><br />户 籍 地：</td><td><br />广东江门</td><td><br />身高体重：</td><td><br />170 cm 55 kg</td></tr><tr><td width="105"><br />婚姻状况：</td><td><br />未婚</td><td><br />年　　龄：</td><td><br />25 岁</td></tr></tbody></table></div><br />  
<div align="center"><table class="MsoNormalTable" cellspacing="0" cellpadding="0" width="650" border="0"><tbody><tr><td><br /><b>求职意向及工作经历</b></td></tr></tbody></table></div><br />  
<div align="center"><table class="MsoNormalTable" cellspacing="1" cellpadding="0" width="648" border="0"><tbody><tr><td width="103"><br />应聘职位：</td><td colspan="3"><br />2D/3D游戏开发（技术总监、主程序员、VC++高级程序员）</td></tr><tr><td width="103"><br />工作年限：</td><td width="185"><br />5年</td><td width="103"><br />职　　称：</td><td width="253"><br />高级</td></tr><tr><td width="103"><br />求职类型：</td><td width="185"><br />全职</td><td width="103"><br />可到职日期：</td><td><br />2007年春节之后</td></tr><tr><td width="103"><br />月薪要求：</td><td width="185"><br />8000以上</td><td width="103"><br />希望工作地区：</td><td nowrap=""><br />广州、江门、深圳</td></tr><tr><td width="103"><br />工作经历：</td><td colspan="3"><br />2002.5月～2004.4月 江门高正电脑 VC开发与B/S程序开发 主程序员 <br />2004.4月～2007.2月 长沙新冠数码科技公司 VC开发VOD视频点播系统 技术总监</td></tr></tbody></table></div><br />  
<div align="center"><table class="MsoNormalTable" cellspacing="0" cellpadding="0" width="650" border="0"><tbody><tr><td><br /><b>教育背景</b></td></tr></tbody></table></div><br />  
<div align="center"><table class="MsoNormalTable" cellspacing="1" cellpadding="0" width="648" border="0"><tbody><tr><td><br />毕业院校：</td><td colspan="3"><br />江门杜阮华侨中学 现就读长沙电大</td></tr><tr><td width="100"><br />最高学历：</td><td width="180"><br />高中</td><td width="100"><br />毕业日期：</td><td width="246"><br />2002 年</td></tr><tr><td><br />所学专业：</td><td width="180"><br />软件开发</td><td width="100"><br /> </td><td><br /> </td></tr><tr><td><br />培训经历：</td><td colspan="3"><br />经历了十几年的学校经历 还有很多经验 很早就能接触计算机 <br />1996年开始自学DOS及Windows3.1 <br />1997年开始自学Basic编程语言 <br />1999年开始自学DOS下的C语言编程 <br />2000年开始自学ASP、VB <br />2002年～2004年用VC/ASP/VB，做了十几个项目 <br />2003年开始自学C#.Net，做了两三个项目 <br />2004年至今一直使用VC，独立开发整套点歌系统 <br />2005年至今一直在自学2D/3D相关的技术（高数、图形学、Direct3D、DirectDraw、DirectShow）</td></tr></tbody></table></div><br />  
<div align="center"><table class="MsoNormalTable" cellspacing="0" cellpadding="0" width="650" border="0"><tbody><tr><td><br /><b>语言能力</b></td></tr></tbody></table></div><br />  
<div align="center"><table class="MsoNormalTable" cellspacing="1" cellpadding="0" width="648" border="0"><tbody><tr><td width="100"><br />外　　语：</td><td width="180"><br />英语　一般（能读懂各种英文参考资料）</td><td width="100"><br /> </td><td width="246"><br /> </td></tr><tr><td><br />国语水平：</td><td><br />非常流利</td><td width="100"><br />粤语水平：</td><td><br />非常流利</td></tr></tbody></table></div><br />  
<div align="center"><table class="MsoNormalTable" cellspacing="0" cellpadding="0" width="650" border="0"><tbody><tr><td><br /><b>工作能力及其他专长</b></td></tr></tbody></table></div><br />  
<div align="center"><table class="MsoNormalTable" cellspacing="1" cellpadding="0" width="648" border="0"><tbody><tr><td width="100"><br /> </td><td><br />精通C++语言、能熟练使用常用的设计模式；精通WIN32SDK，MFC开发平台。 <br />自学高等数学、线性代数、计算机图形学等等跟2D/3D有关的数学知识 <br />精通Direct3D、DirectDraw、DirectShow，熟悉其他的DirectX SDK开发。 <br />熟悉开源3D引擎OGRE，曾经自己改中文支持（用FreeType2），用来开发3D 点歌系统 <br />熟悉嵌入式脚本引擎，用以驱动3D点歌系统和计费系统的灵活设置 <br />熟悉Windows网络编程，熟悉TCP/IP协议及Winsock编程技术，用来开发多用户的点歌系统以及酒水传送模块； <br />熟悉windows多线程编程； <br />熟练进行Windows 各种界面开发； <br />熟常用的数据结构和算法，熟悉COM开发； <br />有良好规范的编程习惯； <br />能熟练阅读大量英文文档； <br />有良好的沟通与团队协作能力，能适应较大的工作压力。 <br />能独立策划中型开发项目,通过4年的VC工作开发经验,积累了很多知识,能独立开发VC项目,曾独立开发VOD视频点播系统,包括视频点播前台/计费系统/进销存/超市系统,与硬件衔接的导唱/语音识别/视频切换等等模块的独立开发.开发基于实时3D渲染的全新点歌系统<br />能独立开发B/S模式的应用程序，曾独立开发无线餐饮系统，进销存系统，CRM客户关系管理，OA都能独立开发。 <br />精通VC/ASP/SQL Server/HTML/Java Script等等技术（都是应用到工作中去的技术），曾用ASP.net独立完成一些政府机关的项目，对于ASP.Net和VB都比较熟悉，略懂Java。 <br />另外本人的电脑知识无论软件、硬件都比较熟悉，做出来的软件能跟硬件很好的衔接。精通Word/Excel/Photoshop等等办公应用软件的使用。 <br />因为本人在用友软件的代理商工作过2年时间。所以，对用友/金碟/速达等财务软件有比较系统的理解，并能在上面做二次开发。 <br />自学能力强，性格开朗，工作认真，一丝不苟，工作勤快。。。。</td></tr></tbody></table></div><br />  <br />  <br />  
<div align="center"><table class="MsoNormalTable" cellspacing="0" cellpadding="0" width="650" border="0"><tbody><tr><td><br /><b>个人联系方式</b>　</td></tr></tbody></table></div><br />  
<div align="center"><table class="MsoNormalTable" cellspacing="1" cellpadding="0" width="650" border="0"><tbody><tr><td><br />手　　机：</td><td><br /> 13664915121</td><td><br />ＱＱ号码：</td><td><br />30743734 </td></tr><tr><td><br />电子邮件：</td><td><br />mybios@21cn.com </td><td><br />个人主页：</td><td><br /><a href="/mybios">http://www.cppblog.com/mybios</a></td></tr><tr><td colspan="6"><br /><b>DEMO</b><b>演示</b>　(面试时再带上源码来看)</td></tr><tr height="0"><td width="3"></td><td width="121"></td><td width="189"></td><td width="121"></td><td width="212"></td><td width="3"></td></tr></tbody></table></div><br />  
<div align="center"><table class="MsoNormalTable" cellspacing="1" cellpadding="0" width="635" border="0"><tbody><tr><td width="99"><br />连连看</td><td width="533"><br />基于D3D9的2D游戏，部分用XML＋Lua驱动，核心算法写在C++中，只实现了单机版</td></tr><tr><td width="99"><br />锄大地</td><td width="533"><br />基于D3D9的2D游戏，部分用XML＋Lua驱动，核心算法写在C++中，只实现了单机版自己打自己（没什么意义）</td></tr><tr><td width="99"><br />GUI </td><td width="533"><br />参考了Ogre、irrLicht等等开源引擎做的一个游戏引擎，平台无关、渲染器无关，高度优化的GUI渲染引擎，速度比CEGUI快至少1/3，内存占用比CEGUI少2/3以上。使用了部分设计模式。</td></tr></tbody></table></div><br /> <img src ="http://www.cppblog.com/mybios/aggbug/18687.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2007-02-12 15:27 <a href="http://www.cppblog.com/mybios/archive/2007/02/12/18687.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VS2005类向导的问题</title><link>http://www.cppblog.com/mybios/archive/2006/12/31/17088.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Sun, 31 Dec 2006 07:51:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2006/12/31/17088.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/17088.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2006/12/31/17088.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/17088.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/17088.html</trackback:ping><description><![CDATA[以前用VS 6和VS2003，类向导生成的都是虚析构函数，但是到了VS2005，默认就不是虚析构函数了。<br />这会带来什么问题？我今天就遇到了一次。当我用VS2005类向导生成一个类，如<br />class BaseClass<br />{<br />public:<br />    BaseClass(){};<br />   ~BaseClass(){};<br />   virtual void VFun() = 0;<br />}<br /><br />然后，再生成一个类继承于他<br />class ProblemClass : public BaseClass<br />{<br />public:<br />    ProblemClass (){};<br />   ~ProblemClass (){};<br />   virtual void VFun(){};<br />}<br /><br />然后，执行以下代码：<br /><br />BaseClass *pClass = new ProblemClass ;<br />delete pClass ;<br /><br />如无以外，在delete的时候就会出现堆错误<br /><img src ="http://www.cppblog.com/mybios/aggbug/17088.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2006-12-31 15:51 <a href="http://www.cppblog.com/mybios/archive/2006/12/31/17088.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>硬件兼容性的陷阱，DrawIndexedPrimitiveUP的用法</title><link>http://www.cppblog.com/mybios/archive/2006/12/25/16840.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Mon, 25 Dec 2006 07:11:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2006/12/25/16840.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/16840.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2006/12/25/16840.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/16840.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/16840.html</trackback:ping><description><![CDATA[好好的一个程序，在我的电脑（ELSA X800 256M显卡）上运行一切正常，拿到别的电脑（845G内置显卡）上。啊。花屏～～赶快调试，幸好公司的电脑也有这种内置显卡的电脑。赶快用远程调试。谁知这一调试，就花了我整整一个上午。。。赶快写下来。。。<br /><br />最终排差的原因是DrawIndexedPrimitiveUP最后一个参数<em>VertexStreamZeroStride</em> ，这个参数是用来指定顶点所占的字节数。我自作聪明的把顶点结构后增加了一个自己用的数据，如：正常的顶点结构<br />struct CUSTOMVERTEX<br />{<br /> FLOAT x, y, z,rhw;<br /> DWORD color;<br /> float u,v;<br />};<br /><br />我改了之后的顶点结构：<br />struct CUSTOMVERTEX<br />{<br /> FLOAT x, y, z,rhw;<br /> DWORD color;<br /> float u,v;<br />DWORD dwMyData; // 用来保存我自己用的数据<br />};<br /><br />结果，在我的显卡上一切正常，这个数据也有用，然后DrawIndexedPrimitiveUP的时候，也会根据最后的参数sizeof(CUSTOMVERTEX)顺利的读取相应的顶点。但是，拿到845G的内置显卡上就死活花屏。后来终于知道是这个原因，于是解决办法就是把dwMyData去掉，放到顶点结构外面去。<br /><br />顺便说说DrawIndexedPrimitiveUP的用法：<br /><strong>HRESULT DrawIndexedPrimitiveUP(</strong><br />  <b>D3DPRIMITIVETYPE</b><i>PrimitiveType</i><b>, // 图原的类型</b><br />  <b>UINT</b><i>MinVertexIndex</i><b>,  // 指定0</b><br />  <b>UINT</b><i>NumVertices</i><b>,  // 指定需要渲染的顶点的数量（如一个矩形可以由4个顶点组成，然后通过顶点索引来达到渲染2个三角形的效果，那么这里就应该填写4，而不是6）</b><br />  <b>UINT</b><i>PrimitiveCount</i><b>, // 要渲染的图原的数量（如一个矩形，由两个三角形组成，就应该填写2）</b><br />  <b>CONST void *</b><i>pIndexData</i><b>, // 索引数据指针</b><br />  <b>D3DFORMAT</b><i>IndexDataFormat</i><strong>, // 索引数据格式，一般为D3DFMT_INDEX16或D3DFMT_INDEX32</strong> <br />  <b>CONST void*</b><i>pVertexStreamZeroData</i><b>, // 顶点数据指针</b><br />  <b>UINT</b><i>VertexStreamZeroStride // 顶点大小一般为sizeof(顶点结构)</i><br /><b>);</b><br /><br />记得默认情况下渲染三角形的顺序是逆时针的（初学者经常范这个错误，本来想渲染一个矩形，结果一个三角形顺时间、另一个三角形逆时针，结果渲染出来只看到一个三角形了，被背面剔除掉了）。<br /><img src ="http://www.cppblog.com/mybios/aggbug/16840.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2006-12-25 15:11 <a href="http://www.cppblog.com/mybios/archive/2006/12/25/16840.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>3D 引擎中的 GUI 渲染优化补完</title><link>http://www.cppblog.com/mybios/archive/2006/12/24/16795.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Sun, 24 Dec 2006 06:14:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2006/12/24/16795.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/16795.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2006/12/24/16795.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/16795.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/16795.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 昨天提到的我想到了个优化渲染的新方法。。今天花了一个早上终于实现了。5555其实不需要这么久，偏偏是一个小小的BUG花了我两个小时。马上进入正题吧。原来的GUI渲染系统是每个Window都继承于RenderCache，每个RenderCache中保存着需要渲染的矩形信息，然后每帧渲染的时候一个个矩形添加到渲染器中再动态修改顶点坐标（一个矩形对应6个顶点）。慢就慢在动态修改顶点！今天实现的新方法，就...&nbsp;&nbsp;<a href='http://www.cppblog.com/mybios/archive/2006/12/24/16795.html'>阅读全文</a><img src ="http://www.cppblog.com/mybios/aggbug/16795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2006-12-24 14:14 <a href="http://www.cppblog.com/mybios/archive/2006/12/24/16795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>3D 引擎中 GUI 渲染的优化</title><link>http://www.cppblog.com/mybios/archive/2006/12/23/16778.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Sat, 23 Dec 2006 14:32:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2006/12/23/16778.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/16778.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2006/12/23/16778.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/16778.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/16778.html</trackback:ping><description><![CDATA[前几天的BLOG中说了一些我的3D引擎GUI的渲染部分原理，这几天做到ListCtrl控件的时候，当我添加很多Item进去的时候（几乎满屏的12Px汉字，一个汉字两个三角形，相当于上万个三角形了），FPS降得吓人，Debug版只有18FPS，Release版也只有60FPS。。优化、优化、还是优化！优化之后，FPS终于达到了令人满意的500FPS左右了。且听我慢慢说来。<br /><br />首先是用我的引擎内部剖析分析了代码的瓶颈（Profile这东西真的有用啊，让我很容易就找到了慢的原因，参见GPG3 1.17《实时的层次化性能评测》），发现处理时间主要被Cache算法和渲染两部份占了，于是，我在想，渲染慢是正常的（当时的想法比较弱智，后文有术），所以，我打算从Cache算法着手。首先是优化了ListCtrl的Cache算法，把那些在屏幕外的Item的Visible属性设置成false（我的算法中Visible为false，Cache部分算法就直接跳过），于是速度一下子就上来了，Release版本达到了130FPS。但是，还是慢啊。怎么办？剖析之后，发现大部分的处理时间都集中在渲染部分，我之前的想法是渲染慢是正常的，所以暂时无法解决。。。<br /><br />下班的时候，出去遛了一圈，路上突然想到了我渲染算法中另外一个跟渲染速度有关的东西，动态修改顶点数据！难道是这里的原因？回来后马上测试，把动态修改的代码屏蔽，直接每帧渲染10000三角形，妈呀，1000＋的FPS！完全否定了我之前的想法（渲染慢是正常的），唉，想想也是，每秒千万、上亿个三角形生成速度的显卡，对于区区一万个三角形怎么会慢呢...既然找到原因，就要优化啊，现在找到原因是因为动态修改顶点导致，想到了以前看过一篇文章说顶点数据存储的位置（即CreateVertexBuffer的D3DPool参数），说到做到，把原来的D3DPOOL_MANAGED改成D3DPOOL_SYSMEMORY，哇，速度一下子提升到360FPS左右！想起来原因也是简单的，既然要每帧Lock这么多数据，那么顶点数据需要从显存-&gt;CPU处理，然后CPU提交回显存，总线交换也太频繁了，如果改成SYSMEMORY的话，就只需要从CPU-&gt;显存就可以了。<br /><br />然后我又想，有没有更好的优化方法？答案是有的。。最快的修改内存数据的方法是什么？当然是直接读写内存啊！那么我想到了DrawPrimitiveUP！把顶点数据直接new出来，然后DrawPrimitiveUP提交！改成这样后，速度再度提升！达到惊人的500FPS！<br /><br />最后，我把DrawPrimitiveUP改成DrawIndexedPrimitiveUP，那么顶点数量也减少了。但是奇怪的是速度缺没有更快，反而慢了一点点（慢了5～10FPS左右），但是，我用了DrawIndexedPrimitiveUP，我之后还有更好的优化算法准备实现。通过DrawIndexedPrimitiveUP，但是还没做好。。所以先卖个关子了。明天搞好的话再写Blog。<br /><br />唉，回头看了下自己写的东西，乱七八糟。都不知道有没有人看得懂啊。不管了。知之为知之，不知为不知吧。呵呵，看不懂的请评论一下。<br /><br />写代码去了～～<img src ="http://www.cppblog.com/mybios/aggbug/16778.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2006-12-23 22:32 <a href="http://www.cppblog.com/mybios/archive/2006/12/23/16778.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天碰到了LINK2005的问题</title><link>http://www.cppblog.com/mybios/archive/2006/12/22/16719.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Fri, 22 Dec 2006 03:14:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2006/12/22/16719.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/16719.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2006/12/22/16719.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/16719.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/16719.html</trackback:ping><description><![CDATA[烦人的错误。。搞了一个多小时才解决，写下来记录一下。<br /><br />解决办法：保证需要链接的几个项目的运行时库使用同一个类型就OK了！例如我的工程中有GameCore、Plugin_D3D9RenderSystem、Plugin_Win32Platform三个工程，那么就去设置每个工程的C/C++ -&gt;代码生成-&gt;运行时库，统一设置成“多线程 DLL(/MD)”，就可以了。如果其中一个不是MD，就会出现以下的错误。很烦人。希望同样遇到这个问题的朋友能少走弯路<br /><br />以下是链接错误信息：<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: int __thiscall std::ios_base::width(int)" (<a href="mailto:?width@ios_base@std@@QAEHH@Z">?width@ios_base@std@@QAEHH@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: int __thiscall std::ios_base::width(void)const " (<a href="mailto:?width@ios_base@std@@QBEHXZ">?width@ios_base@std@@QBEHXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: int __thiscall std::ios_base::flags(void)const " (<a href="mailto:?flags@ios_base@std@@QBEHXZ">?flags@ios_base@std@@QBEHXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: bool __thiscall std::ios_base::good(void)const " (<a href="mailto:?good@ios_base@std@@QBE_NXZ">?good@ios_base@std@@QBE_NXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: int __thiscall std::ios_base::rdstate(void)const " (<a href="mailto:?rdstate@ios_base@std@@QBEHXZ">?rdstate@ios_base@std@@QBEHXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: static unsigned int __cdecl std::char_traits&lt;char&gt;::length(char const *)" (<a href="mailto:?length@?$char_traits@D@std@@SAIPBD@Z">?length@?$char_traits@D@std@@SAIPBD@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "class std::basic_ostream&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt; &amp; __cdecl std::operator&lt;&lt;&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;(class std::basic_ostream&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt; &amp;,class std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt; const &amp;)" (<a href="mailto:??$?6_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@0@AAV10@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@@Z">??$?6_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@0@AAV10@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: wchar_t __thiscall std::basic_ios&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt;::fill(void)const " (<a href="mailto:?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WXZ">?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: class std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt; __thiscall std::basic_ostringstream&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;::str(void)const " (<a href="mailto:?str@?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ">?str@?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: __thiscall std::basic_ostringstream&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;::basic_ostringstream&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;(int)" (<a href="mailto:??0?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@H@Z">??0?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@H@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: class std::basic_ostream&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt; &amp; __thiscall std::basic_ostream&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt;::operator&lt;&lt;(int)" (<a href="mailto:??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@H@Z">??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@H@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: __thiscall std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;(class std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt; const &amp;)" (<a href="mailto:??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV01@@Z">??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV01@@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: void __thiscall std::basic_ostream&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt;::_Osfx(void)" (<a href="mailto:?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ">?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: class std::basic_ostream&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt; * __thiscall std::basic_ios&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt;::tie(void)const " (<a href="mailto:?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ">?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: void __thiscall std::basic_streambuf&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt;::_Lock(void)" (<a href="mailto:?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ">?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: void __thiscall std::basic_streambuf&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt;::_Unlock(void)" (<a href="mailto:?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ">?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: unsigned short __thiscall std::basic_streambuf&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt;::sputc(wchar_t)" (<a href="mailto:?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEG_W@Z">?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEG_W@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: __thiscall std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;::~basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;(void)" (<a href="mailto:??1?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@XZ">??1?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@XZ</a>) 已经在 Plugin_Win32Platform.lib(Plugin_Win32Platform.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: __thiscall std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;(wchar_t const *)" (<a href="mailto:??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_W@Z">??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_W@Z</a>) 已经在 Plugin_Win32Platform.lib(Plugin_Win32Platform.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: __thiscall std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;(void)" (<a href="mailto:??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@XZ">??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@XZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: void __thiscall std::basic_ostringstream&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;::`vbase destructor'(void)" (<a href="mailto:??_D?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ">??_D?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: class std::basic_ostream&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt; &amp; __thiscall std::basic_ostream&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt;::flush(void)" (<a href="mailto:?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ">?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: class std::basic_streambuf&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt; * __thiscall std::basic_ios&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt;::rdbuf(void)const " (<a href="mailto:?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ">?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: void __thiscall std::basic_ios&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt;::setstate(int,bool)" (<a href="mailto:?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z">?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: class std::locale __thiscall std::ios_base::getloc(void)const " (<a href="mailto:?getloc@ios_base@std@@QBE?AVlocale@2@XZ">?getloc@ios_base@std@@QBE?AVlocale@2@XZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: static unsigned int __cdecl std::ctype&lt;wchar_t&gt;::_Getcat(class std::locale::facet const * *)" (<a href="mailto:?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@@Z">?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: wchar_t __thiscall std::ctype&lt;wchar_t&gt;::widen(char)const " (<a href="mailto:?widen@?$ctype@_W@std@@QBE_WD@Z">?widen@?$ctype@_W@std@@QBE_WD@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: class std::locale::facet const * __thiscall std::locale::_Getfacet(unsigned int)const " (<a href="mailto:?_Getfacet@locale@std@@QBEPBVfacet@12@I@Z">?_Getfacet@locale@std@@QBEPBVfacet@12@I@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: __thiscall std::locale::~locale(void)" (<a href="mailto:??1locale@std@@QAE@XZ">??1locale@std@@QAE@XZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: void __thiscall std::locale::facet::_Register(void)" (<a href="mailto:?_Register@facet@locale@std@@QAEXXZ">?_Register@facet@locale@std@@QAEXXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: void __thiscall std::locale::facet::_Incref(void)" (<a href="mailto:?_Incref@facet@locale@std@@QAEXXZ">?_Incref@facet@locale@std@@QAEXXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: __thiscall std::locale::id::operator unsigned int(void)" (<a href="mailto:??Bid@locale@std@@QAEIXZ">??Bid@locale@std@@QAEIXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: static unsigned short __cdecl std::char_traits&lt;wchar_t&gt;::eof(void)" (<a href="mailto:?eof@?$char_traits@_W@std@@SAGXZ">?eof@?$char_traits@_W@std@@SAGXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: static bool __cdecl std::char_traits&lt;wchar_t&gt;::eq_int_type(unsigned short const &amp;,unsigned short const &amp;)" (<a href="mailto:?eq_int_type@?$char_traits@_W@std@@SA_NABG0@Z">?eq_int_type@?$char_traits@_W@std@@SA_NABG0@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "bool __cdecl std::operator&lt;&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;(class std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt; const &amp;,class std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt; const &amp;)" (<a href="mailto:??$?M_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@0@Z">??$?M_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@0@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32RenderWindow.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "protected: wchar_t const * __thiscall std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;::_Myptr(void)const " (<a href="mailto:?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IBEPB_WXZ">?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IBEPB_WXZ</a>) 已经在 Plugin_Win32Platform.lib(Plugin_Win32Platform.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: wchar_t const * __thiscall std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;::c_str(void)const " (<a href="mailto:?c_str@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEPB_WXZ">?c_str@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEPB_WXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32LogSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "protected: char const * __thiscall std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;::_Myptr(void)const " (<a href="mailto:?_Myptr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IBEPBDXZ">?_Myptr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IBEPBDXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: unsigned int __thiscall std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;::size(void)const " (<a href="mailto:?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ">?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: char const * __thiscall std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;::c_str(void)const " (<a href="mailto:?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ">?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: __thiscall std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;::~basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;(void)" (<a href="mailto:??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ">??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: __thiscall std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;(char const *)" (<a href="mailto:??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z">??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: __thiscall std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;(class std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt; const &amp;)" (<a href="mailto:??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z">??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: bool __thiscall std::ios_base::fail(void)const " (<a href="mailto:?fail@ios_base@std@@QBE_NXZ">?fail@ios_base@std@@QBE_NXZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: class std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt; &amp; __thiscall std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;::erase(unsigned int,unsigned int)" (<a href="mailto:?erase@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@II@Z">?erase@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@II@Z</a>) 已经在 Plugin_Win32Platform.lib(Plugin_Win32Platform.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: void __thiscall std::basic_ios&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt;::clear(int,bool)" (<a href="mailto:?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z">?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: unsigned int __thiscall std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;::size(void)const " (<a href="mailto:?size@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIXZ">?size@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIXZ</a>) 已经在 Plugin_Win32Platform.lib(Plugin_Win32Platform.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "protected: wchar_t * __thiscall std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;::_Myptr(void)" (<a href="mailto:?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEPA_WXZ">?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEPA_WXZ</a>) 已经在 Plugin_Win32Platform.lib(Plugin_Win32Platform.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: __thiscall std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;(void)" (<a href="mailto:??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ">??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: int __thiscall std::basic_streambuf&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt; &gt;::sputn(wchar_t const *,int)" (<a href="mailto:?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPB_WH@Z">?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPB_WH@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: static unsigned int __cdecl std::char_traits&lt;wchar_t&gt;::length(wchar_t const *)" (<a href="mailto:?length@?$char_traits@_W@std@@SAIPB_W@Z">?length@?$char_traits@_W@std@@SAIPB_W@Z</a>) 已经在 Plugin_Win32Platform.lib(Plugin_Win32Platform.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: class std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt; &amp; __thiscall std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;::assign(char const *,unsigned int)" (<a href="mailto:?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z">?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: class std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt; &amp; __thiscall std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;::append(char const *,unsigned int)" (<a href="mailto:?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z">?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />libcpmt.lib(ios.obj) : error LNK2005: "public: static void __cdecl std::ios_base::_Addstd(class std::ios_base *)" (<a href="mailto:?_Addstd@ios_base@std@@SAXPAV12@@Z">?_Addstd@ios_base@std@@SAXPAV12@@Z</a>) 已经在 msvcprt.lib(MSVCP80.dll) 中定义<br />libcpmt.lib(ios.obj) : error LNK2005: "private: static void __cdecl std::ios_base::_Ios_base_dtor(class std::ios_base *)" (<a href="mailto:?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z">?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z</a>) 已经在 msvcprt.lib(MSVCP80.dll) 中定义<br />libcpmt.lib(locale0.obj) : error LNK2005: "private: static class std::locale::_Locimp * __cdecl std::locale::_Getgloballocale(void)" (<a href="mailto:?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ">?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ</a>) 已经在 msvcprt.lib(MSVCP80.dll) 中定义<br />libcpmt.lib(locale0.obj) : error LNK2005: "private: static void __cdecl std::locale::facet::facet_Register(class std::locale::facet *)" (<a href="mailto:?facet_Register@facet@locale@std@@CAXPAV123@@Z">?facet_Register@facet@locale@std@@CAXPAV123@@Z</a>) 已经在 msvcprt.lib(MSVCP80.dll) 中定义<br />libcpmt.lib(locale0.obj) : error LNK2005: "public: static void __cdecl std::_Locinfo::_Locinfo_dtor(class std::_Locinfo *)" (<a href="mailto:?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z">?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z</a>) 已经在 msvcprt.lib(MSVCP80.dll) 中定义<br />libcpmt.lib(locale0.obj) : error LNK2005: "public: class std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt; &amp; __thiscall std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;::operator=(char const *)" (<a href="mailto:??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z">??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z</a>) 已经在 msvcprt.lib(MSVCP80.dll) 中定义<br />libcpmt.lib(locale0.obj) : error LNK2005: "private: static class std::locale::_Locimp * __cdecl std::locale::_Init(void)" (<a href="mailto:?_Init@locale@std@@CAPAV_Locimp@12@XZ">?_Init@locale@std@@CAPAV_Locimp@12@XZ</a>) 已经在 msvcprt.lib(MSVCP80.dll) 中定义<br />libcpmt.lib(locale0.obj) : error LNK2005: "public: static void __cdecl std::_Locinfo::_Locinfo_ctor(class std::_Locinfo *,char const *)" (<a href="mailto:?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z">?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z</a>) 已经在 msvcprt.lib(MSVCP80.dll) 中定义<br />libcpmt.lib(xlock.obj) : error LNK2005: "public: __thiscall std::_Lockit::_Lockit(int)" (<a href="mailto:??0_Lockit@std@@QAE@H@Z">??0_Lockit@std@@QAE@H@Z</a>) 已经在 msvcprt.lib(MSVCP80.dll) 中定义<br />libcpmt.lib(xlock.obj) : error LNK2005: "public: __thiscall std::_Lockit::~_Lockit(void)" (<a href="mailto:??1_Lockit@std@@QAE@XZ">??1_Lockit@std@@QAE@XZ</a>) 已经在 msvcprt.lib(MSVCP80.dll) 中定义<br />msvcprt.lib(MSVCP80.dll) : error LNK2005: "public: class std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt; &amp; __thiscall std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt;::assign(class std::basic_string&lt;wchar_t,struct std::char_traits&lt;wchar_t&gt;,class std::allocator&lt;wchar_t&gt; &gt; const &amp;)" (<a href="mailto:?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@ABV12@@Z">?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@ABV12@@Z</a>) 已经在 Plugin_Win32Platform.lib(Win32InputSystem.obj) 中定义<br />   正在创建库 ../Lib/GameCore.lib 和对象 ../Lib/GameCore.exp<br />../Bin/GameCore.dll : fatal error LNK1169: 找到一个或多个多重定义的符号<img src ="http://www.cppblog.com/mybios/aggbug/16719.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2006-12-22 11:14 <a href="http://www.cppblog.com/mybios/archive/2006/12/22/16719.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>这段时间开发3D引擎啊，正在做GUI部分</title><link>http://www.cppblog.com/mybios/archive/2006/12/19/16630.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Tue, 19 Dec 2006 13:30:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2006/12/19/16630.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/16630.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2006/12/19/16630.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/16630.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/16630.html</trackback:ping><description><![CDATA[前段时间看了很多很多的3D相关的基础书，感觉上学到了很多东西，但是不知道做什么好。后来，用DXUT做了两个小游戏，连连看和纸牌，虽然都是2D的，但是感觉上还是觉得自己进步了。<br /><br />接下来的一段日子里，是时候继续学3D的东西了，于是萌生了个做游戏引擎的想法。我是个想做就做的人，虽然我也知道自己是不自量力，但是，只要我肯去做，即使做不好，也起码能学到东西啊，把学过的东西拿来用一番，就能有感觉了。<br /><br />说说引擎部分的构建，引擎部分的FrameWork主要参考了GPG3的1.2那个框架模式，采用Unicode编译，感觉上那个模式比较好用，但是太复杂了点，于是我简化了他，基本上只保留了任务系统。使用平台无关的插件方式把Win32和Direct3D9的模块做了出来（当然只封装了一小部分函数），把Ogre的基础库全部拿来主义（哈哈，主要就是数学库、工具库等等）。而声音引擎也留了接口，很好扩展了。<br /><br />然后，现在正在做GUI部分，主要还是说说GUI的渲染部分吧。GUI其中有两个我认为比较关键的地方，其一是渲染文字部分，其二是渲染窗口部分。下面说说我的做法<br />文字渲染部分：<br />我的做法是使用FreeType2读取TTF文件，然后当要渲染文字的时候，看哪个用到的文字就load哪个文字，先获得这个文字的大小，然后在贴图中找到一个空闲的区域（我的贴图大小是512×512，也可以设置），然后blt到贴图中，真正渲染的时候就把这个贴图纹理坐标贴到两个三角形上就完成了一个文字的渲染了。<br />在贴图中找空闲区域我有个比较特别的做法，就是每个需要渲染的文字维护一个RefCount引用计数，例如一个屏幕里10个“我”字，那么“我”的引用计数就是10，当“我”字不需要再渲染的时候（引用计数为0），此文字的贴图区域就可以被其他文字所覆盖。<br />窗口渲染部分：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> GAMECORE_EXPORT GUIRenderCache<br /><img id="Codehighlighter1_38_831_Open_Image" onclick="this.style.display='none'; Codehighlighter1_38_831_Open_Text.style.display='none'; Codehighlighter1_38_831_Closed_Image.style.display='inline'; Codehighlighter1_38_831_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_38_831_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_38_831_Closed_Text.style.display='none'; Codehighlighter1_38_831_Open_Image.style.display='inline'; Codehighlighter1_38_831_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_38_831_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/images/dot.gif" /></span><span id="Codehighlighter1_38_831_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 不允许显式创建，只可以继承</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    GUIRenderCache(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">GUIRenderCache(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 添加到渲染队列</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> AddCache(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> GUIRenderQuad</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> quad)<br /><img id="Codehighlighter1_188_262_Open_Image" onclick="this.style.display='none'; Codehighlighter1_188_262_Open_Text.style.display='none'; Codehighlighter1_188_262_Closed_Image.style.display='inline'; Codehighlighter1_188_262_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_188_262_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_188_262_Closed_Text.style.display='none'; Codehighlighter1_188_262_Open_Image.style.display='inline'; Codehighlighter1_188_262_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_188_262_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/images/dot.gif" /></span><span id="Codehighlighter1_188_262_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        m_vtGUIRenderQuad.insert(GUIRenderQuadPtr(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> GUIRenderQuad(quad)));<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 渲染需要Cache队列</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> RenderCache(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br /><img id="Codehighlighter1_307_612_Open_Image" onclick="this.style.display='none'; Codehighlighter1_307_612_Open_Text.style.display='none'; Codehighlighter1_307_612_Closed_Image.style.display='inline'; Codehighlighter1_307_612_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_307_612_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_307_612_Closed_Text.style.display='none'; Codehighlighter1_307_612_Open_Image.style.display='inline'; Codehighlighter1_307_612_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_307_612_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/images/dot.gif" /></span><span id="Codehighlighter1_307_612_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 从新Cache队列</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_bDirty)<br /><img id="Codehighlighter1_341_401_Open_Image" onclick="this.style.display='none'; Codehighlighter1_341_401_Open_Text.style.display='none'; Codehighlighter1_341_401_Closed_Image.style.display='inline'; Codehighlighter1_341_401_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_341_401_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_341_401_Closed_Text.style.display='none'; Codehighlighter1_341_401_Open_Image.style.display='inline'; Codehighlighter1_341_401_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_341_401_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/images/dot.gif" /></span><span id="Codehighlighter1_341_401_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            ClearCacheList();<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            DoCache();<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            m_bDirty </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 添加到渲染器</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(VectorGUIRenderQuad::const_iterator iter </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> m_vtGUIRenderQuad.begin() ; iter </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> m_vtGUIRenderQuad.end() ; iter </span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br /><img id="Codehighlighter1_537_609_Open_Image" onclick="this.style.display='none'; Codehighlighter1_537_609_Open_Text.style.display='none'; Codehighlighter1_537_609_Closed_Image.style.display='inline'; Codehighlighter1_537_609_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_537_609_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_537_609_Closed_Text.style.display='none'; Codehighlighter1_537_609_Open_Image.style.display='inline'; Codehighlighter1_537_609_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_537_609_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/images/dot.gif" /></span><span id="Codehighlighter1_537_609_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            Systems::GetSingleton().GetGUIRendererSystem()</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">AddCache(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">iter);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 清空cache队列</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> ClearCacheList(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br /><img id="Codehighlighter1_656_688_Open_Image" onclick="this.style.display='none'; Codehighlighter1_656_688_Open_Text.style.display='none'; Codehighlighter1_656_688_Closed_Image.style.display='inline'; Codehighlighter1_656_688_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_656_688_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_656_688_Closed_Text.style.display='none'; Codehighlighter1_656_688_Open_Image.style.display='inline'; Codehighlighter1_656_688_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_656_688_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/images/dot.gif" /></span><span id="Codehighlighter1_656_688_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        m_vtGUIRenderQuad.clear();<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Cache需要渲染的项目</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_742_743_Open_Image" onclick="this.style.display='none'; Codehighlighter1_742_743_Open_Text.style.display='none'; Codehighlighter1_742_743_Closed_Image.style.display='inline'; Codehighlighter1_742_743_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_742_743_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_742_743_Closed_Text.style.display='none'; Codehighlighter1_742_743_Open_Image.style.display='inline'; Codehighlighter1_742_743_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> DoCache()</span><span id="Codehighlighter1_742_743_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/images/dot.gif" /></span><span id="Codehighlighter1_742_743_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    VectorGUIRenderQuad m_vtGUIRenderQuad;    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 渲染队列</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000"> m_bDirty; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 需要重新Cache需要渲染的项目</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span></div><br /><br /><br />每个Window（一个Window是一个抽象类，Static/Button/Dialog等等所有窗口都是继承于Window）都继承于GUIRenderCache对象，当窗口的某个属性（如WindowText）改变时，就会把m_bDirty标记设置成true。每帧渲染的时候调用RenderCache。那么如果窗口的属性没有改变，就只需要把m_vtGUIRenderQuad的东西渲染出来；如果属性改变了（即m_bDirty为true），则调用DoCache，由继承类（如Static/Button等）改写这个函数，计算贴图坐标、三角形坐标等等东西都放在这个函数里。总的来说，Cache之后速度会比Cache之前快起码一半以上。<br /><br />好了，睡觉去了。<img src ="http://www.cppblog.com/mybios/aggbug/16630.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2006-12-19 21:30 <a href="http://www.cppblog.com/mybios/archive/2006/12/19/16630.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>顶点声明</title><link>http://www.cppblog.com/mybios/archive/2006/12/02/15891.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Sat, 02 Dec 2006 08:42:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2006/12/02/15891.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/15891.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2006/12/02/15891.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/15891.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/15891.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 顶点声明																																																																从概念上讲，顶点声明是对顶点直接内存访问（DMA）以及图形流水线的														tessellator												引擎进行编程的一种方法。顶点声明简要地表示了数据的布局及...&nbsp;&nbsp;<a href='http://www.cppblog.com/mybios/archive/2006/12/02/15891.html'>阅读全文</a><img src ="http://www.cppblog.com/mybios/aggbug/15891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2006-12-02 16:42 <a href="http://www.cppblog.com/mybios/archive/2006/12/02/15891.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VS2003下编译Windows计算器</title><link>http://www.cppblog.com/mybios/archive/2006/12/02/15889.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Sat, 02 Dec 2006 08:10:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2006/12/02/15889.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/15889.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2006/12/02/15889.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/15889.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/15889.html</trackback:ping><description><![CDATA[工程已经放上，<a href="http://www.cppblog.com/Files/mybios/calc.rar">下载回去编译就行</a>，放个贴图：<br /><br /><img height="309" alt="Calc.JPG" src="http://www.cppblog.com/images/cppblog_com/mybios/ArticlePics/Calc.JPG" width="480" border="0" /><img src ="http://www.cppblog.com/mybios/aggbug/15889.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2006-12-02 16:10 <a href="http://www.cppblog.com/mybios/archive/2006/12/02/15889.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天遇到了郁闷的C函数，幸好遇到高手帮忙解决了</title><link>http://www.cppblog.com/mybios/archive/2006/11/30/15817.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Thu, 30 Nov 2006 08:30:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2006/11/30/15817.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/15817.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2006/11/30/15817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/15817.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/15817.html</trackback:ping><description><![CDATA[用C函数来转换Unicode和ANSI文字<br /><br />char sChar[MAX_PATH];<br />const WCHAR wChar[] = L"我的朋友";<br />// 把wChar这个Unicode字符串转换成ANSI字符串，保存到sChar，并且返回ANSI的字符串大小，如果失败，则返回-1<br />  wcstombs(sChar, wChar, MAX_PATH);<br /><br />这样是运行不过不去的，总是返回-1。<br /><br />后来经人提醒，需要在调用wcstombs之前要先设置代码页：<br /><br />char sChar[MAX_PATH];<br />const WCHAR wChar[] = L"我的朋友";<br /><br />// 设置代码页为默认代码页<br />  _tsetlocale(LC_ALL,_T(""));<br />// 把wChar这个Unicode字符串转换成ANSI字符串，保存到sChar，并且返回ANSI的字符串大小，如果失败，则返回-1<br />  wcstombs(sChar, wChar, MAX_PATH);<br /><br /><br />这样就可以了！不用调用烦人的WideCharToMultiByte！多好啊！<br />相反的函数：<strong>mbstowcs，可以从ANSI转换到Unicode</strong><img src ="http://www.cppblog.com/mybios/aggbug/15817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mybios/" target="_blank">李锦俊</a> 2006-11-30 16:30 <a href="http://www.cppblog.com/mybios/archive/2006/11/30/15817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转贴】DXUT编程指南(四):通过DXUT使用设备</title><link>http://www.cppblog.com/mybios/archive/2006/11/22/15531.html</link><dc:creator>李锦俊</dc:creator><author>李锦俊</author><pubDate>Wed, 22 Nov 2006 03:35:00 GMT</pubDate><guid>http://www.cppblog.com/mybios/archive/2006/11/22/15531.html</guid><wfw:comment>http://www.cppblog.com/mybios/comments/15531.html</wfw:comment><comments>http://www.cppblog.com/mybios/archive/2006/11/22/15531.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mybios/comments/commentRss/15531.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mybios/services/trackbacks/15531.html</trackback:ping><description><![CDATA[
		<p>
				<font size="5">通过DXUT使用设备</font>
				<br />DirectX设备的创建在DXUT中得到了改进。你可以让你的应用程序直接创建设备而其它有框架提供的特征仍然可用。<br /><a href="http://blog.csdn.net/ntwilford/archive/2006/08/02/1009763.aspx#创建设备">创建设备</a><br /><a href="http://blog.csdn.net/ntwilford/archive/2006/08/02/1009763.aspx#使用你自己的设备">选择最佳的设备设置<br />修改可用的设备设置<br />降为软件顶点处理<br />使用你自己的设备</a></p>
		<p>
				<font size="4">
						<a name="创建设备">
						</a>创建设备</font>
				<br />典型地，你将通过标准的Direct3D方法创建设备<br />HRESULT CreateDevice(<br />    UINT                  Adapter,<br />    D3DDEVTYPE            DeviceType,<br />    HWND                  hFocusWindow,<br />    DWORD                 BehaviorFlags,<br />    D3DPRESENT_PARAMETERS *pPresentationParameters,<br />    IDirect3DDevice9      **ppReturnedDeviceInterface<br />);<br />这个方法需要有效的适配器，设备类型(HAL or REF),窗口句柄，行为标志(software/hardware vertex processing 和其它驱动标志)，以及呈现参数(presentation parameters).此外，D3DPRESENT_PARAMETER结构体还拥有大量的成员指定后备缓冲区，多重采样设定，交换效果，窗口模式，深度模版缓冲，刷新率，呈现间隔，以及呈现标志。<br />为所有这些参数选择有效的设定是具有挑战性的。框架通过DXUTCreateDevice函数简化了这一选择过程。<br />HRESULT DXUTCreateDevice(<br />    UINT AdapterOrdinal  = D3DADAPTER_DEFAULT,<br />    BOOL bWindowed       = TRUE,<br />    INT nSuggestedWidth  = 640,<br />    INT nSuggestedHeight = 480,<br />    LPDXUTCALLBACKISDEVICEACCEPTABLE pCallbackIsDeviceAcceptable     = NULL,<br />    LPDXUTCALLBACKMODIFYDEVICESETTINGS pCallbackModifyDeviceSettings = NULL<br />);<br />最基本的用法是全部使用缺省参数调用：<br />DXUTCreateDevice();<br />通过这样的调用框架使用缺省设置创建一个在大多数情况下可用的设备。缺省的设置如下：<br /></p>
		<table>
				<tbody>
						<tr>
								<th>Direct3D Creation Flag</th>
								<th>Description</th>
								<th>Default Value from <strong>DXUTCreateDevice</strong></th>
						</tr>
						<tr>
								<td>AdapterFormat parameter of <a href="http://blog.csdn.net/ntwilford/archive/2006/08/02/IDirect3D9__CheckDeviceFormat.htm">CheckDeviceFormat</a></td>
								<td>Adapter surface format.</td>
								<td>Desktop display mode, or <a href="http://blog.csdn.net/ntwilford/archive/2006/08/02/D3DFORMAT.htm">D3DFMT_X8R8G8B8</a> if the desktop display mode is less than 32 bits.</td>
						</tr>
						<tr>
								<td>Adapter parameter of <strong>IDirect3D9::CreateDevice</strong></td>
								<td>Display adapter ordinal.</td>
								<td>
										<a href="http://blog.csdn.net/ntwilford/archive/2006/08/02/D3DADAPTER_DEFAULT.htm">D3DADAPTER_DEFAULT</a>
								</td>
						</tr>
						<tr>
								<td>
										<strong>D3DPRESENT_PARAMETERS</strong>. BackBufferCount</td>
								<td>Number of back buffers.</td>
								<td>2, indicating triple buffering.</td>
						</tr>
						<tr>
								<td>
										<strong>D3DPRESENT_PARAMETERS</strong>. BackBufferFormat</td>
								<td>Back buffer format.</td>
								<td>Desktop display mode, or <strong>D3DFMT_X8R8G8B8</strong> if the desktop display mode is less than 32 bits.</td>
						</tr>
						<tr>
								<td>
										<strong>D3DPRESENT_PARAMETERS</strong>. AutoDepthStencilFormat</td>
								<td>Depth format of the automatic depth-stencil surface that the device will create.</td>
								<td>
										<strong>D3DFMT_D16</strong> if the backbuffer format is 16 bits or less, or <strong>D3DFMT_D32</strong> otherwise.</td>
						</tr>
						<tr>
								<td>The DeviceType parameter of <strong>IDirect3D9::CreateDevice</strong></td>
								<td>Enumerated type of the device.</td>
								<td>D3DDEVTYPE_HAL if available, otherwise D3DDEVTYPE_REF or failure code if neither is available.</td>
						</tr>
						<tr>
								<td>
										<strong>D3DPRESENT_PARAMETERS</strong>. MultiSampleQuality</td>
								<td>Quality level.</td>
								<td>MultiSampleQuality = 0, indicating multisampling is disabled.</td>
						</tr>
						<tr>
								<td>
										<strong>D3DPRESENT_PARAMETERS</strong>. Flags</td>
								<td>Presentation parameters flags.</td>
								<td>
										<a href="http://blog.csdn.net/ntwilford/archive/2006/08/02/D3DPRESENTFLAG.htm">D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL</a>
								</td>
						</tr>
						<tr>
								<td>
										<strong>D3DPRESENT_PARAMETERS</strong>. PresentationInterval</td>
								<td>Presentation interval.</td>
								<td>
										<a href="http://blog.csdn.net/ntwilford/archive/2006/08/02/D3DPRESENT.htm">D3DPRESENT_INTERVAL_IMMEDIATE</a> for windowed mode, or <strong>D3DPRESENT_INTERVAL_DEFAULT</strong> for full-screen mode.</td>
						</tr>
						<tr>
								<td>
										<strong>D3DPRESENT_PARAMETERS</strong>. FullScreen_RefreshRateInHz</td>
								<td>Rate at which the display adapter refreshes the screen.</td>
								<td>0, indicating windowed mode.</td>
						</tr>
						<tr>
								<td>
										<strong>D3DPRESENT_PARAMETERS</strong>. BackBufferWidth and .BackBufferHeight</td>
								<td>Display mode resolution.</td>
								<td>640 x 480 pixels for windowed mode, or the desktop resolution for full-screen mode.</td>
						</tr>
						<tr>
								<td>
										<strong>D3DPRESENT_PARAMETERS</strong>. AutoDepthStencilFormat</td>
								<td>Stencil format of the automatic depth-stencil surface that the device will create.</td>
								<td>
										<strong>D3DFMT_D16</strong> if the backbuffer format is 16 bits or less, or <strong>D3DFMT_D32</strong> otherwise.</td>
						</tr>
						<tr>
								<td>
										<strong>D3DPRESENT_PARAMETERS</strong>. SwapEffect</td>
								<td>Swap effect.</td>
								<td>D3DSWAPEFFECT_DISCARD</td>
						</tr>
						<tr>
								<td>BehaviorFlags parameter of <strong>IDirect3D9::CreateDevice</strong></td>
								<td>Vertex processing flags.</td>
								<td>
										<a href="http://blog.csdn.net/ntwilford/archive/2006/08/02/D3DCREATE.htm">D3DCREATE_HARDWARE_VERTEXPROCESSING</a> if supported, otherwise <strong>D3DCREATE_SOFTWARE_VERTEXPROCESSING</strong>.</td>
						</tr>
						<tr>
								<td>
										<strong>D3DPRESENT_PARAMETERS</strong>. Windowed</td>
								<td>Windowed or full-screen mode.</td>
								<td>true, indicating windowed mode.</td>
						</tr>
						<tr>
								<td>hFocusWindow parameter of <strong>CreateDevice</strong></td>
								<td>Handle to the created window (see <a href="http://blog.csdn.net/ntwilford/archive/2006/08/02/Using_Application_Windows_with_DXUT.htm">Using Application Windows with DXUT</a>).</td>
								<td>hWndFocus parameter of <a href="http://blog.csdn.net/ntwilford/archive/2006/08/02/DXUTSetWindow.htm">DXUTSetWindow</a></td>
						</tr>
						<tr>
								<td>
										<strong>D3DPRESENT_PARAMETERS</strong>. hDeviceWindow</td>
								<td>Handle to the device window.</td>
								<td>hWndDeviceFullScreen or hWndDeviceWindowed parameters of <strong>DXUTSetWindow</strong></td>
						</tr>
						<tr>
								<td>
										<strong>D3DPRESENT_PARAMETERS</strong>. EnableAutoDepthStencil</td>
								<td>Depth-stencil buffer creation flag.</td>
								<td>true.</td>
						</tr>
				</tbody>
		</table>
		<br />应用程序可以通过参数传递给CreateDevice来更多的控制设备的创建，这将比使用缺省的方式更好。例如，你可以通过nSuggestedWidth and nSuggestedHeight参数改变窗口的尺寸。<br />DXUTCreateDevice(<br />    D3DADAPTER_DEFAULT,<br />    false,<br />    1024,<br />    786,<br />    NULL,<br />    NULL,<br />    NULL<br />);<br />要得到更多的控制权，应用程序可以使用这两个可选的回调函数，LPDXUTCALLBACKISDEVICEACCEPTABLE and LPDXUTCALLBACKMODIFYDEVICESETTINGS.<p><font size="4"><a name="选择最佳的设备设置"></a>选择最佳的设备设置</font><br />你可以使用IsDeviceAcceptable回调函数帮助框架为你的应用程序选择最佳的设备设置，就像下面的代码：<br />bool CALLBACK IsDeviceAcceptable(<br />D3DCAPS9*     pCaps,<br />D3DFORMAT     AdapterFormat,<br />D3DFORMAT     BackBufferFormat,<br />bool          bWindowed,<br />void*         pUserContext )<br />{<br />    // TODO: return true for acceptable settings and false otherwise.<br />    return true;<br />}<br />这个回调函数的模型基于LPDXUTCALLBACKISDEVICEACCEPTABLE原型(This callback function is modeled on the prototype LPDXUTCALLBACKISDEVICEACCEPTABLE)，框架为每个唯一的以下5个设置的有效组合调用这个函数一次：<br />D3DDEVTYPE DeviceType;<br />UINT       AdapterOrdinal;<br />D3DFORMAT  AdapterFormat;<br />D3DFORMAT  BackBufferFormat;<br />bool       Windowed;<br />注意适配器序号和设备类型没有直接的传入回调函数，而是分别作为D3DCAPS9结构体的成员。<br />通过这个回调函数，应用程序可以拒绝任何它不支持的或不想要的组合。例如，应用程序可以使用下面的代码拒绝16bits的后备缓冲区格式和所有至少不能支持像素着色器PS_2_0的设备： <br />bool CALLBACK IsDeviceAcceptable(<br />    D3DCAPS9*     pCaps,<br />    D3DFORMAT     AdapterFormat,<br />    D3DFORMAT     BackBufferFormat,<br />    bool          bWindowed )<br />{<br />    if( pCaps-&gt;PixelShaderVersion &lt; D3DPS_VERSION(2,0) )<br />     return false;<br />    if( BackBufferFormat == D3DFMT_X1R5G5B5 || BackBufferFormat == D3DFMT_R5G6B5 )<br />        return false;<br />    return true;<br />}</p><p>为每个唯一的组合调用回调函数后，框架排列剩下的可用组合，并选择它们当中最好的。排名较高的如下：<br />D3DDEVTYPE_HAL，获取硬件加速<br />如果应用程序以全屏模式显示，框架更趋向于使用匹配桌面格式的适配器格式，这样可以在全屏与窗口之间快速切换。例外的是，如果桌面显示模式小于32位，框架更趋向于D3DFMT_X8R8G8B8.<br />匹配适配器格式的后备缓冲区格式<br />在选择了这些排名高的组合后，要创建设备，行为标志和呈现参数仍然是需要的。对于这些设置,Direct3D使用上面表中的缺省值。</p><p><font size="4"><a name="修改可用的设备设置"></a>修改可用的设备设置</font><br />应用程序可以通过使用第二个可选的回调函数修改对框架可用的设置，这个函数是ModifyDeviceSettings:<br />bool CALLBACK ModifyDeviceSettings(<br />    DXUTDeviceSettings* pDeviceSettings,<br />    const D3DCAPS9*     pCaps )<br />{<br />    // TODO: Include device creation