<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Silvery Night</title><subtitle type="text">Rich Games Developer</subtitle><id>http://feed.cnblogs.com/blog/u/64758/rss</id><updated>2012-06-02T16:16:28Z</updated><author><name>nowpaper</name><uri>http://www.cnblogs.com/nowpaper/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nowpaper/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/64758/rss"/><entry><id>http://www.cnblogs.com/nowpaper/archive/2012/06/03/2532401.html</id><title type="text">记下潜水日子里的感慨，再写人生的事业</title><summary type="text">算起来有一段没有冒泡了，并不只是在博客园，而是在所有的地方，Q不开，活动不参加，不发言，不表态，没什么好写的，连微博也是空空荡荡，自从年初人生的第一次事业失败，带来的除了杂事的苦恼还有回想的反省，随之而来的还有非常非常多的问题，我要解决很多问题，直到现在仍然没有解决完，反正时间开始充裕，转而投向了我以前忽视掉的人生最大事业——女儿，两年多未关注闺女的成长，刚刚开始的时候手忙脚乱的，可是后来意外的发...</summary><published>2012-06-02T16:16:00Z</published><updated>2012-06-02T16:16:00Z</updated><author><name>nowpaper</name><uri>http://www.cnblogs.com/nowpaper/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nowpaper/archive/2012/06/03/2532401.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nowpaper/archive/2012/06/03/2532401.html"/><content type="html">&lt;p&gt;算起来有一段没有冒泡了，并不只是在博客园，而是在所有的地方，Q不开，活动不参加，不发言，不表态，没什么好写的，连微博也是空空荡荡，自从年初人生的第一次事业失败，带来的除了杂事的苦恼还有回想的反省，随之而来的还有非常非常多的问题，我要解决很多问题，直到现在仍然没有解决完，反正时间开始充裕，转而投向了我以前忽视掉的人生最大事业——女儿，两年多未关注闺女的成长，刚刚开始的时候手忙脚乱的，可是后来意外的发现我比家里任何人都有耐心对待她。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/nowpaper/201206/201206030016219735.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="WP_000047m" border="0" alt="WP_000047m" src="http://images.cnblogs.com/cnblogs_com/nowpaper/201206/201206030016221762.jpg" width="283" height="377" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://images.cnblogs.com/cnblogs_com/nowpaper/201206/201206030016267221.png"&gt;&lt;img style="display: inline" title="a1" alt="a1" src="http://images.cnblogs.com/cnblogs_com/nowpaper/201206/2012060300162888.png" width="227" height="377" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;后来厚着脸皮去一些没被邀请的WP7活动打酱油，我觉得WindowsPhone还是很有潜力，至少说值得关注，反正没事，于是写了几个游戏和应用，其中做的最简单居然成为了下载非常高的应用，那是写出来教女儿认字的小应用——《认字》，随着这半年的WP7态势，还是不错，身边很多的朋友都开始用上。&lt;/p&gt;  &lt;p&gt;去年的时候因我们的游戏跨平台问题，看过Cocos2D-x感觉那玩意跟一般的游戏引擎没什么区别，也没觉得有多么的牛X，可是它却完全走了一遍游戏行业的规则：“被关注的就是好的”，不管是否炒作，随着时间的退役，谈论越来越多，后来得知好友秦春林同学（博客园的快乐之王）在移植WP7版本，不知道那根神经一下被激发起来，第一时间要来了版本，不过大失所望的是，当时还不成熟，感觉还不如直接XNA得好，后来也算是被逼无奈专门研究了一下，写了一个游戏，感觉立即不可同日而语，虽然不是很熟悉，但是内部的特性很多，只要加以熟练应用就可以达到预期的效果。&lt;/p&gt;  &lt;p&gt;最近看了深蓝色右手的领域又有所提高，可惜咱基础不好，玩不了高端，只能现膜拜再学习，Silverlihgt的网页游戏也出了好几个，很多朋友的变化我只有在一旁观察，现在我想也许可以没事写写什么了，毕竟MVP仍然要延续，怎么着也得凑个数吧，我准备以WindowsPhone游戏开发为主题，写一个系列可能用上Silverlihgt、XNA或者cocos2dx。&lt;/p&gt;  &lt;p&gt;特别感谢&lt;a href="http://www.cnblogs.com/hielvis" target="_blank"&gt;快乐之王&lt;/a&gt;不厌其烦的回答我的问题，也特别感谢&lt;a href="http://www.cnblogs.com/aawolf" target="_blank"&gt;老马&lt;/a&gt;在我最低沉的时候当一位倾听者听我唠叨，还有感谢&lt;a href="http://www.cnblogs.com/alamiye010/" target="_blank"&gt;深蓝色右手&lt;/a&gt;一直在文章后面带推荐，我得出点东西不至错爱。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nowpaper/aggbug/2532401.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nowpaper/archive/2012/06/03/2532401.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nowpaper/archive/2012/05/13/2498597.html</id><title type="text">关于WindowsPhone7的内存问题，90MB</title><summary type="text">最近关注的WP7比较多，众所周知所有的移动终端设备几乎对内存都有着令人发指的要求，而我所开发的领域——游戏，却是对内存要求非常高，一组几百人的用户数据字节数可能还没一张图片字节数多，而近期我的一些游戏作品也在探讨有关内存的优化等问题，最近WP7的lumia 610悄然加入到Apphub的支持机型名单，这个内存只有256MB的机器会拒绝所有内存（memory）超过90MB的app，以至于很多朋友措手不及，下面摘抄总结了一些内存的有关问题。</summary><published>2012-05-13T14:31:00Z</published><updated>2012-05-13T14:31:00Z</updated><author><name>nowpaper</name><uri>http://www.cnblogs.com/nowpaper/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nowpaper/archive/2012/05/13/2498597.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nowpaper/archive/2012/05/13/2498597.html"/><content type="html">&lt;p&gt;最近关注的WP7比较多，众所周知所有的移动终端设备几乎对内存都有着令人发指的要求，而我所开发的领域&amp;#8212;&amp;#8212;游戏，却是对内存要求非常高，一组几百人的用户数据字节数可能还没一张图片字节数多，而近期我的一些游戏作品也在探讨有关内存的优化等问题，最近WP7的lumia 610悄然加入到Apphub的支持机型名单，这个内存只有256MB的机器会拒绝所有内存（memory）超过90MB的app，以至于很多朋友措手不及，下面摘抄总结了一些内存的有关问题。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;第一个问题是：看&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;因为在模拟器里不会对内存有要求，但是要想弄全所有的设备，可是一个不小的开销，所以如何了解自己的内存是否超了上限是一个重要问题。&lt;/p&gt;&lt;p&gt;Silverlight for WindowsPhone的应用可以直接用&lt;/p&gt;&lt;p&gt;Application.Current.Host.Settings.EnableFrameRateCounter = true;&lt;/p&gt;&lt;p&gt;来开启应用当前的页面数据显示，如下图&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/nowpaper/WindowsPhone7/2012051301.jpg" width="1140" height="621" /&gt;&lt;/p&gt;&lt;p&gt;而这些数据的作用详细请参看这里：&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/gg588380(v=VS.92).aspx"&gt;http://msdn.microsoft.com/zh-cn/library/gg588380(v=VS.92).aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://i.msdn.microsoft.com/dynimg/IC468501.png" /&gt;&lt;/p&gt;&lt;p&gt;在早期，我一直以为这是准确的数据，可是后来知道这只是画面纹理的内存数值，和真实的内存不一样。而且在XNA for WindowsPhone的应用里没法直接打开查看，所以，需要另外一个方法取得：&lt;/p&gt;&lt;p&gt;Microsoft.Phone.Info.DeviceStatus.ApplicationCurrentMemoryUsage&lt;/p&gt;&lt;p&gt;类Microsoft.Phone.Info.DeviceStatus里包含了各种对程序内存的静态属性，具体的信息可以看&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.info.devicestatus(v=vs.92).aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.phone.info.devicestatus(v=vs.92).aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/nowpaper/WindowsPhone7/2012051302.jpg" /&gt;&lt;/p&gt;&lt;p&gt;所以无论在Silverlight还是XNA里，都可以写一个简单的计算取得当前应用程序的内存数据：&lt;/p&gt;&lt;p&gt;var value = Microsoft.Phone.Info.DeviceStatus.ApplicationCurrentMemoryUsage / (1024d * 1024d);&lt;/p&gt;&lt;p&gt;&lt;strong&gt;第二个问题：缩&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;你得到了内存数据之后，如果没有超过还好，如果太大并且需要优化的话，就得考虑怎么来缩它了。&lt;/p&gt;&lt;p&gt;注意点1：实现IDisposable&lt;/p&gt;&lt;p&gt;尽量的对于会重复的数据带上IDisposable&lt;/p&gt;&lt;p&gt;注意点2：Image.Source = null&lt;/p&gt;&lt;p&gt;一些动态的载入BitmapImage他们悄声无息的一直站着资源，这个虽然看起很土，但是很管用，曾经让我的Silverlight网页游戏内存稳定并总体降低了1/3。&lt;/p&gt;&lt;p&gt;注意点3：小心事件&lt;/p&gt;&lt;p&gt;在我的团队里，对于一次性的事件一定要求剪掉（-=），甚至在Dispose()里做判断，这是因为游戏中大量的随时创建出来的对象，一直带着几个事件跑就不会被GC掉，用调试工具查看过，大多是因为事件中带着全局或者其他的引用造成。&lt;/p&gt;&lt;p&gt;注意点4：用单例&lt;/p&gt;&lt;p&gt;对于设计模式，没什么好说的，挺怕被喷，只能说单例用好了是英雄，用不好是狗熊。&lt;/p&gt;&lt;p&gt;注意点5：别用数据绑定&lt;/p&gt;&lt;p&gt;据我所知靖南兄、老马，我们都吃过数据绑定的亏，数据绑定是一个多么好的东西啊，可是内存消耗真不是玩的，尤其不是你自己写的控件用上玩数据绑定，那才叫&amp;#8212;&amp;#8212;谁用谁知道！&lt;/p&gt;&lt;p&gt;关于XNA的瘦身策略，可以详细参看&lt;a href="http://msdn.microsoft.com/zh-cn/library/hh855082(v=vs.92).aspx"&gt;http://msdn.microsoft.com/zh-cn/library/hh855082(v=vs.92).aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;里面详细介绍了Image图像在内存的问题，列举如和使用2次幂优化，降低质换格式的等方法，对于SoundEffect的销毁和顶点数据优化等内容，十分不错。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;第三个问题：躲&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;好吧，当我们的应用程序已经瘦身瘦到无法再瘦，所谓惹不起躲得起，咱们干脆就不支持256MB这样限定90MB的设备了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;打开app的WMAppManifest.xml加入如下代码：&lt;/p&gt;&lt;p&gt;&amp;lt;Requirements&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;Requirement Name="ID_REQ_MEMORY_90" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;/Requirements&amp;gt;&lt;/p&gt;&lt;p&gt;所谓&amp;#8220;你有金银堆北斗，我在江湖度春秋。&amp;#8221;，对于现在这状况也只能&amp;#8220;路逢险处须当避，不是才子莫吟诗&amp;#8221;。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nowpaper/aggbug/2498597.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nowpaper/archive/2012/05/13/2498597.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nowpaper/archive/2011/12/18/2291706.html</id><title type="text">Silverlight RPG游戏引擎&amp;quot;Silvery“开源</title><summary type="text">Silvery是一个成熟图形底层解决方案，主要针对于Silverlight MMORPG网页游戏开发提供：下载管理、资源管理、动画任务、简要角色机制、GameSocket、精灵控制、精灵编辑器、场景解决方案、热键机制、控制台功能等解决方案。http://silvery.codeplex.com/Silvery引擎作者：Nowpaper</summary><published>2011-12-18T04:19:00Z</published><updated>2011-12-18T04:19:00Z</updated><author><name>nowpaper</name><uri>http://www.cnblogs.com/nowpaper/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nowpaper/archive/2011/12/18/2291706.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nowpaper/archive/2011/12/18/2291706.html"/><content type="html">&lt;p&gt; Silvery是一个成熟图形底层解决方案，主要针对于Silverlight MMORPG网页游戏开发提供：下载管理、资源管理、动画任务、简要角色机制、GameSocket、精灵控制、精灵编辑器、场景解决方案、热键机制、控制台功能等解决方案。&lt;/p&gt;&lt;p&gt;&lt;a href="http://silvery.codeplex.com/"&gt;http://silvery.codeplex.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/nowpaper/Silvery/Silvery.png" width="183" height="183" /&gt;&lt;/p&gt;&lt;p&gt;Silvery引擎作者：Nowpaper&lt;/p&gt; &lt;img src="http://www.cnblogs.com/nowpaper/aggbug/2291706.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nowpaper/archive/2011/12/18/2291706.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nowpaper/archive/2011/12/11/2283806.html</id><title type="text">五个个人WindowsPhone7小游戏开源</title><summary type="text">WindowsPhone7上开发游戏都会想到使用XNA，本能就开始望而却步，在WindowsPhone7上的Silverlight开发技术足够能够开发出优秀的游戏产品，从去年一直到现在，我和我的团队在WindowsPhone7 MarketPlace上开发了近10款Silverlight技术为主的小游戏，如今WP7开发趋势如火如荼，特此开源我个人开发的5个WP7小游戏。</summary><published>2011-12-11T03:03:00Z</published><updated>2011-12-11T03:03:00Z</updated><author><name>nowpaper</name><uri>http://www.cnblogs.com/nowpaper/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nowpaper/archive/2011/12/11/2283806.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nowpaper/archive/2011/12/11/2283806.html"/><content type="html">&lt;p&gt;WindowsPhone7上开发游戏都会想到使用XNA，本能就开始望而却步，在WindowsPhone7上的Silverlight开发技术足够能够开发出优秀的游戏产品，当然了，如果是3D项目，还是用XNA的好。&lt;/p&gt;&lt;p&gt;从去年一直到现在，我和我的团队在WindowsPhone7 MarketPlace上开发了近10款Silverlight技术为主的小游戏，并且出了第一个能够和PC互动的角色扮演网络游戏《窝窝世界》（网页版本已经在国内公测，手机版本功能完成20%），如今WP7开发趋势如火如荼，特此开源我个人开发的5个WP7小游戏：&lt;/p&gt;&lt;ol&gt;    &lt;li&gt;FruitWeigher《称水果》&lt;/li&gt;    &lt;li&gt;PriceWar《优惠战》&lt;/li&gt;    &lt;li&gt;PiggyBank《储罐摇摇乐》&lt;/li&gt;    &lt;li&gt;PhotoPuzzle《拼图谜题》&lt;/li&gt;    &lt;li&gt;MushroomPicker《采蘑菇的小姑娘》&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;这些游戏全部都可以在MarketPlace上下载安装，完全免费。所有的开源代码可以在&lt;a href="http://www.codeplex.com/"&gt;http://www.codeplex.com/&lt;/a&gt; 上搜索nowpaper查询到，由于开发的时间不等，早期一些的代码比较丑陋，原因是对Wp7的理解问题，而近期开发的就显得好多了，期望不要被取笑。&lt;/p&gt;&lt;p&gt;下面简单介绍一下：&lt;/p&gt;&lt;p&gt;PiggyBank 是我老婆设计并参与开发的，除了体感代码是我写的以外，其余的都是我老婆一点点的学习制作，一共用了两个星期，不得不说微软的开发工具非常的好，能够很容易的让不懂技术的人员简单的建立应用项目。这个游戏的灵感来自女儿玩储钱罐的过程，女儿自从拿到这个游戏之后，倒是不再破坏小猪扑满了，结果我的手机遭了殃。&lt;/p&gt;&lt;a href="http://piggybankwp7game.codeplex.com/"&gt;http://piggybankwp7game.codeplex.com/&lt;/a&gt;&lt;p&gt;&lt;a href="http://ww2.sinaimg.cn/bmiddle/550ddbddtw1dnvp3b9demj.jpg" target="_blank"&gt;&lt;img border="0" alt="" src="http://ww2.sinaimg.cn/bmiddle/550ddbddtw1dnvp3b9demj.jpg" width="440" height="362" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;PhotoPuzzle，是一个谜题类的手机游戏，操作主要是交换方式拼图，相比传统拼图要简单一些，如果你对图片的种类不满意，可以用相机拍摄一个然后继续玩。&lt;/p&gt;&lt;a href="http://photopuzzlewp7game.codeplex.com/"&gt;http://photopuzzlewp7game.codeplex.com/&lt;/a&gt;&lt;p&gt;&lt;a href="http://ww4.sinaimg.cn/bmiddle/550ddbddtw1dnwdr9vt39j.jpg" target="_blank"&gt;&lt;img border="0" alt="" src="http://ww4.sinaimg.cn/large/550ddbddtw1dnwdr9vt39j.jpg" width="440" height="279" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;FruitWeigher，是一个考验推理能力的智力游戏，会随着得分提高而难度提高，如果答错了则会降低难度，同时得分也会减少，这个游戏完成的比较早，写的不是很好看。&lt;/p&gt;&lt;a href="http://fruitweigherwp7game.codeplex.com/"&gt;http://fruitweigherwp7game.codeplex.com/&lt;/a&gt;&lt;p&gt;&lt;a href="http://ww4.sinaimg.cn/bmiddle/550ddbddtw1dnxtwl9ypqj.jpg" target="_blank"&gt;&lt;img border="0" alt="" src="http://ww4.sinaimg.cn/bmiddle/550ddbddtw1dnxtwl9ypqj.jpg" width="440" height="189" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;PriceWar，是一个看心算能力的智力游戏，在一堆优惠券里找到最优惠的优惠券，灵感来源于一次大家找优惠券的过程，看谁的速度快吧，规则也很简单，答对了增加得分并提高难度，答错反之。&lt;a href="http://pricewarwp7game.codeplex.com/"&gt;http://pricewarwp7game.codeplex.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://ww4.sinaimg.cn/bmiddle/550ddbddtw1dnxu2fbdn8j.jpg" target="_blank"&gt;&lt;img border="0" alt="" src="http://ww4.sinaimg.cn/bmiddle/550ddbddtw1dnxu2fbdn8j.jpg" width="409" height="674" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;MushroomPicker，中文名可以是采蘑菇的小姑娘，是写给女儿玩采蘑菇的，这个完成的比较近，上个月发布到MarketPlace上，写的比较好，参考价值比较高，&lt;/p&gt;&lt;a href="http://mushroompicker.codeplex.com/"&gt;http://mushroompicker.codeplex.com/&lt;/a&gt;&lt;p&gt;&lt;a href="http://ww2.sinaimg.cn/bmiddle/550ddbddtw1dnxvqn13mtj.jpg" target="_blank"&gt;&lt;img border="0" alt="" src="http://ww2.sinaimg.cn/bmiddle/550ddbddtw1dnxvqn13mtj.jpg" width="440" height="254" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nowpaper/aggbug/2283806.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nowpaper/archive/2011/12/11/2283806.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nowpaper/archive/2011/12/02/2271745.html</id><title type="text">【转】在Silverlight中开发三维对象</title><summary type="text">原作者：Rajesh Lal原文地址：http://msdn.microsoft.com/zh-cn/magazine/hh547098.aspx在本文中，我将展示如何开发在 Silverlight 中的 3D 对象。开始于 3D 上简要背景知识，再看一些高级的功能，在 Silverlight 中创建和显示 3D 对象。将举一个简单的例子，多维数据集，并演示三种不同的方法来创建 3D 转换。还将介绍在计算机屏幕上显示3D对象需要哪些关键的要素。最后，将探讨如何使用Silverlight 5创建更丰富的3D对象。Silverlight 支持的右手坐标系，这意味着的正 z 轴指向观察方向 （请参阅</summary><published>2011-12-02T02:49:00Z</published><updated>2011-12-02T02:49:00Z</updated><author><name>nowpaper</name><uri>http://www.cnblogs.com/nowpaper/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nowpaper/archive/2011/12/02/2271745.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nowpaper/archive/2011/12/02/2271745.html"/><content type="html">&lt;p&gt;原作者：Rajesh Lal&lt;/p&gt;&lt;p&gt;原文地址：&lt;a href="http://msdn.microsoft.com/zh-cn/magazine/hh547098.aspx"&gt;http://msdn.microsoft.com/zh-cn/magazine/hh547098.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn5_f167dabc9fa56eb8741a2850dbf97717" class="sentence"&gt;在本文中，我将展示如何开发在 Silverlight 中的 3D 对象。&lt;/span&gt;&lt;span id="xn6_fd11a4decd5d3ccf5c4cd0fe98fa1538" class="sentence"&gt;开始于 3D 上简要背景知识，再看一些高级的功能，在 Silverlight 中创建和显示 3D 对象。&lt;/span&gt;&lt;span id="xn7_b13b31c7ce4751fe2f59718fe5b1b938" class="sentence"&gt;将举一个简单的例子，多维数据集，并演示三种不同的方法来创建 3D 转换。&lt;/span&gt;&lt;span id="xn8_46adc9b60ffe47c4892c29110c6b03b4" class="sentence"&gt;还将介绍在计算机屏幕上显示3D对象需要哪些关键的要素。&lt;/span&gt;&lt;span id="xn9_75c7ebff707777c6657dcc1b3c9d92c5" class="sentence"&gt;最后，将探讨如何使用Silverlight 5创建更丰富的3D对象。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn10_83f865d9df09a3919fc2de22c0733501" class="sentence"&gt;Silverlight 支持的右手坐标系，这意味着的正 z 轴指向观察方向 （请参阅&lt;strong&gt;图&lt;/strong&gt;&lt;strong&gt;1&lt;/strong&gt;)。&lt;/span&gt;&lt;span id="xn11_79585472f02a521ce71eeee6f0c693fd" class="sentence"&gt;有三个3D 的主要元素所需的对象显示在屏幕上：&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span id="xn12_c77848cc02fefd0c360ce733a4affd93" class="sentence"&gt;透视&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="xn13_3935f8feee087b4547de27296ec777b9" class="sentence"&gt;变换&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="xn14_12d7a29d3ddeea9f5feb2e3b9e72737f" class="sentence"&gt;光效&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/hh547098.Lal_Figure1_hires(en-us,MSDN.10).png" /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span id="xn15_7e60a65a011edd4cb14773babc8f6924" class="sentence"&gt;图 1 A 引用多维，显示具有透视效果的边&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn16_a491142d450fe05d615a6f1f9347d747" class="sentence"&gt;透视意味着对象更近，对我们的某些部分显示大于那些远离。&lt;/span&gt;&lt;span id="xn17_d2850f64aa30e818eb8a66028c79f508" class="sentence"&gt;例如，在&lt;strong&gt;图 1&lt;/strong&gt;、 侧 &lt;em&gt;bd&lt;/em&gt;看起来比侧大 &lt;em&gt;fh&lt;/em&gt;。&lt;/span&gt;&lt;span id="xn18_a2661370f17b4613d4b6186ea711080e" class="sentence"&gt;在现实生活中透视创建消失点中，这意味着如果延伸线条 &lt;em&gt;ae&lt;/em&gt;， &lt;em&gt;bf&lt;/em&gt;， &lt;em&gt;cg&lt;/em&gt;和 &lt;em&gt;dh&lt;/em&gt;，在 z 轴上，它们将可以满足多远在任意的单个点。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn19_a4e3c0102e5bdf85cffb44258a4edefb" class="sentence"&gt;第二个方面是变换。&lt;/span&gt;&lt;span id="xn20_17ae27184528d68bc38928ae714b2bb5" class="sentence"&gt;三维对象，当显示在屏幕上，在所有方向上的 3D 空间中可以移动。&lt;/span&gt;&lt;span id="xn21_d78691a1f65dced1a9ca98593870caa5" class="sentence"&gt;它可以在任何单一的轴移动 &amp;#8212; 缩放大小 &amp;#8212; 同时保持不变的角度来看。&lt;/span&gt;&lt;span id="xn22_3a0fb61dce48fb5be04769caced2d22d" class="sentence"&gt;它可以在所有轴旋转 360 度： x、 y 和 z。&lt;/span&gt;&lt;span id="xn23_afee3f67c4e4adeabc9640266dabe576" class="sentence"&gt;这样，3D 对象在屏幕上呈现所需的灵活性。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn24_762f1071293d428d7946710143e0cdad" class="sentence"&gt;3D 的最后一个元素是光效。&lt;/span&gt;&lt;span id="xn25_808363d15a1f60084749786e69afbba6" class="sentence"&gt;光在 3D 中的创建底纹，靠近光源更亮并随距离淡入。&lt;/span&gt;&lt;span id="xn26_69475106b91cb52766e798322eeb5d6b" class="sentence"&gt;在 3D 呈现时，两种流行底纹是"平面"底纹和底纹"渐变"。&lt;/span&gt;&lt;span id="xn27_fb6c533519f3571c7ff7243487e1fa1e" class="sentence"&gt;我将解释它们如何更高版本不同，&lt;/span&gt;&lt;span id="xn28_32ec6b89e1d1b3bfd568cd5e219ad2b3" class="sentence"&gt;光还将创建阴影。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn29_d99a7775387c487f46d02862bed73232" class="sentence"&gt;在即将提供的示例中，将探讨你可以在其中创建 3D 对象在 Silverlight 中的三种不同方式：&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span id="xn30_7adf2ad7499c7b1d86139b97895a8dbd" class="sentence"&gt;使用透视图 3D&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="xn31_c80c7c249eeb90140930b60670e2eda0" class="sentence"&gt;使用多个帧和计时器&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="xn32_f3b630e8d12ec7a5a3970611ae7400e4" class="sentence"&gt;与 XNA 库使用基元&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span id="xn33_445261c41c85194ab4644d29fa803da3" class="sentence"&gt;在第一种方法，使用二维元素，创建一个对象，但它的外观和行为，就好像在 3D 空间中。&lt;/span&gt;&lt;span id="xn34_ae7333cff02e15247e822950f911b17e" class="sentence"&gt;全景 3D 是一种特殊的变换功能添加允许基本调整 （如旋转、 缩放和平移，在 3D 空间中的 Silverlight 4 中。&lt;/span&gt;&lt;span id="xn35_25d4f6a3efb5a5cea86e1b1d9f069302" class="sentence"&gt;第二种方法是，您不创建 3D 对象，但而是创建了特定的转变的最终输出帧并显示它们使用计时器的暴力方法。&lt;/span&gt;&lt;span id="xn36_1b50370ff4b3083063b51cfe19efa180" class="sentence"&gt;最后的方法是，创建丰富的3D 对象，Silverlight 5可以使用XNA的基元素（三角形的数据集合）。&lt;/span&gt;&lt;span id="xn37_3b3764e5a9a94133e8d50e55941852ab" class="sentence"&gt;下面现在开始吧。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="xn38_c13b4d6ef90ee2f2cd7879452cc2543a" class="sentence"&gt;创建多维数据集使用的角度来看 3D&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn39_edfbc42f115bb8d257c1777e77b2e32a" class="sentence"&gt;Silverlight 4 支持 PlaneProjection 类 （请参阅&lt;strong&gt;图 2&lt;/strong&gt;），它可用于任何 UI 元素，将投影属性在类关系图中所示。&lt;/span&gt;&lt;span id="xn40_6fc4b16ef6da17ba99fb2f5c0e1de7cd" class="sentence"&gt;PlaneProjection 类允许的用户界面元素上的角度来看 3D 转换。&lt;/span&gt;&lt;span id="xn41_c159f95e69462d40834bc46757adc921" class="sentence"&gt;尽管它不直接允许创建 3D 对象，可以使用多个"墙壁"创建一个对象并将其转换在 3D 空间中。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/hh547098.Lal_Figure2_hires(en-us,MSDN.10).png" /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span id="xn42_520ec1f49287c58aa4caffe1d91ef487" class="sentence"&gt;图 2 PlaneProjection 类&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn43_e324149714b8e6d1c37599e2be219024" class="sentence"&gt;LocalOffset 和GlobalOffset，用于分别转换对象相对于其自身和相对于另一个元素中的全局空间，允许的PlaneProjection 类。&lt;/span&gt;&lt;span id="xn44_2118b114005c327b3ac99b405d8782b0" class="sentence"&gt;RotationX、RotationY 和RotationZ 允许旋转 x 中的元素，y 和 z 轴，CenterOfRotation 允许相对于元素平面的中心点。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn45_2df960c7ebba3bfffae17b0cda7648c9" class="sentence"&gt;在我的示例中，创建"多维数据集，"我将创建四个边的多维数据集并将其移动 3D 空间中通过设置它们的 PlaneProjection 属性，如中所示&lt;strong&gt;图 3&lt;/strong&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="xn46_7a447ae61cc5ed40f240f339437c1eef" class="sentence"&gt;图 3 设置 PlaneProjection 属性&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="CodeHighlighter"&gt;&lt;code class="xml"&gt;&lt;br/&gt;          &lt;span id="xn47_c4404e22044624e49fad5ca18b01bdc5" class="sentence"&gt;&amp;lt;Grid x:Name="LayoutRoot" Background="White" Width="800" Height="700"&amp;gt;&lt;br/&gt;  &amp;lt;Rectangle Fill="#9900FF00" Width="250" Height="250" Visibility="Visible"&amp;gt;&lt;br/&gt;  &amp;lt;Rectangle.Projection&amp;gt;&lt;br/&gt;    &amp;lt;PlaneProjection x:Name=&lt;br/&gt;      "projectionFront" CenterOfRotationZ="125" RotationX="-180"/&amp;gt;&lt;br/&gt;  &amp;lt;/Rectangle.Projection&amp;gt;&lt;br/&gt;&amp;lt;/Rectangle&amp;gt;&lt;br/&gt;&amp;lt;Rectangle Fill="#99FF0000" Width="250" Height="250" Visibility="Visible"&amp;gt;&lt;br/&gt;  &amp;lt;Rectangle.Projection&amp;gt;&lt;br/&gt;    &amp;lt;PlaneProjection x:Name=&lt;br/&gt;      "projectionBottom" CenterOfRotationZ="125" RotationX="-90" /&amp;gt;&lt;br/&gt;  &amp;lt;/Rectangle.Projection&amp;gt;&lt;br/&gt;&amp;lt;/Rectangle&amp;gt;&lt;br/&gt;&amp;lt;Rectangle Fill="#990000FF" Width="250" Height="250" Visibility="Visible"&amp;gt;&lt;br/&gt;  &amp;lt;Rectangle.Projection&amp;gt;&lt;br/&gt;    &amp;lt;PlaneProjection x:Name="projectionBack" CenterOfRotationZ="125" /&amp;gt;&lt;br/&gt;  &amp;lt;/Rectangle.Projection&amp;gt;&lt;br/&gt; &amp;lt;/Rectangle&amp;gt;&lt;br/&gt;&amp;lt;Rectangle Fill="#99FFFF00" Width="250" Height="250" Visibility="Visible"&amp;gt;&lt;br/&gt;  &amp;lt;Rectangle.Projection&amp;gt;&lt;br/&gt;    &amp;lt;PlaneProjection x:Name=&lt;br/&gt;      "projectionTop" CenterOfRotationZ="125" RotationX="90"/&amp;gt;&lt;br/&gt;  &amp;lt;/Rectangle.Projection&amp;gt;&lt;br/&gt;&amp;lt;/Rectangle&amp;gt;&lt;br/&gt;&amp;lt;/Grid&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;/code&gt;&lt;/div&gt;&lt;p&gt;&lt;SCRIPT type=text/javascript&gt;ChiliBook.lineNumbers = true;ChiliBook.automatic = true;&lt;/SCRIPT&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn48_f995d3ad041712e01d3f886881975738" class="sentence"&gt;在&lt;strong&gt;图 4&lt;/strong&gt;，侧面旋转 90-90 和创建多维数据集的顶部、 底部和前投影平面-180 度。&lt;/span&gt;&lt;span id="xn49_fc4173a3895a8de3d669eab9073ffb61" class="sentence"&gt;125 的 CenterofRotationZ 值创建的所有可旋转平面沿 z 轴的中心点。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/hh547098.Lal_Figure4_hires(en-us,MSDN.10).png" /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span id="xn50_6feb3acb4c184016dcff421f39f1f127" class="sentence"&gt;图 4 投影来模拟 3D 墙边&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn51_7eb1802a13f0a20be8979fac1706d36c" class="sentence"&gt;使用投影平面创建多维数据集后，我需要它旋转 x、 y 和 z 轴。&lt;/span&gt;&lt;span id="xn52_0cdc5c67a1a908dec82144eabb4b9a28" class="sentence"&gt;这是在 Silverlight 中使用演示图板对象位置。&lt;/span&gt;&lt;span id="xn53_1550fc5d98168da71a5fff4fda889904" class="sentence"&gt;如中所示创建三个序列图像板，一个用于每个轴， &lt;strong&gt;图 5&lt;/strong&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="xn54_341b24b81a4789a48c2f90bb773969dd" class="sentence"&gt;图 5 旋转该多维数据集使用演示图板&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="CodeHighlighter"&gt;&lt;code class="xml"&gt;&lt;br/&gt;          &lt;span id="xn55_2906e85698c244b52efc101d49ad9bb1" class="sentence"&gt;&amp;lt;Storyboard x:Name="storyboardRotateX"&amp;gt;&lt;br/&gt;  &amp;lt;DoubleAnimation Storyboard.TargetName="projectionFront" &lt;br/&gt;    Storyboard.TargetProperty="RotationX" From="-180.0" To="180.0" Duration="0:0:10"&lt;br/&gt;    RepeatBehavior="Forever"  /&amp;gt;&lt;br/&gt;  &amp;lt;DoubleAnimation Storyboard.TargetName="projectionBottom"&lt;br/&gt;    Storyboard.TargetProperty="RotationX" From="-90.0" To="270.0" Duration="0:0:10"&lt;br/&gt;    RepeatBehavior="Forever"  /&amp;gt;&lt;br/&gt;  &amp;lt;DoubleAnimation Storyboard.TargetName="projectionBack" &lt;br/&gt;    Storyboard.TargetProperty="RotationX" From="0.0" To="360.0" Duration="0:0:10"&lt;br/&gt;    RepeatBehavior="Forever"   /&amp;gt;&lt;br/&gt;  &amp;lt;DoubleAnimation Storyboard.TargetName="projectionTop"&lt;br/&gt;    Storyboard.TargetProperty="RotationX" From="90.0" To="450.0" Duration="0:0:10"&lt;br/&gt;    RepeatBehavior="Forever"   /&amp;gt;&lt;br/&gt;  &amp;lt;/Storyboard&amp;gt;&lt;br/&gt;  &amp;lt;Storyboard x:Name="storyboardRotateY"&amp;gt;&lt;br/&gt;  &amp;lt;DoubleAnimation Storyboard.TargetName="projectionFront"&lt;br/&gt;    Storyboard.TargetProperty="RotationY" From="0.0" To="360.0" Duration="0:0:10"&lt;br/&gt;    RepeatBehavior="Forever" /&amp;gt;&lt;br/&gt;  &amp;lt;DoubleAnimation Storyboard.TargetName="projectionBottom"&lt;br/&gt;    Storyboard.TargetProperty="RotationY" From="0.0" To="360.0" Duration="0:0:10"&lt;br/&gt;    RepeatBehavior="Forever" /&amp;gt;&lt;br/&gt;  &amp;lt;DoubleAnimation Storyboard.TargetName="projectionBack"&lt;br/&gt;    Storyboard.TargetProperty="RotationY" From="0.0" To="360.0" Duration="0:0:10" &lt;br/&gt;    RepeatBehavior="Forever" /&amp;gt;&lt;br/&gt;  &amp;lt;DoubleAnimation Storyboard.TargetName="projectionTop"&lt;br/&gt;    Storyboard.TargetProperty="RotationY" From="0.0" To="360.0" Duration="0:0:10"&lt;br/&gt;    RepeatBehavior="Forever" /&amp;gt;&lt;br/&gt;  &amp;lt;/Storyboard&amp;gt;&lt;br/&gt;  &amp;lt;Storyboard x:Name="storyboardRotateZ"&amp;gt;&lt;br/&gt;  &amp;lt;DoubleAnimation Storyboard.TargetName="projectionFront"&lt;br/&gt;    Storyboard.TargetProperty="RotationZ" From="0.0" To="360.0" Duration="0:0:10"&lt;br/&gt;    RepeatBehavior="Forever" /&amp;gt;&lt;br/&gt;  &amp;lt;DoubleAnimation Storyboard.TargetName="projectionBottom"&lt;br/&gt;    Storyboard.TargetProperty="RotationZ" From="0.0" To="360.0" Duration="0:0:10"&lt;br/&gt;    RepeatBehavior="Forever" /&amp;gt;&lt;br/&gt;  &amp;lt;DoubleAnimation Storyboard.TargetName="projectionBack"&lt;br/&gt;    Storyboard.TargetProperty="RotationZ" From="0.0" To="360.0" Duration="0:0:10"&lt;br/&gt;    RepeatBehavior="Forever" /&amp;gt;&lt;br/&gt;  &amp;lt;DoubleAnimation Storyboard.TargetName="projectionTop"&lt;br/&gt;    Storyboard.TargetProperty="RotationZ" From="0.0" To="360.0" Duration="0:0:10"&lt;br/&gt;    RepeatBehavior="Forever" /&amp;gt;&lt;br/&gt;&amp;lt;/Storyboard&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;/code&gt;&lt;/div&gt;&lt;p&gt;&lt;SCRIPT type=text/javascript&gt;ChiliBook.lineNumbers = true;ChiliBook.automatic = true;&lt;/SCRIPT&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn56_132c8e8b5bba5a5e0f136fc1a8ad8de2" class="sentence"&gt;对每个演示图板，旋转每个四个投影平面以保持不变的多维数据集结构。&lt;/span&gt;&lt;span id="xn57_531f188b5c0b97ea28671082964d744b" class="sentence"&gt;请注意，为 x 轴旋转，RotationX 值从平面的原始 RotationX 值开始，对于 ProjectionFront，进入另一个 360 度，以使其起点是-180 度和转到 180 度。&lt;/span&gt;&lt;span id="xn58_0344731a1f695f647d2faecd82679501" class="sentence"&gt;正如您可以看到在&lt;strong&gt;图 6&lt;/strong&gt;、 多维数据集可用于沿 x、 y 和 z 轴旋转，它可以沿任意轴移动和它支持的每个边的颜色。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/hh547098.Lal_Figure6_hires(en-us,MSDN.10).png" /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span id="xn59_4255743918b9673420bf9d15e8ebadc3" class="sentence"&gt;图 6 多维数据集、 旋转的准备&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn60_7bbbcb69ced20fca5d69ec0ad47717cd" class="sentence"&gt;在此示例中，我无法轻松地创建多维数据集并将其转换在 3D 空间中没有大量的代码。&lt;/span&gt;&lt;span id="xn61_79e4825502e5b3a9cab0200c378878cf" class="sentence"&gt;这是真正的角度来看 3D 转换强度。&lt;/span&gt;&lt;span id="xn62_f30c0d8d438b63f688b4f32aca075857" class="sentence"&gt;对于基本的 3D 操作，应使用此选项。&lt;/span&gt;&lt;span id="xn63_2a4c165d64343e3e621d61ab1a9d0485" class="sentence"&gt;但是，它配备有很多缺点。&lt;/span&gt;&lt;span id="xn64_6ccaae1745beb449a1ecb7072e691b45" class="sentence"&gt;对于高级 3D 对象，投影平面数所需和它们的设置会明显，增加您不必手动计算出每个投影平面和 CenterOfRotation 之间的角度。&lt;/span&gt;&lt;span id="xn65_d537b9437ba15f6d19868353a8934061" class="sentence"&gt;这里是第二个问题是旋转 3D 对象的依赖序列图像板，这使它大量占用 CPU 的 ； 它不会呈现该对象使用 GPU。&lt;/span&gt;&lt;span id="xn66_82c008fa32df0275df4704368876786d" class="sentence"&gt;使用这种方法的另一个问题是您还呈现多维数据集后，即使它不可见--不是最佳方法。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn67_c01e32c1893afd8ef527bc3a972f4190" class="sentence"&gt;所需的显示屏幕上的 3D 对象的第三个主要元素是光的效果。&lt;/span&gt;&lt;span id="xn68_ae71f12ae51a05c6b2c2aed46fa2713e" class="sentence"&gt;在现实生活中您有指示灯，那么，如何执行您模拟，在屏幕上的 3D 空间中？&lt;/span&gt;&lt;span id="xn69_827a6dc19bf9b730d122c7b41a72a869" class="sentence"&gt;如所述，两个常见的方式来做到这一点是平面阴影和渐变的底纹。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn70_e8f9e4e605d0ed6c007ea19f9b01d6da" class="sentence"&gt;平淡着色考虑的平面曲面，并沿平面的平均底纹设置。&lt;/span&gt;&lt;span id="xn71_ae4d6a3cd7d74eaa62d19a8dad1f3d3a" class="sentence"&gt;渐变底纹 （高氏着色） 使用渐变着色曲面，并考虑到每个平面的顶点。&lt;/span&gt;&lt;span id="xn72_ec72be298f84eb81d7165e0f6ec43f9d" class="sentence"&gt;平面不是平面着色、 但而是"平滑"显示为灰色基于不同顶点颜色。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn73_789d83d1a024e0b1e521bc5b0aec3014" class="sentence"&gt;在此示例中，每个平面允许颜色填充 （单层底纹），以及渐变填充 （渐变阴影），它可用于模拟光效果。&lt;/span&gt;&lt;span id="xn74_f84dd6b8714f7dd52f89d3e3ac7e3ab7" class="sentence"&gt;我将介绍这些更高版本。&lt;/span&gt;&lt;span id="xn75_916124bb4c6ea48cd1e161586b39fd23" class="sentence"&gt;模拟光源效果的快速方法是通过使用下面的代码后的 3D 对象的透明度与重叠放射状渐变矩形：&lt;/span&gt;&lt;/p&gt;&lt;div class="CodeHighlighter"&gt;&lt;code class="xml"&gt;&lt;br/&gt;          &lt;span id="xn76_db344ea50534061dc747186ee40b0417" class="sentence"&gt;&amp;lt;Rectangle x:Name=&lt;br/&gt;  "BulbGradient" Height="700" Width="800" Margin="0 50 0 0" Grid.Row="1"&lt;br/&gt;  Visibility="Collapsed"&amp;gt;&lt;br/&gt;  &amp;lt;Rectangle.Fill&amp;gt;&lt;br/&gt;    &amp;lt;RadialGradientBrush RadiusX="0.5" RadiusY="0.5" GradientOrigin="0.25,0.25"&amp;gt;&lt;br/&gt;      &amp;lt;GradientStop Color="#00000000" Offset="0"/&amp;gt;&lt;br/&gt;      &amp;lt;GradientStop Color="#FF000000" Offset="2"/&amp;gt;&lt;br/&gt;     &amp;lt;/RadialGradientBrush&amp;gt;&lt;br/&gt;  &amp;lt;/Rectangle.Fill&amp;gt;&lt;br/&gt;&amp;lt;/Rectangle&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;/code&gt;&lt;/div&gt;&lt;p&gt;&lt;SCRIPT type=text/javascript&gt;ChiliBook.lineNumbers = true;ChiliBook.automatic = true;&lt;/SCRIPT&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="xn77_72105ead5195ba5d52d3fb47df11d9e0" class="sentence"&gt;创建多维数据集使用帧&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn78_837066714569c61603413798885a2c76" class="sentence"&gt;创建 3D 体验的第二个方法是通过使用的最后一帧。&lt;/span&gt;&lt;span id="xn79_fd7d5bdb0ad9c54d143a36edb78e506e" class="sentence"&gt;在这里，不要创建 3D 对象本身，但启动具有所需的最终输出并将其导出为单个帧。&lt;/span&gt;&lt;span id="xn80_a0ae815f72c915381685d7782f64b0d2" class="sentence"&gt;多个 3D 建模软件程序允许您创建 3D 对象和可以为多个帧导出，然后导入到 Silverlight 的转换。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn81_9e33992178a3b0373615cf551c9b6367" class="sentence"&gt;在此示例中，我将采取一个简单的多维数据集的动画，并将其旋转的 x、 y 和 z 轴导出为多个帧的图像。&lt;/span&gt;&lt;span id="xn82_8fb988c6d889bdeda331d7876d504141" class="sentence"&gt;&lt;strong&gt;图 7&lt;/strong&gt; x 轴上显示的多维数据集旋转八个不同的帧。&lt;/span&gt;&lt;span id="xn83_86c8d1f3dfe8293beefbb4178c97b25e" class="sentence"&gt;对于此示例，我使用最少量的帧创建多维数据集的旋转，但每秒的帧创建更平滑、 无缝地旋转。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/hh547098.Lal_Figure7_hires(en-us,MSDN.10).png" /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span id="xn84_644228a9b23b68f060e7c3f84dd88760" class="sentence"&gt;图 7 八个不同的帧，模拟在 X 轴的旋转&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn85_cb1ab494e1c877b5bb21039107d0b5bd" class="sentence"&gt;为了模拟在 Silverlight 中的旋转，我使用计时器，如下面的代码所示：&lt;/span&gt;&lt;/p&gt;&lt;div class="CodeHighlighter"&gt;&lt;code class="xml"&gt;&lt;br/&gt;          &lt;span id="xn86_eb49c00a0d703632b248260d0cb5f492" class="sentence"&gt;DispatcherTimer timer = new DispatcherTimer();&lt;br/&gt;timer.Interval = new TimeSpan(0, 0, 0, 0, 500);&lt;br/&gt;timer.Tick += new EventHandler(Tick);&lt;br/&gt; &lt;br/&gt;private void Tick(object o, EventArgs sender)&lt;br/&gt;{&lt;br/&gt;  string imageuri = "cube/" + axis + "/" + currentImageIndex + ".png";&lt;br/&gt;  bgImage.Source = new BitmapImage(new Uri(imageuri, UriKind.RelativeOrAbsolute));&lt;br/&gt;  if (currentImageIndex &amp;lt;= 8)&lt;br/&gt;    currentImageIndex++;&lt;br/&gt;  else&lt;br/&gt;    currentImageIndex = 1;&lt;br/&gt;}&lt;/span&gt;&lt;br/&gt;        &lt;/code&gt;&lt;/div&gt;&lt;p&gt;&lt;SCRIPT type=text/javascript&gt;ChiliBook.lineNumbers = true;ChiliBook.automatic = true;&lt;/SCRIPT&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn87_ad70106eace85a1cbcf6f816683b2b86" class="sentence"&gt;请注意这是通过这种方法可以执行哪些操作的简化的版本。&lt;/span&gt;&lt;span id="xn88_88e935ee1c342b2864a9797e215b3db6" class="sentence"&gt;这里我为简单起见，使用导出的图像，但多个 3D 软件允许 XAML 导出，使用颜色和渐变的图像，提供无缝、 较平滑的动画而不是创建多边形。&lt;/span&gt;&lt;span id="xn89_aa66b199d24e59fd5b45eb142d2934c7" class="sentence"&gt;此外可以通过带有动画的演示图板替换计时器。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn90_a412ce7e35e1b2f0824e6e27d529f987" class="sentence"&gt;这种方法非常简单。&lt;/span&gt;&lt;span id="xn91_24a30c536060e912a3a57e11c53bfc1b" class="sentence"&gt;您有特定的转换要求与特定的 3D 对象。&lt;/span&gt;&lt;span id="xn92_5a0cf9aa3ae2d5c7fc0cdf15ce913999" class="sentence"&gt;您不必担心如何创建 3D 对象，并且这种技术可以用于创建任何种类的 3D 对象 &amp;#8212; 您不再限于简单的多维数据集。&lt;/span&gt;&lt;span id="xn93_64cc46d052896b0a3bbf8f85d3aa0582" class="sentence"&gt;此方法可用于所有类型的转换。&lt;/span&gt;&lt;span id="xn94_cc4a49483ccbc121199ebfb032a70fdd" class="sentence"&gt;您可以平移、 旋转和缩放复杂的 3D 对象。&lt;/span&gt;&lt;span id="xn95_fc63895170cdbade19a7f203e69c4360" class="sentence"&gt;它甚至模拟光源，直接从建模软件也将转换为它的效果。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn96_8bd195486bc80fd06baf243137c21a32" class="sentence"&gt;这种方法的主要限制是编程的针对 3D 对象的灵活性。&lt;/span&gt;&lt;span id="xn97_7961376cb27821ac3dd99bb48e4761b4" class="sentence"&gt;一旦您导出您的 3D 对象，它将生成可能很难对代码的静态代码。&lt;/span&gt;&lt;span id="xn98_7a0acf3bd3f29e5f23df38317a8e9263" class="sentence"&gt;Silverlight 应用程序中，您无法移动到其他元素的对象。&lt;/span&gt;&lt;span id="xn99_fcbfc8473d9c2854d7d4e4f9f86c15f2" class="sentence"&gt;另一个缺点是与每个转换呈线性增加的所需的帧数。&lt;/span&gt;&lt;span id="xn100_9aaa07b6df4836ccdbfe7f38ec286668" class="sentence"&gt;分开的呈现发生在 CPU，因此大较大的数值的帧的动画会有性能命中。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn101_ba96a5c682b729f9dd83cdbccb739e99" class="sentence"&gt;这将导致使用 XNA 库即将 Silverlight 5，其中，如您所见，克服了大部分的前两个方法的问题中的第三种方法。&lt;/span&gt;&lt;span id="xn102_cc305b2f8a06c80560b4e5c5e7b39ab0" class="sentence"&gt;但在此之前，我们来讨论一下如何 3D 对象转换 2D 屏幕在数学上 &amp;#8212; 3D 背后的天才逻辑。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="xn103_e1438c19c98f02be1298b292f9ee77f0" class="sentence"&gt;了解世界、 视图和投影矩阵&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn104_05a69478bdb064fb2ae3ec9cda86fc63" class="sentence"&gt;若要显示该对象，您必须了解三个主要概念或"空格"和对象如何从其自己的对象空间映射到屏幕：&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span id="xn105_7d793037a0760186574b0282f2f435e7" class="sentence"&gt;World&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="xn106_1bda80f2be4d3658e0baa43fbe7ae8c1" class="sentence"&gt;查看&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="xn107_dfa555786d19f339a13e6719241e9d6f" class="sentence"&gt;投影&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span id="xn108_26cff4e608e2a01bc15670a15def4c9f" class="sentence"&gt;&lt;strong&gt;图 8&lt;/strong&gt; 显示在其中一个对象映射到屏幕的顺序。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/hh547098.Lal_Figure8_hires(en-us,MSDN.10).png" /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span id="xn109_4cc668cdfcb788844a90569213c6e3ea" class="sentence"&gt;图 8 中的 3D 对象映射到屏幕的顺序&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn110_9f065bb2580b23e77aa751494af90397" class="sentence"&gt;第一组为 3D 对象的坐标是 x、 y 和 z 坐标 （也称为模型空间） 的对象空间中。&lt;/span&gt;&lt;span id="xn111_d5b47b597fcf8f2506c2220a72fc90ce" class="sentence"&gt;这些坐标是相对于另一个具有其中心 (0，0，0)。&lt;/span&gt;&lt;span id="xn112_5d4109e7d0dc6020e0e24e6c43876a89" class="sentence"&gt;请记住，与右侧的 3 维笛卡尔坐标，正 z 轴是对准查看者。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn113_9940eac5352f92ea16b9e0fd1c8c26c2" class="sentence"&gt;3D 多维数据集，正面的右上角将 （1,1,1），并且背面的左下角会 (-1、-1、-1），如中所示&lt;strong&gt;图 9&lt;/strong&gt;。&lt;/span&gt;&lt;span id="xn114_f92c2016904e360c1df48babc3ae17dd" class="sentence"&gt;在对象空间坐标是相对于另一个和它们的位置可以仅范围从-1 到 + 1。&lt;/span&gt;&lt;span id="xn115_ceb465d4974373e39cd18f8cf3f7521e" class="sentence"&gt;我需要为要使用的对象空间的 75%我多维数据集，乘以每个协调.75，因此新 &lt;em&gt;b&lt;/em&gt;将 （.75,.75,.75） 和新 &lt;em&gt;g&lt;/em&gt;（-.75、-.75、-.75） 将会。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/hh547098.Lal_Figure9_hires(en-us,MSDN.10).png" /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span id="xn116_489031d86932b592b0be8fe991417a76" class="sentence"&gt;图 9 在 3D 空间中的坐标&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn117_5146b87f4e7f545b21d72179c4141156" class="sentence"&gt;当将对象放在世界空间上时，对象本身不是移动，但而是相对于世界坐标映射乘以其坐标与世界矩阵。&lt;/span&gt;&lt;span id="xn118_db3a3d6ae0f9cb24780b5e3d9b7befab" class="sentence"&gt;在世界空间中，您可以通过移动来转换该对象的坐标、 更改来调整大小和更改对象来旋转的角度转换 3D 对象。&lt;/span&gt;&lt;span id="xn119_25beaa06e474ed0caed9d15790f19e0a" class="sentence"&gt;若要表达世界空间中的对象的坐标，您需要进行乘法运算的世界矩阵与每个顶点位置：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn120_5e8150b0daa270ae44ab36959b684ebe" class="sentence"&gt;对象世界坐标 = 对象坐标 * 世界矩阵&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn121_4fe49e890ec4d9c70880b6f64d0a474d" class="sentence"&gt;下一个元素是照相机视图，表示要从中查找对象的点。&lt;/span&gt;&lt;span id="xn122_cf3cb483fa1efbc822747fdb2274f1f8" class="sentence"&gt;此时可以更改在 3D 空间中，而不更改对象空间，以及世界空间中的实际对象的坐标。&lt;/span&gt;&lt;span id="xn123_216c951ed83815c87973c4e62ba899a1" class="sentence"&gt;若要计算相机视图相对于对象的坐标，乘视图矩阵与对象的世界矩阵：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn124_1107c859861859444eeabf325477b72d" class="sentence"&gt;对象视图坐标 = 世界坐标 * 视图矩阵&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn125_13edcac935e16ec78e5b4d22dab17c3b" class="sentence"&gt;最后，在对象视图具有要呈现在屏幕上 ； 这是您需要计算距离由于创建全景视图的位置。&lt;/span&gt;&lt;span id="xn126_44ee39c8e1e3f4ff665c0af8cee9e281" class="sentence"&gt;到目前为止，我对象以平行投影 （两侧为并行），但我需要将对象显示在透视投影 （边到消失点合并），因此我乘对象的视图矩阵和投影矩阵与世界矩阵的产品：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn127_4781983c89ed47c8519ed8f7eaececa6" class="sentence"&gt;对象最终坐标 = 世界坐标 * 视图矩阵 * 投影矩阵&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn128_363ef8005b04120445f417d074b878bc" class="sentence"&gt;这是在屏幕上，也称为 WorldViewProjection 的 3D 对象的最终位置。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="xn129_d54d3948008ae62940fb671b3773ce9d" class="sentence"&gt;矩阵&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn130_cf299ed21f6bbe5ea59280656db55e4d" class="sentence"&gt;在 Microsoft.Xna.Framework，矩阵结构包含在 Silverlight 5。它具有与 16 浮点数 4 x 4 同构矩阵作为字段和多种方法来生成一个转换矩阵 （请参阅&lt;strong&gt;图 10&lt;/strong&gt;)。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/hh547098.Lal_Figure10_hires(en-us,MSDN.10).png" /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span id="xn131_daecb1e3db99cae17e4afaed86c56c6e" class="sentence"&gt;图 10 先决条件 Silverlight 5 矩阵结构&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn132_4c064a916ff547b2f1bf42544eec4a79" class="sentence"&gt;按列 (M11-M33) 的前三行用于缩放和旋转转换，和第四行 (M41-M43） 用于翻译 （请参阅&lt;strong&gt;图 11&lt;/strong&gt;)。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="xn133_adf84dda6bb4d074d701d75531dfc1a9" class="sentence"&gt;图 11 4x4 矩阵&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;table class="charttable"&gt;    &lt;tbody&gt;        &lt;tr&gt;            &lt;td class="style0"&gt;&lt;strong&gt;&lt;span id="xn134_c4534fe0ca256b331e9a3f14fe17229d" class="sentence"&gt;M11&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style1"&gt;&lt;strong&gt;&lt;span id="xn135_abeccf9ae147d85436534371f961c95b" class="sentence"&gt;M12&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style2"&gt;&lt;strong&gt;&lt;span id="xn136_01eea3d08de140d10f208f90a16b712c" class="sentence"&gt;M13&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style3"&gt;&lt;strong&gt;&lt;span id="xn137_29ff1cd562dbe3e0bac6ef5eab2d3945" class="sentence"&gt;M14&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style4"&gt;&lt;span id="xn138_af533170e9968b9de45ab0842b54a315" class="sentence"&gt;M21&lt;/span&gt;&lt;/td&gt;            &lt;td class="style5"&gt;&lt;span id="xn139_aa15b9243a9f99d122d5803606e3c4df" class="sentence"&gt;M22&lt;/span&gt;&lt;/td&gt;            &lt;td class="style6"&gt;&lt;span id="xn140_bc0ac5c45aa06caf01aa7c9b27f1191f" class="sentence"&gt;M23&lt;/span&gt;&lt;/td&gt;            &lt;td class="style7"&gt;&lt;span id="xn141_dfcd69dd840097f12b65d678f4091b8b" class="sentence"&gt;M24&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style8"&gt;&lt;span id="xn142_50bd0a203c72b3900aff6a2d1243539c" class="sentence"&gt;M31&lt;/span&gt;&lt;/td&gt;            &lt;td class="style9"&gt;&lt;span id="xn143_58c397a93d33d905c202f04363f28b93" class="sentence"&gt;M32&lt;/span&gt;&lt;/td&gt;            &lt;td class="style10"&gt;&lt;span id="xn144_52703ea90438dbd3d61a28c184915c5c" class="sentence"&gt;M33&lt;/span&gt;&lt;/td&gt;            &lt;td class="style11"&gt;&lt;span id="xn145_97a83dac24610e67d61f67762cb6e2e4" class="sentence"&gt;M34&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style12"&gt;&lt;span id="xn146_095af332f3bd7cd54fbe6eac7d29b416" class="sentence"&gt;M41&lt;/span&gt;&lt;/td&gt;            &lt;td class="style13"&gt;&lt;span id="xn147_b32119c817c8d7caf13bdf02b6af4d8d" class="sentence"&gt;M42&lt;/span&gt;&lt;/td&gt;            &lt;td class="style14"&gt;&lt;span id="xn148_45a9bc650bba675a701c5ffbbe260e96" class="sentence"&gt;M43&lt;/span&gt;&lt;/td&gt;            &lt;td class="style15"&gt;&lt;span id="xn149_a4f46af0883d023cf25621596132229e" class="sentence"&gt;M44&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn150_f66ac468070c81bc7df1fe0ef204614c" class="sentence"&gt;为了更好地理解矩阵，让我们看到转换中如何使用它。&lt;/span&gt;&lt;span id="xn151_a808cebdde56580fc5329bf4df01fc7b" class="sentence"&gt;有个矩阵的五种不同类型： 4x4 矩阵结构、 恒等矩阵、 平移矩阵、 小数位数矩阵和旋转矩阵。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn152_9a92e526e5995452b11334b91c5914a0" class="sentence"&gt;恒等矩阵 （请参阅&lt;strong&gt;图 12&lt;/strong&gt;） 为单位矩阵的大小 4，且这成为世界空间中的 3D 对象的原始位置。&lt;/span&gt;&lt;span id="xn153_6a9c6e9fb6ff16822ac8208ec0fa82aa" class="sentence"&gt;如果乘恒等矩阵与任何矩阵，您将获得原始矩阵无任何变化。&lt;/span&gt;&lt;span id="xn154_affd276b16c3659790f3fdaeadbc1658" class="sentence"&gt;矩阵结构提供了一个简单的属性返回 Matrix.Identity。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="xn155_a03c9cca4131269eb70aa838abd9b175" class="sentence"&gt;图 12 恒等矩阵&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;table class="charttable"&gt;    &lt;tbody&gt;        &lt;tr&gt;            &lt;td class="style16"&gt;&lt;strong&gt;&lt;span id="xn156_c4ca4238a0b923820dcc509a6f75849b" class="sentence"&gt;1&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style17"&gt;&lt;strong&gt;&lt;span id="xn157_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style18"&gt;&lt;strong&gt;&lt;span id="xn158_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style19"&gt;&lt;strong&gt;&lt;span id="xn159_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style20"&gt;&lt;span id="xn160_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style21"&gt;&lt;span id="xn161_c4ca4238a0b923820dcc509a6f75849b" class="sentence"&gt;1&lt;/span&gt;&lt;/td&gt;            &lt;td class="style22"&gt;&lt;span id="xn162_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style23"&gt;&lt;span id="xn163_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style24"&gt;&lt;span id="xn164_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style25"&gt;&lt;span id="xn165_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style26"&gt;&lt;span id="xn166_c4ca4238a0b923820dcc509a6f75849b" class="sentence"&gt;1&lt;/span&gt;&lt;/td&gt;            &lt;td class="style27"&gt;&lt;span id="xn167_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style28"&gt;&lt;span id="xn168_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style29"&gt;&lt;span id="xn169_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style30"&gt;&lt;span id="xn170_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style31"&gt;&lt;span id="xn171_c4ca4238a0b923820dcc509a6f75849b" class="sentence"&gt;1&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn172_30d275238d1ab9d63cc2af8521d7a47d" class="sentence"&gt;要缩放的矩阵对象，请提供调用 Matrix.CreateScale 方法。&lt;/span&gt;&lt;span id="xn173_45ef41d5a939c7009fb1d49c2b7f3b39" class="sentence"&gt;缩放矩阵因此用于对 3D 对象的缩放变换乘法运算使用比例矩阵对象时 （请参阅&lt;strong&gt;图 13&lt;/strong&gt;），生成的矩阵相应地调整大小。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="xn174_103ff03d421f5e4413f8cd22cb2e06f5" class="sentence"&gt;图 13 比例矩阵&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;table class="charttable"&gt;    &lt;tbody&gt;        &lt;tr&gt;            &lt;td class="style32"&gt;&lt;strong&gt;&lt;span id="xn175_2c38b9e45cec1b324dde4e3d5b22c648" class="sentence"&gt;Sx&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style33"&gt;&lt;strong&gt;&lt;span id="xn176_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style34"&gt;&lt;strong&gt;&lt;span id="xn177_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style35"&gt;&lt;strong&gt;&lt;span id="xn178_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style36"&gt;&lt;span id="xn179_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style37"&gt;&lt;span id="xn180_1548af1c94ad45584324df8f08baf227" class="sentence"&gt;Sy&lt;/span&gt;&lt;/td&gt;            &lt;td class="style38"&gt;&lt;span id="xn181_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style39"&gt;&lt;span id="xn182_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style40"&gt;&lt;span id="xn183_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style41"&gt;&lt;span id="xn184_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style42"&gt;&lt;span id="xn185_7dabf5c198b0bab2eaa42bb03a113e55" class="sentence"&gt;Sz&lt;/span&gt;&lt;/td&gt;            &lt;td class="style43"&gt;&lt;span id="xn186_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style44"&gt;&lt;span id="xn187_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style45"&gt;&lt;span id="xn188_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style46"&gt;&lt;span id="xn189_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style47"&gt;&lt;span id="xn190_c4ca4238a0b923820dcc509a6f75849b" class="sentence"&gt;1&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn191_1b9fcef7d57c366ca5105e72c3b8070f" class="sentence"&gt;矩阵对象还提供了世界空间中移动对象的 Matrix.CreateTranslate 方法。&lt;/span&gt;&lt;span id="xn192_bc47729b17e0c8abd5230430d4aeebd8" class="sentence"&gt;当转换矩阵相乘 （请参阅&lt;strong&gt;图 14&lt;/strong&gt;），该对象将转换为在世界空间中。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="xn193_bc0ec89cb2326a83cfc79bbb371999bf" class="sentence"&gt;图 14 平移矩阵&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;table class="charttable"&gt;    &lt;tbody&gt;        &lt;tr&gt;            &lt;td class="style48"&gt;&lt;strong&gt;&lt;span id="xn194_c4ca4238a0b923820dcc509a6f75849b" class="sentence"&gt;1&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style49"&gt;&lt;strong&gt;&lt;span id="xn195_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style50"&gt;&lt;strong&gt;&lt;span id="xn196_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style51"&gt;&lt;strong&gt;&lt;span id="xn197_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style52"&gt;&lt;span id="xn198_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style53"&gt;&lt;span id="xn199_c4ca4238a0b923820dcc509a6f75849b" class="sentence"&gt;1&lt;/span&gt;&lt;/td&gt;            &lt;td class="style54"&gt;&lt;span id="xn200_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style55"&gt;&lt;span id="xn201_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style56"&gt;&lt;span id="xn202_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style57"&gt;&lt;span id="xn203_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style58"&gt;&lt;span id="xn204_c4ca4238a0b923820dcc509a6f75849b" class="sentence"&gt;1&lt;/span&gt;&lt;/td&gt;            &lt;td class="style59"&gt;&lt;span id="xn205_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style60"&gt;&lt;span id="xn206_7da685001e153f41a83eb6255069dc3d" class="sentence"&gt;Tx&lt;/span&gt;&lt;/td&gt;            &lt;td class="style61"&gt;&lt;span id="xn207_36f3af6226e0b5303e19b824e7442272" class="sentence"&gt;Ty&lt;/span&gt;&lt;/td&gt;            &lt;td class="style62"&gt;&lt;span id="xn208_73bb4387b3075739eacb9cd62ac4049c" class="sentence"&gt;Tz&lt;/span&gt;&lt;/td&gt;            &lt;td class="style63"&gt;&lt;span id="xn209_c4ca4238a0b923820dcc509a6f75849b" class="sentence"&gt;1&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn210_9d43fa8b6c61648503e4660118d63490" class="sentence"&gt;旋转，有多个方法。&lt;/span&gt;&lt;span id="xn211_566dbac098a1ebc341fe51cbf042ff48" class="sentence"&gt;Matrix.CreateFromYawPitchRoll 方法用于每个浮点数字值轴进行旋转。&lt;/span&gt;&lt;span id="xn212_2b4b3f8f6395aff9df32038ccdba703d" class="sentence"&gt;Matrix.CreateRotationX、 Matrix.CreateRotationY 和 Matrix.CreateRotationZ 的方法是为旋转对象沿 x、 y 和 z 轴。&lt;/span&gt;&lt;span id="xn213_96fa59804ecb5a9e90c0072113441d9b" class="sentence"&gt;相对于角度 theta 旋转矩阵涉及 M11 M33 元素，如中所示&lt;strong&gt;图 15&lt;/strong&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="xn214_94d8c4633c520431025b2a09526d0ccd" class="sentence"&gt;图 15 旋转矩阵，沿 X、 Y 和 Z 轴&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;table class="charttable"&gt;    &lt;tbody&gt;        &lt;tr&gt;            &lt;td class="style64"&gt;&lt;strong&gt;&lt;span id="xn215_c4ca4238a0b923820dcc509a6f75849b" class="sentence"&gt;1&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style65"&gt;&lt;strong&gt;&lt;span id="xn216_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style66"&gt;&lt;strong&gt;&lt;span id="xn217_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style67"&gt;&lt;strong&gt;&lt;span id="xn218_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style68"&gt;&lt;span id="xn219_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style69"&gt;&lt;span id="xn220_db48666d12491fcf5a6ccb596ef70133" class="sentence"&gt;Cos 则 &amp;#952;&lt;/span&gt;&lt;/td&gt;            &lt;td class="style70"&gt;&lt;span id="xn221_60a28d279c0d6e4814bbcfb9abb8055f" class="sentence"&gt;Sin 则 &amp;#952;&lt;/span&gt;&lt;/td&gt;            &lt;td class="style71"&gt;&lt;span id="xn222_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style72"&gt;&lt;span id="xn223_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style73"&gt;&lt;span id="xn224_5776f57993f5fef4a16d04ea4ec322ff" class="sentence"&gt;-Sin 则 &amp;#952;&lt;/span&gt;&lt;/td&gt;            &lt;td class="style74"&gt;&lt;span id="xn225_db48666d12491fcf5a6ccb596ef70133" class="sentence"&gt;Cos 则 &amp;#952;&lt;/span&gt;&lt;/td&gt;            &lt;td class="style75"&gt;&lt;span id="xn226_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style76"&gt;&lt;span id="xn227_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style77"&gt;&lt;span id="xn228_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style78"&gt;&lt;span id="xn229_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style79"&gt;&lt;span id="xn230_c4ca4238a0b923820dcc509a6f75849b" class="sentence"&gt;1&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style80"&gt;&lt;span id="xn231_22466b02ccc3fcf123bfba1878e86334" class="sentence"&gt;旋转 X&lt;/span&gt;&lt;/td&gt;            &lt;td class="style81"&gt;&amp;nbsp;&lt;/td&gt;            &lt;td class="style82"&gt;&amp;nbsp;&lt;/td&gt;            &lt;td class="style83"&gt;&amp;nbsp;&lt;/td&gt;        &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;table class="charttable"&gt;    &lt;tbody&gt;        &lt;tr&gt;            &lt;td class="style84"&gt;&lt;strong&gt;&lt;span id="xn232_db48666d12491fcf5a6ccb596ef70133" class="sentence"&gt;Cos 则 &amp;#952;&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style85"&gt;&lt;strong&gt;&lt;span id="xn233_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style86"&gt;&lt;strong&gt;&lt;span id="xn234_60a28d279c0d6e4814bbcfb9abb8055f" class="sentence"&gt;Sin 则 &amp;#952;&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style87"&gt;&lt;strong&gt;&lt;span id="xn235_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style88"&gt;&lt;span id="xn236_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style89"&gt;&lt;span id="xn237_c4ca4238a0b923820dcc509a6f75849b" class="sentence"&gt;1&lt;/span&gt;&lt;/td&gt;            &lt;td class="style90"&gt;&lt;span id="xn238_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style91"&gt;&lt;span id="xn239_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style92"&gt;&lt;span id="xn240_5776f57993f5fef4a16d04ea4ec322ff" class="sentence"&gt;-Sin 则 &amp;#952;&lt;/span&gt;&lt;/td&gt;            &lt;td class="style93"&gt;&lt;span id="xn241_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style94"&gt;&lt;span id="xn242_db48666d12491fcf5a6ccb596ef70133" class="sentence"&gt;Cos 则 &amp;#952;&lt;/span&gt;&lt;/td&gt;            &lt;td class="style95"&gt;&lt;span id="xn243_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style96"&gt;&lt;span id="xn244_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style97"&gt;&lt;span id="xn245_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style98"&gt;&lt;span id="xn246_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style99"&gt;&lt;span id="xn247_c4ca4238a0b923820dcc509a6f75849b" class="sentence"&gt;1&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style100"&gt;&lt;span id="xn248_6267062a987bdc565e2142330ed88311" class="sentence"&gt;旋转 Y&lt;/span&gt;&lt;/td&gt;            &lt;td class="style101"&gt;&amp;nbsp;&lt;/td&gt;            &lt;td class="style102"&gt;&amp;nbsp;&lt;/td&gt;            &lt;td class="style103"&gt;&amp;nbsp;&lt;/td&gt;        &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;table class="charttable"&gt;    &lt;tbody&gt;        &lt;tr&gt;            &lt;td class="style104"&gt;&lt;strong&gt;&lt;span id="xn249_db48666d12491fcf5a6ccb596ef70133" class="sentence"&gt;Cos 则 &amp;#952;&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style105"&gt;&lt;strong&gt;&lt;span id="xn250_60a28d279c0d6e4814bbcfb9abb8055f" class="sentence"&gt;Sin 则 &amp;#952;&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style106"&gt;&lt;strong&gt;&lt;span id="xn251_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;            &lt;td class="style107"&gt;&lt;strong&gt;&lt;span id="xn252_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style108"&gt;&lt;span id="xn253_5776f57993f5fef4a16d04ea4ec322ff" class="sentence"&gt;-Sin 则 &amp;#952;&lt;/span&gt;&lt;/td&gt;            &lt;td class="style109"&gt;&lt;span id="xn254_db48666d12491fcf5a6ccb596ef70133" class="sentence"&gt;Cos 则 &amp;#952;&lt;/span&gt;&lt;/td&gt;            &lt;td class="style110"&gt;&lt;span id="xn255_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style111"&gt;&lt;span id="xn256_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style112"&gt;&lt;span id="xn257_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style113"&gt;&lt;span id="xn258_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style114"&gt;&lt;span id="xn259_c4ca4238a0b923820dcc509a6f75849b" class="sentence"&gt;1&lt;/span&gt;&lt;/td&gt;            &lt;td class="style115"&gt;&lt;span id="xn260_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style116"&gt;&lt;span id="xn261_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style117"&gt;&lt;span id="xn262_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style118"&gt;&lt;span id="xn263_cfcd208495d565ef66e7dff9f98764da" class="sentence"&gt;0&lt;/span&gt;&lt;/td&gt;            &lt;td class="style119"&gt;&lt;span id="xn264_c4ca4238a0b923820dcc509a6f75849b" class="sentence"&gt;1&lt;/span&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td class="style120"&gt;&lt;span id="xn265_f673b49601e5e9a12771dcd47add4008" class="sentence"&gt;旋转 Z&lt;/span&gt;&lt;/td&gt;            &lt;td class="style121"&gt;&amp;nbsp;&lt;/td&gt;            &lt;td class="style122"&gt;&amp;nbsp;&lt;/td&gt;            &lt;td class="style123"&gt;&amp;nbsp;&lt;/td&gt;        &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="xn266_98109292ea257757d9d381437e7996f7" class="sentence"&gt;学习 Silverlight XNA 3D 管线&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn267_d3e4acfbbbdb971df29708a48d590032" class="sentence"&gt;与 XNA 库的 Silverlight 5 提供了一个分步过程，呈现在屏幕上的顶点坐标与创建 3D 对象。&lt;/span&gt;&lt;span id="xn268_eb8be69322178b66daf5bb84a68fe21e" class="sentence"&gt;这可以分为五个主要步骤 （请参阅&lt;strong&gt;图 16&lt;/strong&gt;) 涉及此处显示的组件：&lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span id="xn269_470f8dc2b09f970878453e04f2f33065" class="sentence"&gt;顶点缓冲区&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="xn270_33c5db58032c0d16d9fe1c0a0372b866" class="sentence"&gt;WorldViewProjection 坐标&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="xn271_8de1a9d9896d4c562d5cdefb92057a89" class="sentence"&gt;底纹： 顶点、 像素和纹理&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="xn272_3f3e045c08ecebb36ffee18c89448f3f" class="sentence"&gt;图形处理： 栅格化，剪辑，然后挑选&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="xn273_189e4e7e386cc676a8757f593f58f521" class="sentence"&gt;最终输出： 帧缓存器&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/hh547098.Lal_Figure16_hires(en-us,MSDN.10).png" /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span id="xn274_e3b1e39c0b50c9f2e6fd5cae08fd2eca" class="sentence"&gt;图 16 与 Silverlight 5 XNA 库创建 3D 对象&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn275_1377a2a26a383c09979a8e4c5407de5e" class="sentence"&gt;我将简要介绍每个步骤和其组件。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn276_9a5dcaa7e478e8c0b517efb408c2ce12" class="sentence"&gt;&lt;strong&gt;顶点缓冲区&lt;/strong&gt;在从顶点集合创建的顶点缓冲区，第一步是使用一组顶点来创建 3D 对象的骨架。&lt;/span&gt;&lt;span id="xn277_f763403e7d9bd67dfbddfd9a26f00969" class="sentence"&gt;每个顶点至少包含 x、 y 和 z 坐标，但通常也有其他属性 （如颜色和纹理。&lt;/span&gt;&lt;span id="xn278_58b99434ed309f296b24b4bab7337ee3" class="sentence"&gt;此集合的顶点然后用于创建顶点缓冲区，从而将转到该进程的下一步。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn279_6a89db9eb8375820bb1d9c557a4b26dc" class="sentence"&gt;&lt;strong&gt;WorldViewProjection 坐标&lt;/strong&gt;乘以使用世界、 视图和投影矩阵的顶点来计算最终的坐标。&lt;/span&gt;&lt;span id="xn280_93c534f9c94c1a72f841de2d54604ceb" class="sentence"&gt;在这里，计算与世界空间、 视图和投影的对象的关系，并应用。&lt;/span&gt;&lt;span id="xn281_1777464a0c81e7974f1fc7e89cd0f03b" class="sentence"&gt;检查最后两部分的更多详细信息。&lt;/span&gt;&lt;span id="xn282_14ffc0047d7562b19b597c6a8124fa71" class="sentence"&gt;一旦您具有最终的坐标，实际的底纹过程将会发生。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn283_5cf599d4c92f56c4ec204f3dd8ec4a4b" class="sentence"&gt;&lt;strong&gt;底纹&lt;/strong&gt;使用顶点阴影、 像素阴影和纹理底纹。&lt;/span&gt;&lt;span id="xn284_5beeddfd9d731ec6918f403e8bddea7c" class="sentence"&gt;在此步骤中，完成第一个顶点着色，然后逐像素底纹的发生情况。&lt;/span&gt;&lt;span id="xn285_e45fc78d4ad6f37a856cbf3db92bcb9d" class="sentence"&gt;在此步骤中，也会应用纹理底纹。&lt;/span&gt;&lt;span id="xn286_82eb991da3185b75ea948f370ba13464" class="sentence"&gt;这些最终的着色的坐标则用于创建帧缓存器。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn287_a6d1eaad2b18cf712c423c0f6cd8bf01" class="sentence"&gt;&lt;strong&gt;栅格化，剪辑，然后挑选&lt;/strong&gt;在过程中栅格化图像被转换为像素为单位），然后剪辑和精选被用来删除 &amp;#8232;object，连同隐藏的和不可见图层的骨架。&lt;/span&gt;&lt;span id="xn288_fca2d4e54b5a33363a9c66a71009f179" class="sentence"&gt;这是最后呈现在屏幕上。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn289_10892b64a12327393cf9e71621d99b79" class="sentence"&gt;&lt;strong&gt;帧缓冲区&lt;/strong&gt;图像栅格化后，修剪和 culled，帧缓存器生成的这再发送到屏幕的显示。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="xn290_0120ae4a223911f7e36d8628fbb31d45" class="sentence"&gt;创建多维数据集使用基元&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn291_157891c1accd4b2a8bdd1d45d6f60168" class="sentence"&gt;与矩阵、 世界、 视图、 投影和 3D 管道在 Silverlight 5 XNA 库的知识，让我们创建一个 3D 的多维数据集，请参阅如何一切汇集一起。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn292_42d4a1ad58c82ec849b8c292e40ab6f3" class="sentence"&gt;此方法的最重要优势是 GPU 加速，这使硬件加速，释放 CPU 从呈现 3D 对象。&lt;/span&gt;&lt;span id="xn293_d78e3486032102760905ad5579f91f71" class="sentence"&gt;这是由 EnableGPUAcceleration 参数设置为 true，则用来配置 Silverlight 插件，如下所示的 HTML 中的对象标记中启用：&lt;/span&gt;&lt;/p&gt;&lt;div class="CodeHighlighter"&gt;&lt;code class="xml"&gt;&lt;br/&gt;          &lt;span id="xn294_3bff6ce00ec09fca31454ee13fdf397e" class="sentence"&gt;&amp;lt;object data="data:application/x-silverlight-2,"&lt;br/&gt;  type="application/x-silverlight-2" width="100%" height="100%"&amp;gt;&lt;br/&gt;  &amp;lt;param name="EnableGPUAcceleration" value="true" /&amp;gt;&lt;br/&gt;  &amp;lt;param name="source" value="ClientBin/Cube3d.xap"/&amp;gt;&lt;br/&gt;  &amp;lt;param name="minRuntimeVersion" value="5.0.60211.0" /&amp;gt;&lt;br/&gt;&amp;lt;/object&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;/code&gt;&lt;/div&gt;&lt;p&gt;&lt;SCRIPT type=text/javascript&gt;ChiliBook.lineNumbers = true;ChiliBook.automatic = true;&lt;/SCRIPT&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn295_cfa00ed70c3f930cfcc90adf3531000b" class="sentence"&gt;在 XAML 中，我将添加一个 DrawingSurface 对象，对象内部的网格，用于呈现在 Silverlight 中的 3D 对象的 GraphicsDevice DrawPrimitives 方法的帮助 （请参阅&lt;strong&gt;图 17&lt;/strong&gt;）：&lt;/span&gt;&lt;/p&gt;&lt;div class="CodeHighlighter"&gt;&lt;code class="xml"&gt;&lt;br/&gt;          &lt;span id="xn296_a606c616216adb594ba0ea92f8527df2" class="sentence"&gt;&amp;lt;DrawingSurface Loaded="OnLoad" SizeChanged="OnSizeChanged" Draw="OnDraw"/&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;/code&gt;&lt;/div&gt;&lt;p&gt;&lt;SCRIPT type=text/javascript&gt;ChiliBook.lineNumbers = true;ChiliBook.automatic = true;&lt;/SCRIPT&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/hh547098.Lal_Figure17_hires(en-us,MSDN.10).png" /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span id="xn297_76fd70eeea5666471ea95612a1bcc70c" class="sentence"&gt;图 17 GraphicsDevice 类的 DrawPrimitives 方法&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn298_fabec05b837b9659acb27b182944b194" class="sentence"&gt;我将在 DrawingSurface 类中使用三种方法，可以创建和呈现该多维数据集。&lt;/span&gt;&lt;span id="xn299_310b8f2de3ec2e51f39cf2d1641447aa" class="sentence"&gt;OnLoad 方法用于创建多维数据集并初始化所有着色器和视图矩阵，不会更改此应用程序中。&lt;/span&gt;&lt;span id="xn300_8df34c458bd5e676b49daee6f1f161b7" class="sentence"&gt;请注意 3D 对象居中对齐 （0,0,0） 在使用对象空间的 75%--从 （.75,.75,.75） 的坐标 （-.75、-.75、-.75)。&lt;/span&gt;&lt;span id="xn301_904d312518f585c898257102d717f309" class="sentence"&gt;在这里，我将创建顶点缓冲区容纳顶点集合和初始化的 shaderStream、 pixelStream 和 imageStream 流中，将所有使用稍后在底纹步骤。&lt;/span&gt;&lt;span id="xn302_f0c8bfa3f271f8f396616f4e6a2cbccf" class="sentence"&gt;我还将初始化视图矩阵，它是在使用 cameraPosition 和 cameraTarget 以及 Vector3.Up （这意味着照相机正在向上查找） 的参数的对象正在查找摄像头的角度。&lt;/span&gt;&lt;span id="xn303_ae1a9e833c0273c36c3c9a853b160d6a" class="sentence"&gt;此代码如&lt;strong&gt;图 18&lt;/strong&gt; 所示。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="xn304_c5dfc87c97805b1e12640c7b4a82676d" class="sentence"&gt;图 18 设置 shaderStream、 pixelStream 和 imageStream&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="CodeHighlighter"&gt;&lt;code class="xml"&gt;&lt;br/&gt;          &lt;span id="xn305_795261fb272ad2cfe5b862663a454b9f" class="sentence"&gt;VertexBuffer vertexBuffer;&lt;br/&gt;VertexShader vertexShader;&lt;br/&gt;PixelShader pixelShader;&lt;br/&gt;Texture2D texture;&lt;br/&gt; &lt;br/&gt;private void OnLoad(object sender, RoutedEventArgs e)&lt;br/&gt;{&lt;br/&gt;  vertexBuffer = CreateCube();&lt;br/&gt;  Stream shaderStream = Application.GetResourceStream(new&lt;br/&gt;    Uri(@"Cube3d;component/shader/shader.vs", UriKind.Relative)).Stream;&lt;br/&gt;  vertexShader = VertexShader.FromStream(resourceDevice, shaderStream);&lt;br/&gt; &lt;br/&gt;  Stream pixelStream = Application.GetResourceStream(new  &lt;br/&gt;    Uri(@"Cube3d;component/shader/shader.ps", UriKind.Relative)).Stream;&lt;br/&gt;  pixelShader = PixelShader.FromStream(resourceDevice, pixelStream);&lt;br/&gt;           &lt;br/&gt;  Stream imageStream = Application.GetResourceStream(new&lt;br/&gt;    Uri(@"Cube3d;component/scene.jpg",&lt;br/&gt;    UriKind.Relative)).Stream;&lt;br/&gt;  var image = new BitmapImage();&lt;br/&gt;  image.SetSource(imageStream);&lt;br/&gt;  texture = new Texture2D(resourceDevice, image.PixelWidth,&lt;br/&gt;    image.PixelHeight, false, SurfaceFormat.Color);&lt;br/&gt;  image.CopyTo(texture);&lt;br/&gt;        &lt;br/&gt;  Vector3 cameraPosition = new Vector3(0, 0, 5.0f);&lt;br/&gt;  Vector3 cameraTarget = Vector3.Zero; &lt;br/&gt;  view = Matrix.CreateLookAt(cameraPosition, cameraTarget, Vector3.Up);&lt;br/&gt;}&lt;/span&gt;&lt;br/&gt;        &lt;/code&gt;&lt;/div&gt;&lt;p&gt;&lt;SCRIPT type=text/javascript&gt;ChiliBook.lineNumbers = true;ChiliBook.automatic = true;&lt;/SCRIPT&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn306_aefc0b7b366e7d71492f198be191807a" class="sentence"&gt;下一步是创建 3D 多维数据集的顶点缓冲区。&lt;/span&gt;&lt;span id="xn307_b4be3fa64e8bca33b04021f011453413" class="sentence"&gt;我将创建一个 CreateCube 方法，如中所示&lt;strong&gt;图 19&lt;/strong&gt; VertexBuffer 返回的。&lt;/span&gt;&lt;span id="xn308_594059aa50a7e15d2810f264663c3983" class="sentence"&gt;我将在 3D 空间中，创建两个矩形，具有 ABCD 组成的多维数据集和 EFGH 正面背面的多维数据集。&lt;/span&gt;&lt;span id="xn309_3332123c69150dffe082ee7aa8ecd8f9" class="sentence"&gt;我使用的 VertexPositionColor 结构创建的顶点和与每个相关的颜色集合。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="xn310_e4aa450117ac6e00397f9e67cd6d0af7" class="sentence"&gt;图 19 CreateCube 方法中创建的 VertexBuffer&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="CodeHighlighter"&gt;&lt;code class="xml"&gt;&lt;br/&gt;          &lt;span id="xn311_e64c0fa9a8e6847dc482e437b533d2f6" class="sentence"&gt;VertexBuffer CreateCube()&lt;br/&gt;{&lt;br/&gt;  var vertexCollection = new VertexPositionColor[36];&lt;br/&gt; &lt;br/&gt;  // Front coordinates&lt;br/&gt;  Vector3 cubeA = new Vector3(-0.75f, 0.75f, 0.75f);&lt;br/&gt;  Vector3 cubeB = new Vector3(0.75f, 0.75f, 0.75f);&lt;br/&gt;  Vector3 cubeC = new Vector3(-0.75f, -0.75f, 0.75f);&lt;br/&gt;  Vector3 cubeD = new Vector3(0.75f, -0.75f, 0.75f);&lt;br/&gt;  // Back coordinates&lt;br/&gt;  Vector3 cubeE = new Vector3(-0.75f, 0.75f, -0.75f);&lt;br/&gt;  Vector3 cubeF = new Vector3(0.75f, 0.75f, -0.75f);&lt;br/&gt;  Vector3 cubeG = new Vector3(-0.75f, -0.75f, -0.75f);&lt;br/&gt;  Vector3 cubeH = new Vector3(0.75f, -0.75f, -0.75f);&lt;br/&gt; &lt;br/&gt;  // Colors&lt;br/&gt;  Color cRed = Color.FromNonPremultiplied(255, 0, 0, 156);&lt;br/&gt;  Color cGreen = Color.FromNonPremultiplied(0, 255, 0, 156);&lt;br/&gt;  Color cBlue = Color.FromNonPremultiplied(0, 0, 255, 156);&lt;br/&gt;  Color cYellow = Color.FromNonPremultiplied(255, 255, 0, 156);&lt;br/&gt;  Color cBlack = Color.FromNonPremultiplied(0, 0, 0, 156);&lt;br/&gt;  Color cWhite = Color.FromNonPremultiplied(255, 255, 255, 156);&lt;br/&gt; &lt;br/&gt;  // Front&lt;br/&gt;  vertexCollection[0] = new VertexPositionColor(cubeA, cGreen);&lt;br/&gt;  vertexCollection[1] = new VertexPositionColor(cubeB, cGreen);&lt;br/&gt;  vertexCollection[2] = new VertexPositionColor(cubeC, cGreen);&lt;br/&gt;  vertexCollection[3] = new VertexPositionColor(cubeB, cBlue);&lt;br/&gt;  vertexCollection[4] = new VertexPositionColor(cubeD, cBlue);&lt;br/&gt;  vertexCollection[5] = new VertexPositionColor(cubeC, cBlue);&lt;br/&gt;  // Back &lt;br/&gt;  vertexCollection[6] = new VertexPositionColor(cubeG, cBlue);&lt;br/&gt;  vertexCollection[7] = new VertexPositionColor(cubeF, cBlue);&lt;br/&gt;  vertexCollection[8] = new VertexPositionColor(cubeE, cBlue);&lt;br/&gt;  vertexCollection[9] = new VertexPositionColor(cubeH, cGreen);&lt;br/&gt;  vertexCollection[10] = new VertexPositionColor(cubeF, cGreen);&lt;br/&gt;  vertexCollection[11] = new VertexPositionColor(cubeG, cGreen);&lt;br/&gt;  // Top&lt;br/&gt;  vertexCollection[12] = new VertexPositionColor(cubeE, cRed);&lt;br/&gt;  vertexCollection[13] = new VertexPositionColor(cubeF, cRed);&lt;br/&gt;  vertexCollection[14] = new VertexPositionColor(cubeA, cRed);&lt;br/&gt;  vertexCollection[15] = new VertexPositionColor(cubeF, cYellow);&lt;br/&gt;  vertexCollection[16] = new VertexPositionColor(cubeB, cYellow);&lt;br/&gt;  vertexCollection[17] = new VertexPositionColor(cubeA, cYellow);&lt;br/&gt;  // Bottom &lt;br/&gt;  vertexCollection[18] = new VertexPositionColor(cubeH, cRed);&lt;br/&gt;  vertexCollection[19] = new VertexPositionColor(cubeG, cRed);&lt;br/&gt;  vertexCollection[20] = new VertexPositionColor(cubeC, cRed);&lt;br/&gt;  vertexCollection[21] = new VertexPositionColor(cubeD, cYellow);&lt;br/&gt;  vertexCollection[22] = new VertexPositionColor(cubeH, cYellow);&lt;br/&gt;  vertexCollection[23] = new VertexPositionColor(cubeC, cYellow);&lt;br/&gt;  // Left&lt;br/&gt;  vertexCollection[24] = new VertexPositionColor(cubeC, cBlack);&lt;br/&gt;  vertexCollection[25] = new VertexPositionColor(cubeG, cBlack);&lt;br/&gt;  vertexCollection[26] = new VertexPositionColor(cubeA, cBlack);&lt;br/&gt;  vertexCollection[27] = new VertexPositionColor(cubeA, cWhite);&lt;br/&gt;  vertexCollection[28] = new VertexPositionColor(cubeG, cWhite);&lt;br/&gt;  vertexCollection[29] = new VertexPositionColor(cubeE, cWhite);&lt;br/&gt;  // Right &lt;br/&gt;  vertexCollection[30] = new VertexPositionColor(cubeH, cWhite);&lt;br/&gt;  vertexCollection[31] = new VertexPositionColor(cubeD, cWhite);&lt;br/&gt;  vertexCollection[32] = new VertexPositionColor(cubeB, cWhite);&lt;br/&gt;  vertexCollection[33] = new VertexPositionColor(cubeH, cBlack);&lt;br/&gt;  vertexCollection[34] = new VertexPositionColor(cubeB, cBlack);&lt;br/&gt;  vertexCollection[35] = new VertexPositionColor(cubeF, cBlack);&lt;br/&gt; &lt;br/&gt;  var vb = new VertexBuffer(resourceDevice,&lt;br/&gt;    VertexPositionColor.VertexDeclaration,&lt;br/&gt;    vertexCollection.Length, BufferUsage.WriteOnly);&lt;br/&gt;  vb.SetData(0, vertexCollection, 0, vertexCollection.Length, 0);&lt;br/&gt;  return vb;&lt;br/&gt;}&lt;/span&gt;&lt;br/&gt;        &lt;/code&gt;&lt;/div&gt;&lt;p&gt;&lt;SCRIPT type=text/javascript&gt;ChiliBook.lineNumbers = true;ChiliBook.automatic = true;&lt;/SCRIPT&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn312_9949e8707e42ed5f697309559aec3f09" class="sentence"&gt;绘制表面的 OnSizeChanged 方法用于更新投影和屏幕表面的维度所基于的长宽比:&lt;/span&gt;&lt;/p&gt;&lt;div class="CodeHighlighter"&gt;&lt;code class="xml"&gt;&lt;br/&gt;          &lt;span id="xn313_7a3869845d9799e193e810d9a21f0649" class="sentence"&gt;private void OnSizeChanged(object sender, SizeChangedEventArgs e)&lt;br/&gt;{&lt;br/&gt;  DrawingSurface surface = sender as DrawingSurface;&lt;br/&gt;  float sceneAspectRatio = (float)surface.ActualWidth / (float)surface.ActualHeight&lt;br/&gt;  projection = Matrix.CreatePerspectiveFieldOfView&lt;br/&gt;               (MathHelper.PiOver4, sceneAspectRatio, 1.0f, 100.0f);&lt;br/&gt;}&lt;/span&gt;&lt;br/&gt;        &lt;/code&gt;&lt;/div&gt;&lt;p&gt;&lt;SCRIPT type=text/javascript&gt;ChiliBook.lineNumbers = true;ChiliBook.automatic = true;&lt;/SCRIPT&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn314_cba1fc9731f4635d2f87dc1ab1a48d19" class="sentence"&gt;最后一个方法是 OnDraw，允许动态转换 3D 多维数据集上。&lt;/span&gt;&lt;span id="xn315_9885679b34bf815421fad4a2d98d419f" class="sentence"&gt;这是我应用 Matrix.CreateScale 调整多维数据集，以将其旋转的 Matrix.CreateFromYawPitchRoll 和 Matrix.CreateTranslate 以将其移动到的位置。&lt;/span&gt;&lt;span id="xn316_e8ff01078809e9de65d378de85dec5b4" class="sentence"&gt;在这里，worldViewProjection 计算并发送给 vertexShader 方法为底纹顶点，后者反过来将传送到 pixelShader 着色的多维数据集"墙壁"。&lt;/span&gt;&lt;span id="xn317_86bf03591326f60edc9e6ab11bad7fe8" class="sentence"&gt;这反过来也可以发送到 textureShader，它可以基于图像。&lt;/span&gt;&lt;span id="xn318_3cfe79d7183fc45dc2b0cfebfbdb7459" class="sentence"&gt;最后，GraphicDevice 对象调用 DrawPrimitives 方法，以呈现输出帧中，如中所示&lt;strong&gt;图 20&lt;/strong&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="xn319_ba9f3c007576efd9f3aa49bda060b352" class="sentence"&gt;图 20 调用 DrawPrimitives 方法来呈现输出帧&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="CodeHighlighter"&gt;&lt;code class="xml"&gt;&lt;br/&gt;          &lt;span id="xn320_2bb8ea0d3c569c74bd58eb061ad82b0d" class="sentence"&gt;void OnDraw(object sender, DrawEventArgs args)&lt;br/&gt;{&lt;br/&gt;  Matrix position = Matrix.Identity;&lt;br/&gt;  Matrix scale = Matrix.CreateScale(1.0f);&lt;br/&gt;  float xf = 0.0f; float yf = 0.0f; float zf = 0.0f;&lt;br/&gt; &lt;br/&gt;  if (cubeXAxis) xf = MathHelper.PiOver4 * (float)args.TotalTime.TotalSeconds;&lt;br/&gt;  if (cubeYAxis) yf = MathHelper.PiOver4 * (float)args.TotalTime.TotalSeconds;&lt;br/&gt;  if (cubeZAxis) zf = MathHelper.PiOver4 * (float)args.TotalTime.TotalSeconds;&lt;br/&gt; &lt;br/&gt;  Matrix rotation = Matrix.CreateFromYawPitchRoll(xf, yf, zf);&lt;br/&gt;  Matrix world;&lt;br/&gt;  if (translateZ != 0)&lt;br/&gt;    world = rotation * Matrix.CreateTranslation(0, 0, (float)translateZ);&lt;br/&gt;  else&lt;br/&gt;    world = scale * rotation * position;&lt;br/&gt;           &lt;br/&gt;  // Calculate the final coordinates to pass to the shader.&lt;/span&gt;&lt;br/&gt;          &lt;span id="xn321_fd0ac2cc1178a2700ec074114fe11482" class="sentence"&gt;Matrix worldViewProjection = world * view * projection;&lt;br/&gt;  args.GraphicsDevice.Clear(ClearOptions.Target | ClearOptions.DepthBuffer,&lt;br/&gt;    new Microsoft.Xna.Framework.Color(0, 0, 0, 0), 10.0f, 0);&lt;br/&gt;  &lt;br/&gt;  // Set up vertex pipeline.&lt;/span&gt;&lt;br/&gt;          &lt;span id="xn322_e726b08e464c8049e04e440ba8456068" class="sentence"&gt;args.GraphicsDevice.SetVertexBuffer(vertexBuffer);&lt;br/&gt;  args.GraphicsDevice.SetVertexShader(vertexShader);&lt;br/&gt;  args.GraphicsDevice.SetVertexShaderConstantFloat4(0, ref worldViewProjection);&lt;br/&gt; &lt;br/&gt;  // Set up pixel pipeline.&lt;/span&gt;&lt;br/&gt;          &lt;span id="xn323_2f911ed0e49d437ccd4506f39066e48e" class="sentence"&gt;args.GraphicsDevice.SetPixelShader(pixelShader);&lt;br/&gt;  args.GraphicsDevice.Textures[0] = texture;&lt;br/&gt;  args.GraphicsDevice.DrawPrimitives(PrimitiveType.TriangleList, 0, 12);&lt;br/&gt;  args.InvalidateSurface();&lt;br/&gt;}&lt;/span&gt;&lt;br/&gt;        &lt;/code&gt;&lt;/div&gt;&lt;p&gt;&lt;SCRIPT type=text/javascript&gt;ChiliBook.lineNumbers = true;ChiliBook.automatic = true;&lt;/SCRIPT&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn324_6e248f05f4751f01755adac2b80b86cc" class="sentence"&gt;此动态呈现的绘图图面上的最后一个 3D 多维数据集 （请参阅&lt;strong&gt;图 21&lt;/strong&gt;)。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/hh547098.Lal_Figure21_hires(en-us,MSDN.10).png" /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span id="xn325_c0cf1ae302052e1f7049c4e0c2cffb8e" class="sentence"&gt;图 21 绘图图面上的最后一个三维多维数据集&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn326_ba826e9d190b9f853bd94fcc219e177c" class="sentence"&gt;这种方法使用 GPU 加速，并不会呈现隐藏的 3D 对象的侧面或背面，并与我的第一种方法不同。&lt;/span&gt;&lt;span id="xn327_e3dd87b0f025d58b51d796c15b23fd61" class="sentence"&gt;这还使用帧缓冲区内存中呈现最终的输出类似于第二种方法，但具有完全控制和针对对象，编程的灵活性与 OnDraw 方法一样。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn328_a562c8b33c9af8b81088ae9cd6afe1e0" class="sentence"&gt;现在，您已经了解在 Silverlight，每一个都有其自己的优势和劣势中创建 3D 对象的三种不同的方法。&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nowpaper/aggbug/2271745.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nowpaper/archive/2011/12/02/2271745.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nowpaper/archive/2011/11/29/2267733.html</id><title type="text">跨平台网络游戏趋势和优势</title><summary type="text">前几年还是网页游戏蓬勃发展的状态，就有分析指出从明年开始网页游戏市场已经饱和，想想几年前客户端游戏也是同样的窘境，如果将桌面、移动设备、网页统称一个词汇的话，那就是终端，现在各种的终端用户已经被厂商挖掘殆尽，新兴的公司和团队都想游出一片蓝海出来可想而知是多么的困难。少年时，我们会痴迷于红白机上一个个关卡之间的挑战，后来有了网络游戏，于是我们不再形单影孤的一个人对着显示器，而是和朋友一起在虚拟世界中交互，但纵观我们在玩这些游戏的时候都会局限于一个终端，而且是各种主机各种终端越来越多，但它们之间的基本上没什么联系，终端的多样化，也造成了用户分流，分流的结果就是平均到每个终端的人数会大大减少，如果将</summary><published>2011-11-29T07:47:00Z</published><updated>2011-11-29T07:47:00Z</updated><author><name>nowpaper</name><uri>http://www.cnblogs.com/nowpaper/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nowpaper/archive/2011/11/29/2267733.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nowpaper/archive/2011/11/29/2267733.html"/><content type="html">&lt;p&gt;前几年还是网页游戏蓬勃发展的状态，就有分析指出从明年开始网页游戏市场已经饱和，想想几年前客户端游戏也是同样的窘境，如果将桌面、移动设备、网页统称一个词汇的话，那就是终端，现在各种的终端用户已经被厂商挖掘殆尽，新兴的公司和团队都想游出一片蓝海出来可想而知是多么的困难。&lt;/p&gt;&lt;p&gt;少年时，我们会痴迷于红白机上一个个关卡之间的挑战，后来有了网络游戏，于是我们不再形单影孤的一个人对着显示器，而是和朋友一起在虚拟世界中交互，但纵观我们在玩这些游戏的时候都会局限于一个终端，而且是各种主机各种终端越来越多，但它们之间的基本上没什么联系，终端的多样化，也造成了用户分流，分流的结果就是平均到每个终端的人数会大大减少，如果将其回归整合，用户群体是不是变大了，变大是必然的，但不是1+1的结果，从用户交叉使用不同设备的情况来看，而是&amp;ldquo;并集&amp;rdquo;，即便是并集，也是扩大了原有范围，从单纯的细分市场拓展到了上一层的细分市场，当并集越来越多，用户的基础就越来越大，如果有技术或产品做到这一点符合需求，将前途不可限量，跨平台的游戏可以说是未来重要的趋势。&lt;/p&gt;&lt;p&gt;记得当年多么想在课堂上通过神奇的幻想出来的机器偷偷玩上游戏，打工时挤在公交上想通过手机遥控家里的电脑排队上网络&amp;hellip;&amp;hellip;这些都是幻想，但是随着科技的发展，发现这一切都不再遥不可及，一切都源于，人们通过各种方法让生活变得更加方便快捷。&lt;/p&gt;&lt;p&gt;从产品角度上来说，这种体验无庸置疑是令人异常兴奋，你可以在任何地方使用需要的设备玩游戏。&lt;/p&gt;&lt;p&gt;从开发角度上来说，一个产品多端使用，可以大大的降低开发成本和经营成本，无论在什么终端上跑什么程序，服务器总是一个，不必为此单独的投入成本。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://blog.51cto.com/attachment/201111/101052763.jpg"&gt;&lt;img border="0" alt="" width="600" height="400" wid="" src="http://blog.51cto.com/attachment/201111/101052763.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://blog.51cto.com/attachment/201111/101218459.jpg"&gt;&lt;img border="0" alt="" width="600" height="400" src="http://blog.51cto.com/attachment/201111/101218459.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nowpaper/aggbug/2267733.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nowpaper/archive/2011/11/29/2267733.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nowpaper/archive/2011/09/20/2182967.html</id><title type="text">能够PCWeb和WindowsPhone7互动的游戏视频</title><summary type="text">在今年上半年的时候曾经发过《WindowsPhone7和PC互动游戏小创意》，基于这个演示的基础，加上“芒果”的威力，终于将一款网页MMORPG游戏移植到WindowsPhone7.1手机上，这个项目早在今年的7月份就已经完成，只是公布的时机未到，这次专门分享4分钟加长的录制视频，这个视频录制的还是比较早期的版本，例如一些DEBUG等不和谐因素还是在里面呢。能够达到窝窝世界20%左右的功能，正在努力将全部的功能移植进入。窝窝世界已经内测，运营方官方网站是wowo.kx1d.com这么来写的话有广告之嫌，还是多聊聊技术细节吧，首先WP7必须是芒果，因为芒果版本才有socket，只要可以连接到互联</summary><published>2011-09-20T15:26:00Z</published><updated>2011-09-20T15:26:00Z</updated><author><name>nowpaper</name><uri>http://www.cnblogs.com/nowpaper/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nowpaper/archive/2011/09/20/2182967.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nowpaper/archive/2011/09/20/2182967.html"/><content type="html">&lt;p&gt;在今年上半年的时候曾经发过《&lt;span class="Apple-style-span" style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-weight: bold; "&gt;&lt;a id="homepage1_HomePageDays_DaysList_DayItem_1_DayList_1_TitleUrl_0" href="http://www.cnblogs.com/nowpaper/archive/2011/05/25/2057248.html" style="color: #1a8bc8; text-decoration: none; "&gt;WindowsPhone7和PC互动游戏小创意&lt;/a&gt;&lt;/span&gt;》，基于这个演示的基础，加上&amp;#8220;芒果&amp;#8221;的威力，终于将一款网页MMORPG游戏移植到WindowsPhone7.1手机上，这个项目早在今年的7月份就已经完成，只是公布的时机未到，这次专门分享4分钟加长的录制视频，这个视频录制的还是比较早期的版本，例如一些DEBUG等不和谐因素还是在里面呢。&lt;/p&gt;&lt;p&gt;&lt;embed src="http://player.youku.com/player.php/sid/XMzA1NTAzMTM2/v.swf" allowFullScreen="true" quality="high" width="480" height="400" align="center" allowScriptAccess="always" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;能够达到窝窝世界20%左右的功能，正在努力将全部的功能移植进入。窝窝世界已经内测，运营方官方网站是wowo.kx1d.com&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;这么来写的话有广告之嫌，还是多聊聊技术细节吧，首先WP7必须是芒果，因为芒果版本才有socket，只要可以连接到互联网就可以登录到游戏当中，并且多个端上看到的效果是一样的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://images.cnblogs.com/cnblogs_com/nowpaper/WOWO/WP7/1.jpg" width="600" height="450" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;但是直接使用Silverlight的方法去显示场景、人物等还是非常卡的，所以需要借助WP7的XNA处理图像。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://images.cnblogs.com/cnblogs_com/nowpaper/WOWO/WP7/2.jpg" width="600" height="450" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;好在WP7.1芒果里有新的3DGraphics工程，使用这个项目工程可以完全做到使用Silverlight做界面，XNA做游戏渲染了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://images.cnblogs.com/cnblogs_com/nowpaper/WOWO/WP7/3.jpg" width="600" height="450" alt="" /&gt;&lt;/p&gt;&lt;p&gt;在XNA里绘制时需要取得设备才可以，具体的细节可以查一些XNA的文档&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://images.cnblogs.com/cnblogs_com/nowpaper/WOWO/WP7/4.jpg" width="600" height="450" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Silverlight的控件要是需要显示到界面当中，则需要使用UIElementRender来渲染，然后和界面结合，有兴趣的同学可以浏览马宁的相关文章，他提供比较全面的例子。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://images.cnblogs.com/cnblogs_com/nowpaper/WOWO/WP7/5.jpg" width="600" height="450" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;我觉得WP7是一个非常的应用平台，解决方案多，开发工具简单易用，技术规格门槛相对来说比较低，加上能够一些神奇的事情，比如就本篇所介绍的互联互通游戏产品，将来一定是一个非常明显的技术趋势&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nowpaper/aggbug/2182967.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nowpaper/archive/2011/09/20/2182967.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nowpaper/archive/2011/09/19/2180994.html</id><title type="text">WindowsPhone7.1机器调试部署不成功的问题解决</title><summary type="text">最近参加Windows Phone 7“芒果”尝鲜热身赛，结果神奇的发现我的芒果不能部署和调试程序了，提示信息为设备连接错误，而开发解锁工具正常，Zune同步也没问题，就是调试不了，请教了很多人，大部分的方法是：1、重新安装SDK2、 换线换端口好像这种能解决大部分的这类问题，可是我尝试了多种方法，都是不行。如果你的情况是这样，并且在ApplicationDeployment里Deploy时出现Error 0x81030120的错误，那么基本上和我的是一样。解决方法是打开工程的WMAppManifest.xml文件，删除掉这行：&lt;Capability Name="ID_CAP_</summary><published>2011-09-19T02:14:00Z</published><updated>2011-09-19T02:14:00Z</updated><author><name>nowpaper</name><uri>http://www.cnblogs.com/nowpaper/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nowpaper/archive/2011/09/19/2180994.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nowpaper/archive/2011/09/19/2180994.html"/><content type="html">&lt;p&gt;最近参加&lt;a href="http://msdn.microsoft.com/zh-cn/windowsphone/hh418467?ocid=soc-n-cn-dca--" target="_blank"&gt;&lt;font class="Apple-style-span" color="#000000"&gt;Windows Phone 7&amp;#8220;芒果&amp;#8221;尝鲜热身赛&lt;/font&gt;&lt;/a&gt;，结果神奇的发现我的芒果不能部署和调试程序了，提示信息为设备连接错误，而开发解锁工具正常，Zune同步也没问题，就是调试不了，请教了很多人，大部分的方法是：&lt;/p&gt;&lt;p&gt;1、重新安装SDK&lt;/p&gt;&lt;p&gt;2、 换线换端口&lt;/p&gt;&lt;p&gt;好像这种能解决大部分的这类问题，可是我尝试了多种方法，都是不行。&lt;/p&gt;&lt;p&gt;如果你的情况是这样，并且在ApplicationDeployment里Deploy时出现Error 0x81030120的错误，那么基本上和我的是一样。解决方法是打开工程的WMAppManifest.xml文件，删除掉这行：&lt;/p&gt;&lt;p&gt;&amp;lt;Capability Name="ID_CAP_INTEROPSERVICES"/&amp;gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;然后再部署调试就好了，其原因是WindowsPhone7.1不支持这个Capability。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nowpaper/aggbug/2180994.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nowpaper/archive/2011/09/19/2180994.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nowpaper/archive/2011/05/25/2057248.html</id><title type="text">WindowsPhone7和PC互动游戏小创意</title><summary type="text">在参加微软创新技术大赛中没有展示到的最后一个演示，WindowsPhone7和PC之间互动游戏，这是一段补充视频，了却心中的一份遗憾，随着芒果的临近，WindowsPhone7定是一个行业爆发点，当手机和电脑真正联动的时候，什么创意不能实现呢？ 让世界知道中国人不缺乏创意。技术细节和原理在以后会有分享，这个版本并没有用上WindowsPhone7的7.1芒果SDK，所以，当前的WP7开发者完全能做出来。欢迎关注我的微博：http://t.sina.com.cn/nowpaper</summary><published>2011-05-25T12:06:00Z</published><updated>2011-05-25T12:06:00Z</updated><author><name>nowpaper</name><uri>http://www.cnblogs.com/nowpaper/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nowpaper/archive/2011/05/25/2057248.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nowpaper/archive/2011/05/25/2057248.html"/><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;在参加微软创新技术大赛中没有展示到的最后一个演示，WindowsPhone7和PC之间互动游戏，这是一段补充视频，了却心中的一份遗憾，随着芒果的临近，WindowsPhone7&amp;nbsp;定是一个行业爆发点，当手机和电脑真正联动的时候，什么创意不能实现呢？ 让世界知道中国人不缺乏创意。&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;embed name="ssss" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=53130021_1426971613_bk6xGiE5C2LK+l1lHz2stqkP7KQNt6nkjWiyslWlIw9aQ0/XM5GcYdwE4CnUAdkEqDhAQZs+dv4m1Rw/s.swf" width="480" height="370" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/div&gt;&lt;p&gt;技术细节和原理在以后会有分享，这个版本并没有用上WindowsPhone7的7.1芒果SDK，所以，当前的WP7开发者完全能做出来。&lt;/p&gt;&lt;p&gt;欢迎关注我的微博：http://t.sina.com.cn/nowpaper&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nowpaper/aggbug/2057248.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nowpaper/archive/2011/05/25/2057248.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nowpaper/archive/2011/05/18/2049548.html</id><title type="text">快乐技术开发者沙龙银光聚会第二期</title><summary type="text">快乐技术开发者沙龙银光聚会第二期，此次活动由快乐之王倾情奉献，全力负责。活动详情：http://www.cnblogs.com/hielvis/archive/2011/05/18/2049521.html北京中游在线科技有限公司是无端化领域的网络游戏开发公司，是微软中国战略合作伙伴，开发有全球首款SilverlightMMORPG《窝窝世界》，是全国推广.Net技术的先锋企业！中游在线在2010年成功举办银光开发者聚会，2011年5月29日举办快乐技术开发者沙龙银光聚会第二期我们再次聚首。本次之主题为：Silverlight开发神器 ——Blend</summary><published>2011-05-18T01:01:00Z</published><updated>2011-05-18T01:01:00Z</updated><author><name>nowpaper</name><uri>http://www.cnblogs.com/nowpaper/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nowpaper/archive/2011/05/18/2049548.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nowpaper/archive/2011/05/18/2049548.html"/><content type="html">&lt;div&gt;快乐技术开发者沙龙银光聚会第二期，此次活动由&lt;a href="http://www.cnblogs.com/hielvis" target="_blank"&gt;快乐之王&lt;/a&gt;倾情奉献，全力负责。&lt;/div&gt;&lt;p&gt;活动详情：http://www.cnblogs.com/hielvis/archive/2011/05/18/2049521.html&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: verdana, arial; line-height: 23px; font-size: 13px; "&gt;&lt;span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #111111; font-size: 14px; line-height: 1.8em; "&gt;&lt;a target="_blank" href="http://www.nxria.com/" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #0066cc; "&gt;北京中游在线科技有限公司&lt;/a&gt;是无端化领域的网络游戏开发公司，是微软中国战略合作伙伴，开发有全球首款SilverlightMMORPG《窝窝世界》，是全国推广.Net技术的先锋企业！&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;中游在线在2010年成功举办&lt;a href="http://games.sina.com.cn/y/n/2010-10-20/1109444769.shtml" target="_blank"&gt;银光开发者聚会&lt;/a&gt;，2011年5月29日举办快乐技术开发者沙龙银光聚会第二期我们再次聚首。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;本次之主题为：Silverlight开发神器 &amp;#8212;&amp;#8212;Blend&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/140818/2011051806262531.jpg" alt="" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nowpaper/aggbug/2049548.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nowpaper/archive/2011/05/18/2049548.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
