﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-月下的博客</title><link>http://www.cppblog.com/cty41/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 15 Apr 2026 23:45:28 GMT</lastBuildDate><pubDate>Wed, 15 Apr 2026 23:45:28 GMT</pubDate><ttl>60</ttl><item><title>聚焦观感</title><link>http://www.cppblog.com/cty41/archive/2016/03/21/213080.html</link><dc:creator>月下圆舞曲</dc:creator><author>月下圆舞曲</author><pubDate>Mon, 21 Mar 2016 05:57:00 GMT</pubDate><guid>http://www.cppblog.com/cty41/archive/2016/03/21/213080.html</guid><wfw:comment>http://www.cppblog.com/cty41/comments/213080.html</wfw:comment><comments>http://www.cppblog.com/cty41/archive/2016/03/21/213080.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cty41/comments/commentRss/213080.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cty41/services/trackbacks/213080.html</trackback:ping><description><![CDATA[<div>抽空看完了今年的最佳影片（<a href="https://movie.douban.com/subject/25954475/">聚焦</a>），讲的是记者揭露教会性侵儿童的过程，故事内容和我们算是八杆子打不到一块，但整个事态发展特别像是重新修正失败项目。</div><div></div><div>报社新调来的主编示意要深挖一个神父性侵的案件，逐渐发现问题越来越大，牵扯到了教会上层，但更可怕的是其实所有人都知道这事，许多人试图向报社反应，甚至连深挖的记者小组组长也经手过旧案，而受到教会压力后就放手了。于是所有人都不再作声了。</div><div>最后组长去找律师旧友做牧师人数确认的时候，律师愤怒地说：我只是在做我的工作，他们的脏事与我无关。</div><div></div><div>看到这里是不是觉得似曾相识？是否也骂过类似的话？（我的code写的没问题，策划的案子太渣了）</div><div></div><div>如果你也像剧中律师说过类似的话，一定要警觉。如果不能改变现状，及早走人。麻木不仁不仅会毁了产品，它更会从精神上摧毁你。</div><div></div><div></div><div></div><div></div><div>&nbsp;</div><div></div><div></div><div></div><img src ="http://www.cppblog.com/cty41/aggbug/213080.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cty41/" target="_blank">月下圆舞曲</a> 2016-03-21 13:57 <a href="http://www.cppblog.com/cty41/archive/2016/03/21/213080.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何做优化</title><link>http://www.cppblog.com/cty41/archive/2016/03/10/212965.html</link><dc:creator>月下圆舞曲</dc:creator><author>月下圆舞曲</author><pubDate>Thu, 10 Mar 2016 03:33:00 GMT</pubDate><guid>http://www.cppblog.com/cty41/archive/2016/03/10/212965.html</guid><wfw:comment>http://www.cppblog.com/cty41/comments/212965.html</wfw:comment><comments>http://www.cppblog.com/cty41/archive/2016/03/10/212965.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cty41/comments/commentRss/212965.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cty41/services/trackbacks/212965.html</trackback:ping><description><![CDATA[<div>&nbsp; 最近看了同事做的优化，带alpha贴图改为RGBA444(降低50%)，判断pack的texture占用率不到50%则使用non-pot （降低50-75%）</div><div>对游戏包的优化，降低冗余，减少动画，音频的重复多份保存（大小降低均在30%+）</div><div></div><div>简单的方法，当初我也考虑过，唯一差的一层纸就是我都没去试验和实践。</div><div></div><div>造成这个差别的原因除了行动上的懒惰，经验上的差距，也是方法论上的欠缺。</div><div>我们做开发的不能光想着要求美术极限优化，更应该从技术方法上着手规模性的优化</div><div>美术的优化可以说是将m减少到n，而我们程序可以做到从100%到50%。</div><div></div><div>最后贴下milo大神归纳的优化游戏包大小的核心四大策略：</div><div>1.没被引用的数据</div><div>2.冗余数据</div><div>3.无损压缩=》如何找到秘技帮助无损压缩</div><div>4.有损压缩</div><img src ="http://www.cppblog.com/cty41/aggbug/212965.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cty41/" target="_blank">月下圆舞曲</a> 2016-03-10 11:33 <a href="http://www.cppblog.com/cty41/archive/2016/03/10/212965.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>五年感想</title><link>http://www.cppblog.com/cty41/archive/2016/03/05/212933.html</link><dc:creator>月下圆舞曲</dc:creator><author>月下圆舞曲</author><pubDate>Sat, 05 Mar 2016 00:45:00 GMT</pubDate><guid>http://www.cppblog.com/cty41/archive/2016/03/05/212933.html</guid><wfw:comment>http://www.cppblog.com/cty41/comments/212933.html</wfw:comment><comments>http://www.cppblog.com/cty41/archive/2016/03/05/212933.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/cty41/comments/commentRss/212933.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cty41/services/trackbacks/212933.html</trackback:ping><description><![CDATA[1.去年对我意义重大：试图股市赌博，大败而归。我最敬爱的亲人过世。我妻子怀孕。钱没那么重要，心才是。<br />2.工作五年，值得骄傲的事只有最早参与制作海盗IOS版，后来自己做的热血足球卖了2w套。这两个阶段我自己心中追求很明确，所以设置短期目标很重要。<br />3.进了鹅场快两年，到最近思想才开始转变，很惭愧。腾讯其实提供了很好的学习资源，这半年里接触了研发部的几位大神人物，感受到了无论是待人处事，还是技术能力上的差距<br />4.做功能，即使很小小功能也能做成花来。只要肯想肯做，但这样要投入2倍甚至3倍的时间。就像《闻香识女人》里帕西诺说的：我知道这是正确的路，但我并没有走，因为我知道这条路走起来太难了。<br />5.提意见：这个是看&#8220;创新工场&#8221;书中开篇就说到的，不要通过批评来拔高自己，提意见是善意地为了帮助对方更好的提升。这一点上，对待同事，对待家人，我都做的很差。<br />6.决定游戏成功的因素？3年前认为是态度-》4年前认为是设计-》现在转变为人<br />7.坚持记录，人的大脑擅长迸发灵感，但缺不擅长记忆他们。<br /><br /><img src ="http://www.cppblog.com/cty41/aggbug/212933.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cty41/" target="_blank">月下圆舞曲</a> 2016-03-05 08:45 <a href="http://www.cppblog.com/cty41/archive/2016/03/05/212933.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UE3状态机的坑</title><link>http://www.cppblog.com/cty41/archive/2016/03/04/212930.html</link><dc:creator>月下圆舞曲</dc:creator><author>月下圆舞曲</author><pubDate>Fri, 04 Mar 2016 13:28:00 GMT</pubDate><guid>http://www.cppblog.com/cty41/archive/2016/03/04/212930.html</guid><wfw:comment>http://www.cppblog.com/cty41/comments/212930.html</wfw:comment><comments>http://www.cppblog.com/cty41/archive/2016/03/04/212930.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cty41/comments/commentRss/212930.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cty41/services/trackbacks/212930.html</trackback:ping><description><![CDATA[&nbsp; 现在的项目算是半个ue3项目移植，策划要求将原先的教程添加新步骤，第一个教程很快写完，但是却花了一下午的时间来查一个bug：<br />&nbsp; 当时看到的现象是怪物格挡次数少了一次（原先是3次），乍一看是个很普通的问题，仔细追了下代码，发现是由于格挡计次额外多了一次，所以在第二次判断就跳出了，但问题是额外的那一次自增操作的进入位置是xxxPawn里某个state的label又重入了一次，但是在这里加断点发现，堆栈没有更上层了（也就是说是直接从c++层调用过来的），于是就怀疑到是否是新加的代码误执行了PopState函数（popState的c++实现会调用gotolabel），最后发现才是某一个if中少加了新的判定，因此没有跳过这段pop。。<br />&nbsp; 这就是UE3状态机的一个暗藏逻辑，一个actor原先在state A中，A里有默认执行的Begin标签，那么在第一次进入这个state A时，会默认走一遍Begin的逻辑，但如果再pushState B(注意，不是gotostate B)，那么当将popState B的时候依然还是将state A的Begin标签再走一遍的。<br />&nbsp; 回头看这段思路，其实错误很简单，但是由于游戏原先教程并非是我们写的，使得我并不了解其实各种跳转的原因，切state的逻辑大量在c++层和脚本层穿插混合，使得整个调试过程中，即使花在定位问题的时间也是很多（如果可以看到堆栈，估计半小时就定位到问题了）<br />&nbsp; 除了吐槽FSM之外，我也在质疑自己的思考方式，遇到这种问题，花费半个人力日尝试去完全理解原作者的逻辑是否是最高效的方式呢？如果我当初选择直接按照旧代码的逻辑完全拷贝粘贴同样的代码，是否就能规避掉这个问题？<br />&nbsp;&nbsp;<br /><img src ="http://www.cppblog.com/cty41/aggbug/212930.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cty41/" target="_blank">月下圆舞曲</a> 2016-03-04 21:28 <a href="http://www.cppblog.com/cty41/archive/2016/03/04/212930.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重新回归</title><link>http://www.cppblog.com/cty41/archive/2016/03/04/212922.html</link><dc:creator>月下圆舞曲</dc:creator><author>月下圆舞曲</author><pubDate>Fri, 04 Mar 2016 05:57:00 GMT</pubDate><guid>http://www.cppblog.com/cty41/archive/2016/03/04/212922.html</guid><wfw:comment>http://www.cppblog.com/cty41/comments/212922.html</wfw:comment><comments>http://www.cppblog.com/cty41/archive/2016/03/04/212922.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/cty41/comments/commentRss/212922.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cty41/services/trackbacks/212922.html</trackback:ping><description><![CDATA[&nbsp; 这阵子回望，发现自己已经快工作了五年，期间迷茫过，也曾尝试奋力一搏，但和自己做游戏的理想相差甚远，博客也是从正式工作后就断了。如今想想，竟然没什么值得骄傲的作为。<br />&nbsp; 放平心态，仔细规划下面的五年，为了做出自己喜欢的游戏（咱这次就得具体化目标啦），再次努力。<img src ="http://www.cppblog.com/cty41/aggbug/212922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cty41/" target="_blank">月下圆舞曲</a> 2016-03-04 13:57 <a href="http://www.cppblog.com/cty41/archive/2016/03/04/212922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VS断点的免费log</title><link>http://www.cppblog.com/cty41/archive/2011/12/29/163151.html</link><dc:creator>月下圆舞曲</dc:creator><author>月下圆舞曲</author><pubDate>Thu, 29 Dec 2011 14:57:00 GMT</pubDate><guid>http://www.cppblog.com/cty41/archive/2011/12/29/163151.html</guid><wfw:comment>http://www.cppblog.com/cty41/comments/163151.html</wfw:comment><comments>http://www.cppblog.com/cty41/archive/2011/12/29/163151.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cty41/comments/commentRss/163151.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cty41/services/trackbacks/163151.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;用vs也用了有将近3，4年了。。断点还真没掌握全，以前也就用用内存断点，昨天老大教了下断点print，相当的强大。。在代码上加了断点后右键断点选择When Hit，然后就是强大的print了！大致就是如果你想在执行到那一行代码的时候，print某个变量值，直接加{varname}，查看指针的值就是{*ptr}，类成员也可以：{obj.memA},这种print尤其是在对需要灵活查看的一些update函数上就非常有用，免得再往代码里加log了～<br />&nbsp;&nbsp;&nbsp;佩服vs强大的同时顺便再惭愧下。。<img src ="http://www.cppblog.com/cty41/aggbug/163151.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cty41/" target="_blank">月下圆舞曲</a> 2011-12-29 22:57 <a href="http://www.cppblog.com/cty41/archive/2011/12/29/163151.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DirectX 10的State Object管理策略</title><link>http://www.cppblog.com/cty41/archive/2011/12/29/156129.html</link><dc:creator>月下圆舞曲</dc:creator><author>月下圆舞曲</author><pubDate>Thu, 29 Dec 2011 14:35:00 GMT</pubDate><guid>http://www.cppblog.com/cty41/archive/2011/12/29/156129.html</guid><wfw:comment>http://www.cppblog.com/cty41/comments/156129.html</wfw:comment><comments>http://www.cppblog.com/cty41/archive/2011/12/29/156129.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cty41/comments/commentRss/156129.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cty41/services/trackbacks/156129.html</trackback:ping><description><![CDATA[<div>
<p style="text-align: left; line-height: 150%" align="left"><span style="line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp;好久没更新了。。上自己博客看了下这篇2个月前的草稿都还没写完。。的确是要荒废了快。。囧<br />&nbsp;&nbsp;&nbsp;最近上班没什么事情，所以便考虑着把自己老土的</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">d9</span><span style="line-height: 150%; font-family: 宋体">图形山寨引擎移植到</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">d10</span><span style="line-height: 150%; font-family: 宋体">上（其实可以</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'"><a href="http://www.cnblogs.com/gongminmin/"><span style="font-family: 宋体; color: blue">直接移植到</span><span style="color: blue">d11</span><span style="font-family: 宋体; color: blue">的</span></a></span><span style="line-height: 150%; font-family: 宋体">）。。我就慢半拍吧。。首先</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">d10</span><span style="line-height: 150%; font-family: 宋体">，</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">11</span><span style="line-height: 150%; font-family: 宋体">和</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">d9</span><span style="line-height: 150%; font-family: 宋体">的一大区别就是本来</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">d9</span><span style="line-height: 150%; font-family: 宋体">众多的</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">setState</span><span style="line-height: 150%; font-family: 宋体">被去除，而使用改进的</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">state object</span><span style="line-height: 150%; font-family: 宋体">，这些包括了</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">Input-Layout State</span><span style="line-height: 150%; font-family: 宋体">，</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'"> Rasterizer State</span><span style="line-height: 150%; font-family: 宋体">，</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">Depth-Stencil State</span><span style="line-height: 150%; font-family: 宋体">，</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'"> Blend State</span><span style="line-height: 150%; font-family: 宋体">，</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'"> Sampler State</span><span style="line-height: 150%; font-family: 宋体">。可以看到本来的多次</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">set</span><span style="line-height: 150%; font-family: 宋体">函数被大量简化了，而这些</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">state object</span><span style="line-height: 150%; font-family: 宋体">都是依靠对应的</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">DESC</span><span style="line-height: 150%; font-family: 宋体">（描述），来直接创建出来，用户在使用的时候只需要向驱动层传递一个句柄（也就是新的</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">set</span><span style="line-height: 150%; font-family: 宋体">函数）既可以对许多个状态进行改变，例如</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">Rasterizer State</span><span style="line-height: 150%; font-family: 宋体">的</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">DESC</span><span style="line-height: 150%; font-family: 宋体">：</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'"><br />typedef struct D3D10_RASTERIZER_DESC {<br />D3D10_FILL_MODE FillMode;<br />D3D10_CULL_MODE CullMode;<br />BOOL FrontCounterClockwise;<br />INT DepthBias;<br />FLOAT DepthBiasClamp;<br />FLOAT SlopeScaledDepthBias;<br />BOOL DepthClipEnable;<br />BOOL ScissorEnable;<br />BOOL MultisampleEnable;<br />BOOL AntialiasedLineEnable;<br />} D3D10_RASTERIZER_DESC;<br /></span><span style="line-height: 150%; font-family: 宋体">可以看到一次</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">set</span><span style="line-height: 150%; font-family: 宋体">可以一次给驱动发送以前</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">d9</span><span style="line-height: 150%; font-family: 宋体">曾经需要很多条</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">command</span><span style="line-height: 150%; font-family: 宋体">的工作，可想而知其带来的性能提升。</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'"><br /></span><span style="line-height: 150%; font-family: 宋体">但这也带来了新的问题，由于这些</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">state object</span><span style="line-height: 150%; font-family: 宋体">的创建是比较耗时的，所以便不可能像以前</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">d9</span><span style="line-height: 150%; font-family: 宋体">一样没帧都去</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">set</span><span style="line-height: 150%; font-family: 宋体">，而且由于</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">DESC</span><span style="line-height: 150%; font-family: 宋体">里有多个配置项，也无法简单的去</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">cache</span><span style="line-height: 150%; font-family: 宋体">。看到这里，我想看过</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">Christer</span><span style="line-height: 150%; font-family: 宋体">和</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">clayman</span><span style="line-height: 150%; font-family: 宋体">大人那两篇关于渲染排序文章的同学应该能想到对应的思路。那就是做一个</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">sortkey</span><span style="line-height: 150%; font-family: 宋体">，对于</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">Rasterizer State</span><span style="line-height: 150%; font-family: 宋体">来说</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">,FillMode</span><span style="line-height: 150%; font-family: 宋体">这些枚举，</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">bool</span><span style="line-height: 150%; font-family: 宋体">都是能直接做入</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">sortkey</span><span style="line-height: 150%; font-family: 宋体">的（节省比较次数），剩下的譬如</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">int</span><span style="line-height: 150%; font-family: 宋体">或者</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">float</span><span style="line-height: 150%; font-family: 宋体">则直接比较，也就是重载</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">operator==</span><span style="line-height: 150%; font-family: 宋体">和</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">!=</span></p>
<p style="text-align: left; line-height: 150%" align="left"><span style="line-height: 150%; font-family: 宋体">譬如</span><span style="line-height: 150%; font-family: 'Verdana','sans-serif'"> </span></p>
<p style="text-align: left; line-height: 150%" align="left">&nbsp;</p>
<p style="text-align: left; line-height: 150%" align="left">&nbsp;</p>
<p style="text-align: left; line-height: 150%" align="left"><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">bool operator==(const D3D10RasterState&amp; rhs)</span></p>
<p style="text-align: left; line-height: 150%" align="left"><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">{</span></p>
<p style="text-align: left; line-height: 150%" align="left">&nbsp;</p>
<p style="text-align: left; line-height: 150%; margin: 0cm 0cm 0pt 10.5pt" align="left"><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">if(SortKey == rhs.SortKey &amp;&amp; DESC.DepthBias == rhs.DESC. DepthBias &amp;&amp;</span></p>
<p style="text-align: left; line-height: 150%; text-indent: 10.5pt; margin: 0cm 0cm 0pt 10.5pt" align="left"><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">fabs(DESC. DepthBiasClamp &#8211; rhs.DESC. DepthBiasClamp) &lt; 0.000001f &amp;&amp; etc..)</span></p>
<p style="text-align: left; line-height: 150%; text-indent: 21pt; margin: 0cm 0cm 0pt -10.5pt" align="left"><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">&nbsp;&nbsp; return true;</span></p>
<p style="text-align: left; line-height: 150%; text-indent: 21pt; margin: 0cm 0cm 0pt -10.5pt" align="left">&nbsp;</p>
<p style="text-align: left; line-height: 150%; text-indent: 21pt; margin: 0cm 0cm 0pt -10.5pt" align="left"><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">&nbsp;return false;</span></p>
<p style="text-align: left; line-height: 150%; text-indent: 21pt; margin: 0cm 0cm 0pt -10.5pt" align="left"><span style="line-height: 150%; font-family: 'Verdana','sans-serif'">}</span></p>
<p>UE3<span style="font-family: 宋体">中这块大概也是这样的，不过他没有弄</span>sortkey<span style="font-family: 宋体">什么，他是很简单直接重载了</span>==<span style="font-family: 宋体">和</span>!=<span style="font-family: 宋体">的用</span>memcmp<span style="font-family: 宋体">比较</span><span style="font-family: 'Verdana','sans-serif'">State</span><span style="font-family: 宋体">的</span><span style="font-family: 'Verdana','sans-serif'">DESC</span><span style="font-family: 宋体">就完了</span><span style="font-family: 'Verdana','sans-serif'">..</span><span style="font-family: 宋体">简单易用吧。。</span></p></div><img src ="http://www.cppblog.com/cty41/aggbug/156129.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cty41/" target="_blank">月下圆舞曲</a> 2011-12-29 22:35 <a href="http://www.cppblog.com/cty41/archive/2011/12/29/156129.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ue3的一个小技巧</title><link>http://www.cppblog.com/cty41/archive/2011/08/24/154245.html</link><dc:creator>月下圆舞曲</dc:creator><author>月下圆舞曲</author><pubDate>Wed, 24 Aug 2011 13:00:00 GMT</pubDate><guid>http://www.cppblog.com/cty41/archive/2011/08/24/154245.html</guid><wfw:comment>http://www.cppblog.com/cty41/comments/154245.html</wfw:comment><comments>http://www.cppblog.com/cty41/archive/2011/08/24/154245.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cty41/comments/commentRss/154245.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cty41/services/trackbacks/154245.html</trackback:ping><description><![CDATA[<p>这两天闲下来的时候就看了下udn上的很多文章，顺带记录一个小技巧：<br />将unreal script compiler集成到vs里<br />&nbsp; 用ue的人都应该不太喜欢每次还得开一个额外的命令行来编译脚本。当然每次运行程序的时候ue也会提示你.u文件过期，是否重编？但实际上有些时候由于.u也是从peforce上得的，所以有可能虽然.u文件不是最新的，但是还是不会提醒你重编。（你也可以在perforce里手动设置不获取.u文件）所以还是挺麻烦的。<br />&nbsp; udn上介绍了一个方法将这个过程集成到vs里，方便简单（实际上，可能vs老手都应该会了。。）<br />首先设置一个外部命令：</p>
<p>Visual Studio -&gt; Tools -&gt; ExternalCommands </p>
<p>&nbsp;</p><pre>Title: Build Script Debug
Command: &lt;full path&gt;\UnrealEngine3\Binaries\Win32\&lt;your game&gt;.com
Arguments: make -full -debug
Initial Directory: $(TargetDir)..\..\
Use Output Window: checked
(我一般习惯编译debug版，一方面快，另一方也方便调试)</pre>
<p>然后在vs的macro IDE里添加下面的内容（ExternalCommand(n)的数字为External Tool的位置）：<br /></p><pre>Sub MakeScriptDebug()
    DTE.ExecuteCommand("View.Output")
    DTE.ExecuteCommand("File.SaveAll")
    ' Note: assumes script make release is properly set up as ExternalCommand1
    DTE.ExecuteCommand("Tools.ExternalCommand1")
End Sub</pre><pre>然后可以在设置里为其添加一个快捷键(我设置的是Shift+F7～)。这样一来就直接内嵌咯～</pre>
<p><br />&nbsp;</p> <img src ="http://www.cppblog.com/cty41/aggbug/154245.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cty41/" target="_blank">月下圆舞曲</a> 2011-08-24 21:00 <a href="http://www.cppblog.com/cty41/archive/2011/08/24/154245.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dithering-视觉的奇特现象</title><link>http://www.cppblog.com/cty41/archive/2011/07/19/dither.html</link><dc:creator>月下圆舞曲</dc:creator><author>月下圆舞曲</author><pubDate>Tue, 19 Jul 2011 14:26:00 GMT</pubDate><guid>http://www.cppblog.com/cty41/archive/2011/07/19/dither.html</guid><wfw:comment>http://www.cppblog.com/cty41/comments/151420.html</wfw:comment><comments>http://www.cppblog.com/cty41/archive/2011/07/19/dither.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/cty41/comments/commentRss/151420.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cty41/services/trackbacks/151420.html</trackback:ping><description><![CDATA[<div><font style="background-color: #cce8cf"><span style="background-color: #ffffff">&nbsp; 最早对听说Dithering这个词还是看到clayman大神推荐的dx9 pipeline图，当时也没深究，今天在openGPU上有大牛对此问题给出来</span><a href="http://www.opengpu.org/bbs/forum.php?mod=viewthread&amp;tid=5116"><span style="background-color: #ffffff">答案</span></a><span style="background-color: #ffffff">， 当时也没看懂，回来看了下wiki上关于dithering的介绍，瞬间明白了。再次借wiki的图做个小白普及吧～～（不算侵权吧。。）</span><br /><img border="0" alt="" src="http://upload.wikimedia.org/wikipedia/commons/6/6d/Dithering_example_red_blue.png" /><br /><span style="background-color: #ffffff">这就是一个很直接的dithering的例子，图中实际只用了红蓝两种颜色，但是随着像素的变小，图片逐渐呈现出紫色。</span><br /><span style="background-color: #ffffff">&nbsp; 看到这边大家应该对dither这个操作有了个理解，它就是用少量的颜色来表现更广泛的颜色的。这么做的原因，有很多方面的用途，譬如在某一些使用lcd屏幕的嵌入式设备上能显示的色域很比较小的，在这样的设备上显示图片，如果单纯的将超过色域的颜色四舍五入的话，就会产生很明显的颜色带。（如下图）这样就需要利用dithering操作来进行修正。</span><br /><img border="0" alt="" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e3/Dithering_example_undithered.png/225px-Dithering_example_undithered.png" /><img border="0" alt="" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Dithering_example_undithered_web_palette.png/225px-Dithering_example_undithered_web_palette.png" width="225" height="180" /><img border="0" alt="" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/6d/Dithering_example_dithered_web_palette.png/225px-Dithering_example_dithered_web_palette.png" /><br /><span style="background-color: #ffffff">原图&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;未经过dithering&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;经过dithering后，颜色过渡自然很多</span><br /><br /><span style="background-color: #ffffff">&nbsp; 具体的算法wiki上大概的介绍，有兴趣的同学可以看看：</span><a href="http://en.wikipedia.org/wiki/Dither"><span style="background-color: #ffffff">http://en.wikipedia.org/wiki/Dither</span></a><br /><br /><br /><br /><br /></font></div> <img src ="http://www.cppblog.com/cty41/aggbug/151420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cty41/" target="_blank">月下圆舞曲</a> 2011-07-19 22:26 <a href="http://www.cppblog.com/cty41/archive/2011/07/19/dither.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>光照术语备忘</title><link>http://www.cppblog.com/cty41/archive/2011/06/04/148039.html</link><dc:creator>月下圆舞曲</dc:creator><author>月下圆舞曲</author><pubDate>Sat, 04 Jun 2011 03:18:00 GMT</pubDate><guid>http://www.cppblog.com/cty41/archive/2011/06/04/148039.html</guid><wfw:comment>http://www.cppblog.com/cty41/comments/148039.html</wfw:comment><comments>http://www.cppblog.com/cty41/archive/2011/06/04/148039.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cty41/comments/commentRss/148039.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cty41/services/trackbacks/148039.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 在看《Advanced Lighting And Materials With Shaders》里看到一段关于radiance几个关键字很方便的记法：<br /><div>  <p><em><span style="font-size:14.0pt">Irradiance</span></em><span style="font-size:14.0pt"> is the total amount of energy received per unit area of surface.</span></p>  <p style="margin-left: 7pt; text-indent: -7pt;"><em><span style="font-size: 14.0pt">Illuminance </span></em><span style="font-size: 14pt;">measures the amount of visible light energy in photometric terms, not included heat, and radiation.</span></p>  <p>&nbsp;&nbsp; 前两者是关于表面接收的光的属性，后两者则是表面反射出的光的属性。</p>  <p><em><span style="font-size:14.0pt">Radiance</span></em><span style="font-size: 14.0pt"> is the measure of energy that is reflected by the surface. </span></p>  <p><em><span style="font-size:14.0pt">Luminance</span></em><span style="font-size: 14.0pt"> is the measure of photometrically weighted light energy that leaves the surface, and is therefore the more interesting term in a graphics context.</span></p>  </div><img src ="http://www.cppblog.com/cty41/aggbug/148039.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cty41/" target="_blank">月下圆舞曲</a> 2011-06-04 11:18 <a href="http://www.cppblog.com/cty41/archive/2011/06/04/148039.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>