<?xml version="1.0" encoding="GBK" ?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dcterms="http://purl.org/dc/terms/">
 <channel>
  	  <title><![CDATA[成都游戏学院杜文权老师的博客]]></title>
	  <link>http://duwenquanoo.blog.163.com</link>
	  <description><![CDATA[ 一个自信,独立,坚强,充满信心．恒心．耐心的人,
丰富的教学经验和工作经验,　　　　　　　　　　　　　　
精通c＋＋语言．Ｄ３Ｄ,java等等计算机语言．]]></description>
	  <language>zh-CN</language>
	  <pubDate>Fri, 4 Jul 2008 11:00:19 +0800</pubDate>
	  <lastBuildDate>Fri, 4 Jul 2008 11:00:19 +0800</lastBuildDate>
	  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
	  <generator><![CDATA[NetEase Space]]></generator>
	  <managingEditor><![CDATA[duwenquanoo]]></managingEditor>
	  <webMaster><![CDATA[成都游戏学院杜文权老师的博客]]></webMaster>
		  <ttl>120</ttl>
	  <image>
	  	<title><![CDATA[成都游戏学院杜文权老师的博客]]></title>
	  	<url>http://duwenquanoo.blog.163.com/style/common/user_default.gif</url>
	  	<link>http://duwenquanoo.blog.163.com</link>
	  </image>
  <item>
  	<title><![CDATA[微软的发展史（4）]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/702656652008510403215</link>
    <description><![CDATA[<div><P>成都游戏学院 <A href="http://www.cdgamecollege.org"><FONT color=#556c88>http://www.cdgamecollege.org</FONT></A></P>
<P>　　Internet Explorer -它是微软的网页浏览器。它是目前世界上使用最广泛的一种浏览器，从Windows 95开始，被设置为微软各版本的Windows的默认浏览器。它在Apple Macintosh上也可以使用。微软投资了四亿美元来把这种浏览器预装在苹果机上。</P>
<P>　　Microsoft FrontPage -它是一款所见即所得的网页编辑软件。</P>
<P>　　Windows Media Player -它是一个用于播放音频和视频的程序。</P>
<P>　　微软也生产一系列参考产品，例如百科全书和地图册，使用Encarta的名称。</P>
<P>　　微软还开发用于应用系统开发的集成开发环境，命名为Microsoft Visual Studio。目前已发布用于.NET环境编程的相应开发工具Visual Studio .NET。</P>
<P>　　游戏帝国时代(Age of Empires)微软模拟飞行(Microsoft Flight Simulator)微软模拟火车微软模拟货车Halo(Halo) halo2(Halo2)注:《光环》为Microsoft旗下工作室开发.「生态体系」</P>
<P>　　微软公司试图在其产品周围建立“生态体系”，以为其产品以及品牌增值。</P>
<P>　　网络产品1990年代中期，微软开始将其产品线扩张到计算机网络领域。微软在1995年8月24日推出了在线服务MSN(Microsoft Network，微软网络)。MSN是美国在线的直接竞争对手，也是微软其他网络产品的主打品牌。</P>
<P>　　1996年，微软以及美国的广播业巨擎NBC(国家广播公司)联合创立了MSNBC，一个综合性的24小时新闻频道以及在线新闻服务供应商。</P>
<P>　　1997年末，微软收购了Hotmail，最早以及最受欢迎的webmail服务商。Hotmail被重新命名为MSN Hotmail，并成为.NET Passport，一个综合登入服务系统的平台。</P>
<P>　　MSN Messenger是一个即时信息客户程序，由微软在1999年推出，是美国在线的AOL Instant Messager(AIM)及ICQ的主要竞争对手。</P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/702656652008510403215</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/702656652008510403215</guid>
    <pubDate>Tue, 10 Jun 2008 16:00:03 +0800</pubDate>
    <dcterms:modified>2008-06-10T16:00:03+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[微软的发展史（3）]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/70265665200851035912972</link>
    <description><![CDATA[<div><P>成都游戏学院 <A href="http://www.cdgamecollege.org"><FONT color=#556c88>http://www.cdgamecollege.org</FONT></A></P>
<P>　　全球销售、市场和服务组:由集团副总裁Orlando Ayala领导，集成了微软的销售和服务伙伴，以满足世界范围内微软用户的需要。这些用户包括:企业用户、中小型组织、教育机构、程序开发人员和个人用户。此外，本组包括微软产品支持服务、网络解决方案组、企业伙伴组、市场营销组织和微软全球三大地区的业务组织。</P>
<P>　　微软研究院(MSR):由资深副总裁Rick Rashid领导，负责对今天或明天的计算课题提出创造性的建议和解决方案，使计算机变得更加易于使用。同时负责为下一代的硬件产品设计软件，改进软件设计流程和研究计算机科学的数学基础。关于MSR更详细的信息可参见Microsoft Research Web page。</P>
<P>　　运营组:由总裁和首席运营官Rick Belluzzo领导，负责管理商业运作和全部的商业计划。包括公司的财政、行政管理、人力资源和信息技术部门。</P>
<P>　　微软公司(NASDAQ：MSFT, HKEx: 4338)是全球最大的电脑软件提供商，总部设在华盛顿州的雷德蒙市（Redmond，大西雅图的市郊）。公司于1975年由比尔·盖茨和保罗·艾伦成立。公司最初以“Micro-soft”的名称（意思为“微型软件”）发展和销售BASIC解释器。最初的总部是新墨西哥州的阿尔伯克基。史蒂夫·巴尔默（Steve Ballmer）是现在的首席执行官。</P>
<P>　　使得微软如此令人瞩目的原因有以下一些：</P>
<P>　　它是全球最大的电脑软件公司在经济学，它是一个惊人的网络外部性的例子它在操作系统和办公软件方面扮演着事实上的垄断者地位它使得它的创立者跻身于世界上最富有的人之列；特别是掌门人比尔·盖茨多年来位居世界首富任何公开买卖公司中，它有最大的公司市值多年来它官司不断，和业界其他公司的明争暗斗已经成为IT文化的一部分。</P>
<P>　　微软的产品微软生产的软件产品包括了很多的种类：</P>
<P>　　Windows -称为「视窗」的图形操作系统；它有很多版本。目前桌上版最新版本是Windows XP，服务器最新版本是Windows Server 2003。Windows几乎预装在所有的IBM兼容的个人电脑上。请参看Microsoft Windows的历史获取更多详细资料。</P>
<P>　　MS-DOS -微软公司的早期产品，它是一个命令行界面。早期的Windows版本要在MS-DOS下运行，但是到了Windows NT以及以后的产品已经可以脱离MS-DOS运行了，但基于用户因软硬件在Windows NT不能正常运作，微软同时间继续推出Windows 95, Windows 98, Windows Me在MS-DOS下运行的过渡产品。</P>
<P>　　Microsoft Office -它是微软公司的办公软件套件，根据版本不同可能包括Word（文字处理）、Excel（试算表）、Access（桌面数据库）、PowerPoint（幻灯片制作）、Outlook（个人邮件和日程管理）、Project（项目管理）和Publisher（电子排版）等软件。微软也为Apple Macintosh生产使用于苹果电脑的版本。<BR></P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/70265665200851035912972</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/70265665200851035912972</guid>
    <pubDate>Tue, 10 Jun 2008 15:59:12 +0800</pubDate>
    <dcterms:modified>2008-06-10T15:59:12+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[微软发展史（2）]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/70265665200853113049998</link>
    <description><![CDATA[<div><P>成都游戏学院 <A href="http://www.cdgamecollege.org">http://www.cdgamecollege.org</A></P>
<P>　　微软的拳头产品Windows98/NT/2000/Me/XP/Server2003成功地占有了从PC机到商用工作站甚至服务器的广阔市场，为微软公司带来了丰厚的利润：公司在Internet软件方面也是后来居上，抢占了大量的市场份额。在IT软件行业流传着这样一句告戒：“永远不要去做微软想做的事情”。可见，微软的巨大潜力已经渗透到了软件界的方方面面，简直是无孔不入，而且是所向披靡。微软的巨大影响已经对软件同行构成了极大的压力，也把自己推上了反垄断法的被告位置。连多年来可靠的合作伙伴Intel也与之反目，对薄公堂。2001年9月，鉴于经济低迷，美国政府有意重振美国信息产业，拒绝拆分微软。至此，诉微软反垄断法案告一段落。</P>
<P>　　微软的组织结构支持公司包括以下核心业务组:个人服务组(PSG):由集团副总裁Bob Muglia领导,致力于为个人用户和商业用户提供更容易的在线连接，并且为各种各样的设备提供软件服务。PSG包含了微软的个人.NET倡议、服务平台部、移动组、MSN的互联网访问服务、用户设备组以及用户界面平台部。</P>
<P>　　MSN和个人服务业务组:由副总裁Yusuf Mehdi领导，负责网络程序开发、业务发展以及MSN和微软其它服务世界范围内的市场和销售，包括:MSN eShop, MSN Carpoint, MSN HomeAdvisor, the MSNBC venture, Slate和MSNTV平台组，由集团副总裁Jim Allchin领导，负责在各个方面不断对Windows平台做出改进–例如把存储、通讯、消息通知、共享图象及听音乐等变为Windows经历的自然扩展。此外，本组包括.NET企业服务器组、开发工具部和Windows数字媒体部。</P>
<P>&nbsp;</P>
<P>　　办公和商务服务组:由集团副总裁Jeff Raikes领导，负责开发提高生产力和商业流程的应用和服务。工作包括将功能完善且性能强大的Microsoft Office逐步演化为以服务于基础的产品。除Office部门之外，商用工具部门，包括bCentral和Great Plains的商用应用程序部门都将属于该部门。<BR></P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/70265665200853113049998</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/70265665200853113049998</guid>
    <pubDate>Tue, 3 Jun 2008 11:30:49 +0800</pubDate>
    <dcterms:modified>2008-06-03T11:30:49+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[微软发展史（1）]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/7026566520085311305824</link>
    <description><![CDATA[<div><P>成都游戏学院 <A href="http://www.cdgamecollege.org">http://www.cdgamecollege.org</A></P>
<P>微软公司的发展史2007-04-09 21:32微软公司是世界PC机软件开发的先导，比尔·盖茨是它的核心。微软公司1981年为IBM-PC机开发的操作系统软件MS-DOS曾用在数以亿计的IBM-PC机及其兼容机上。但随着微软公司的日益壮大，Microsoft与IBM已在许多方面成为竞争对手。1991年，IBM公司和苹果公司解除了与微软公司的合作关系，但IBM与微软的合作关系从未间断过，两个公司保持着既竞争又合作的复杂关系。微软公司的产品包括文件系统软件（MS-DOS和Xenix）、操作环境软件（窗口系统Windows系列）、应用软件MS-Office等、多媒体及计算机游戏、有关计算机的书籍以及CDROM产品。1992年，公司买进Fox公司，迈进了数据库软件市场。 <BR>　　1975年，19岁的比尔·盖茨从哈佛大学退学，和他的高中校友保罗·艾伦一起卖BASIC语言程序编写本。当盖茨还在哈佛大学读书时，他们曾为MITS公司的Altair编制语言。后来，盖茨和艾伦搬到阿尔伯克基，并在当地一家旅馆房间里创建了微软公司。1979年，MITS公司关闭，微软公司以修改BASIC程序为主要业务继续发展。</P>
<P>&nbsp;</P>
<P>　　1977年，微软公司搬到西雅图的贝尔维尤(雷德蒙德)，在那里开发PC机编程软件。1980年，IBM公司选中微软公司为其新PC机编写关键的操作系统软件，这是公司发展中的一个重大转折点。由于时间紧迫，程序复杂，微软公司以5万美元的价格从西雅图的一位程序编制者帕特森手中买下了一个操作系统的使用权，再把它改写为磁盘操作系统软件（MS-DOS）。公司目前在60多个国家设有分支办公室，全世界雇员人数接近44,000人。</P>
<P>　　IBM-PC机的普及使MS-DOS取得了巨大的成功，因为其他PC制造者都希望与IBM兼容。MS-DOS在很多家公司被特许使用，因此80年代，它成了PC机的标准操作系统。到1984年，微软公司的销售额超过1亿美元。随后，微软公司继续为IBM、苹果公司以及无线电器材公司的计算机开发软件，但在91年后，由于利益的冲突，IBM、苹果公司已经与Microsoft反目。1983年，保罗·艾伦患霍奇金氏病离开微软公司，后来成立了自己的公司。艾伦拥有微软公司15%的股份，至今仍列席董事会。1986年，公司转为公营。盖茨保留公司45%的股权，这使其成为1987年PC产业中的第一位亿万富翁。1996年，他的个人资产总值已超过180亿美元。1997年，则达到了340亿美元，98年超过了500亿大关，成为理所当然的全球首富。<BR></P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/7026566520085311305824</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/7026566520085311305824</guid>
    <pubDate>Tue, 3 Jun 2008 11:30:05 +0800</pubDate>
    <dcterms:modified>2008-06-03T11:30:05+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[用3D技术实现2D场景]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/70265665200843054240422</link>
    <description><![CDATA[<div><P style="TEXT-INDENT: 2em">成都游戏学院 <A href="http://www.cdgamecollege.org">http://www.cdgamecollege.org</A> 
</P><P style="TEXT-INDENT: 2em">一、超大场景平滑切换的实现方法（3D/2D场景都适用）<BR>二、非多重混合纹理实现地表(既用图素方法够成)<BR>三、碰撞检测<BR>四、室内外场景结合 
</P><P></P>
<P><BR>整个场景由64*64=4096个区域构成，每个区域管理4*4=16个屏幕大小场景，合计65535个屏幕场景。理论上可以更加大，目前的这样的场景数据约占用300M的磁盘空间(Zlib标准压缩后约12M空间)。不用多线程场景切换约为&lt;1秒。多线程时候，采用中等优先级别的线程就可以做到平滑切换了。</P>
<P>Class&nbsp;QuadTree{<BR>&nbsp;&nbsp;&nbsp;&nbsp;//用以剪裁判断,哪些区域的块需要渲染<BR>};</P>
<P>Class&nbsp;区域的块&nbsp;：public&nbsp;QuadTree{<BR>&nbsp;&nbsp;&nbsp;&nbsp;*m_p区域;//隶属于哪个区域<BR>&nbsp;&nbsp;&nbsp;&nbsp;int32&nbsp;*m_pDoodadsIndex;//哪些场景物件在这个区域的块中(索引)<BR>};</P>
<P>Class&nbsp;区域{<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;m_nX,&nbsp;m_nY;//该区域的x,y<BR>&nbsp;&nbsp;&nbsp;&nbsp;uint8*&nbsp;m_pPath;//路径障碍关系<BR>&nbsp;&nbsp;&nbsp;&nbsp;uint8*&nbsp;m_pGroundFlag;//贴图图素位置信息<BR>&nbsp;&nbsp;&nbsp;&nbsp;场景物件*&nbsp;m_pDoodads;<BR>&nbsp;&nbsp;&nbsp;&nbsp;区域块[4][4];<BR>&nbsp;&nbsp;&nbsp;&nbsp;QuadTree&nbsp;m_QuadTree;<BR>&nbsp;&nbsp;&nbsp;&nbsp;LoadData(){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--[[<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据m_nX,&nbsp;m_nY&nbsp;,从磁盘装载该区域的数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]<BR>&nbsp;&nbsp;&nbsp;&nbsp;};<BR>&nbsp;&nbsp;&nbsp;&nbsp;SetUpQuadTree(){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将装载好的数据分成区域块，放到QuadTree的中，每个区域块都是QuadTree的一个叶子<BR>&nbsp;&nbsp;&nbsp;&nbsp;};<BR>};</P>
<P>Class世界{<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;m_nX,m_nY;//管理区域的中心，即屏幕中心的块的x,y<BR>&nbsp;&nbsp;&nbsp;&nbsp;区域装载的缓冲[16];<BR>&nbsp;&nbsp;&nbsp;&nbsp;区域指针[3][3];<BR>&nbsp;&nbsp;&nbsp;&nbsp;Enter(x,y);//进入某个区域<BR>};</P>
<P>上面的结构应该不是很难理解，&nbsp;QuadTree部分只是剪裁渲染部分使用的，完全可以跳过。<BR>以下旨在介绍&nbsp;区域装载缓冲&nbsp;的运用</P>
<P>*--*--*--*<BR>|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|<BR>*--*--*--*<BR>|&nbsp;&nbsp;&nbsp;&nbsp;|@|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<BR>*--*--*--*<BR>|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<BR>*--*--*--*</P>
<P>@是现在Enter(x,y)进入的区域，我们需要将其周围的那些块都装载到内存来，并进行设备初始化包括网格贴图模型。(注意装载不是说一定要对其进行渲染。是否渲染是由QuadTree或者其他剪裁方法来完成的)<BR>Enter(x,y)<BR>{<BR>&nbsp;&nbsp;m_nX&nbsp;=&nbsp;x;&nbsp;m_nY&nbsp;=&nbsp;y;<BR>&nbsp;&nbsp;For(int&nbsp;i=0;i&lt;3;i++)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For(int&nbsp;j=0;j&lt;3;j++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;区域指针[i][j]&nbsp;=&nbsp;_Load(x-1+i,y-1+j);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>}</P>
<P>Load(x,&nbsp;y)<BR>{<BR>&nbsp;&nbsp;//首先判断x,y是否合法(x,y&lt;0,x,y&gt;=64),如果不合法,return&nbsp;NULL.<BR>&nbsp;&nbsp;Int&nbsp;nNULL&nbsp;=&nbsp;16;//需要找一块没有使用或者不需要使用的缓冲区来装载该区域<BR>&nbsp;&nbsp;for(int&nbsp;i=0;&nbsp;i&lt;16;i++)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(区域缓冲[i]&nbsp;!=&nbsp;NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(区域缓冲[i].m_x&nbsp;==&nbsp;x&nbsp;&amp;&amp;&nbsp;区域缓冲[i].m_y&nbsp;==&nbsp;y)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//原来已经装载过这个区域了，返回就好<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//return&nbsp;区域缓冲[i];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&lt;&nbsp;nNULL)&nbsp;nNULL=i;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;if(nNULL&nbsp;==&nbsp;16)<BR>&nbsp;&nbsp;{//所有的缓冲都被使用了<BR>&nbsp;&nbsp;&nbsp;//用离本区域最远的一块缓冲将其来装载<BR>&nbsp;&nbsp;&nbsp;//最远意味着该区域短时间内用不上<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;m,&nbsp;n&nbsp;=&nbsp;0,&nbsp;k&nbsp;=&nbsp;0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i=0;&nbsp;i&lt;16;&nbsp;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;=&nbsp;abs(区域缓冲[i].m_nX-m_nX)&nbsp;+&nbsp;abs(区域缓冲[i].m_nY-m_nY);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(m&gt;n){n&nbsp;=&nbsp;m;k=i;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;//找到了,将这个最远的区域删除掉<BR>&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;区域缓冲[k];&nbsp;区域缓冲[k]=NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;nNULL&nbsp;=&nbsp;k;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;//好了。现在有空位缓冲装载这个区域了<BR>&nbsp;&nbsp;区域缓冲[nNULL]&nbsp;=&nbsp;new&nbsp;区域(x,&nbsp;y);<BR>&nbsp;&nbsp;{//用多线程装载<BR>&nbsp;&nbsp;&nbsp;&nbsp;LoadThreadManang(区域缓冲[nNULL]);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;{//不用多线程<BR>&nbsp;&nbsp;&nbsp;&nbsp;区域缓冲[nNULL].Load();//装载该区域的数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;区域缓冲[nNULL].InitDeviceObject();<BR>&nbsp;&nbsp;}<BR>}</P>
<P><BR></P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/70265665200843054240422</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/70265665200843054240422</guid>
    <pubDate>Fri, 30 May 2008 17:42:40 +0800</pubDate>
    <dcterms:modified>2008-05-30T17:42:40+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[在Windows下使用OpenGL 2.0的API（包括GLSL）]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/70265665200843054114946</link>
    <description><![CDATA[<div><P style="TEXT-INDENT: 2em">成都游戏学院 <A href="http://www.cdgamecollege.org">http://www.cdgamecollege.org</A> 
</P><P style="TEXT-INDENT: 2em">网上有许多人都在问一个类似的问题，那就是如何在Windows下使用OpenGL&nbsp;2.0的API以及OpenGL&nbsp;2.0中的新特性GLSL。 
</P><P></P>
<P>大家也许都知道，微软为了推广他自己的Direct3D标准，在其Windows操作系统下只提供了OpenGL&nbsp;1.1的API。而其就算是这个OpenGL&nbsp;1.1版本也是封装了Direct3D的接口实现的，可见OpenGL在Windows操作系统中已经名存实亡了。</P>
<P>~~~~~~~分割线：下面表达的是我个人的一点点愤慨，你可以直接跳过，而不用有所担心~~~~~~~&nbsp;</P>
<P>众所周知，OpenGL是一个跨平台的开放的标准，她代表的是自由和民主，任何人都可以来实现她，任何人都可以使用它。微软在Windows上对OpenGL的所作所为，是霸权主义的行为，是不得人心的！微软自称招募了世界上最聪明的人，他的野心是统治世界，他妄图为这个世界指定规则，一个永远只对他自己有利的规则。从MFC、C#等等被微软称为先进技术的技术其实都只是为了一件事，他要统治我们（程序员），他要把我们都变成傻瓜！试问，那些只通过拖拖拽拽、点点鼠标，连中学生都能轻易完成的工作有什么技术含量可言？没错，我们都变成了傻瓜，微软的人就永远是最聪明的了。</P>
<P>虽然我还远远不是一个黑客，但我和世界上所有的黑客一样，向往自由和平等。没错，这里不需要什么权威和专家，这里只需要狂热的爱好者，那种对技术、对力量、对真相的渴求永不泯灭！就像《黑客帝国》中展现的那样，我不想被谁控制，我要自由，并依靠自己的力量来找出真相。</P>
<P>以上，虽然有点跑题，但是说道微软我就满腹愤慨，有些人可能会站出来为微软辩解，但是微软的“暴行”还远不止这些，在这里就不一一说了。&nbsp;</P>
<P>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&nbsp;</P>
<P>我可以很负责任的告诉你。在Windows下没有像DirectX那样的OpenGL&nbsp;SDK。那么如何在Windows上使用OpenGL&nbsp;2.0的API以及GLSL呢？答案是丰富多彩的。你可以通过OpenGL扩展来对OpenGL进行“升级”。但是本文将介绍的方法是，使用一个开源的OpenGL实现——Mesa3D。网上的许多帖子都说Mesa3D是Linux下的OpenGL实现，其实Mesa3D也可以在Windows下面使用（多亏了C语言的机器无关性）。从Mesa3D&nbsp;7.0版本开始，这个开源的OpenGL实现开始支持OpenGL&nbsp;2.0标准了。下面将介绍，如何在Windows下配置Mesa3D。</P>
<P>首先，你要到www.mesa3d.org下载源程序包，一般要用到两个包mesaLib.zip和mesaGLUT.zip。值得一题的是，和许多开源项目一样，Mesa3D也只是提供了源代码，并没有提供直接可用的二进制文件，使用者需要重新编译源代码来的到可以使用的二进制文件。下载完成之后，把两个包放在同一个目录下面，直接选择“解压到当前目录...”来解压两个包，默认情况下，两个包被解压到了同一个文件夹下面（比如，Mesa-7.0.3）。然后，按照“\Mesa-7.0.3\windows\VC8”路径找到Visual&nbsp;Studio&nbsp;2005的解决方案文件（mesa.sln）。打开它，发现这个解决方案中有好多工程（一般是4个，gdi、glu、mesa、osmesa），什么设置也不用修改（默认是Debug目标，而不是Release，千万不要修改），直接分别在右边的“解决方案资源管理器”中右键单击各个工程项，选择“生成”。等待所有的工程都生成成功之后你可以从“\Mesa-7.0.3\lib”这个路径下面得到3个DLL文件（opengl32.dll、glu32.dll、osmesa32.dll）和对应的库文件（*.lib）。同样在“\Mesa-7.0.3\windows\VC8\progs\glut”路径下面，你可找到GLUT的工程文件（glut.vcproj），依照同样的方法，生成GLUT工程。之后可以在“\Mesa-7.0.3\lib”这个路径下找到glut32.dll以及相应的库文件。</P>
<P>好了OpenGL&nbsp;2.0的DLL和相应的库文件就全都得到了。编程的时候所需的所有头文件可以在“Mesa-7.0.3\include”这个路径下找到（或者你干脆就把这个目录设置成Visual&nbsp;Studio的include搜索目录）。</P>
<P>这里需要注意一点，由于编程时要对gl.h、glu.h等头文件进行#include进行引用，这些头文件会和Visual&nbsp;Studio中自带的gl.h、glu.h等头文件冲突，所以最好删除Visual&nbsp;Studio中的相应文件（建议对这些文件备份）；同理，Visual&nbsp;Studio中的opengl32.lib文件也要删掉（建议备份）。</P>
<P>好了，就讲到这里，好好享用吧！</P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/70265665200843054114946</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/70265665200843054114946</guid>
    <pubDate>Fri, 30 May 2008 17:41:14 +0800</pubDate>
    <dcterms:modified>2008-05-30T17:41:14+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[从网游经济来看网络游戏的生命周期]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/70265665200842110545530</link>
    <description><![CDATA[<div><P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">成都游戏学院 <A href="http://www.cdgamecollege.org">http://www.cdgamecollege.org</A> 
</P><P style="TEXT-INDENT: 2em">研究对象:　MMORPG类型的游戏
</P><P style="TEXT-INDENT: 2em">第一阶段: 自给自足</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; 服务器刚刚开启, 游戏玩家蜂拥而至, 这时货币产出虽然很小, 但是玩家们都忙着升级, 并且设计者为了吸引更多的人来尝试游戏, 这个阶段会给玩家发送一些基础装备,药物之类的道具.此时玩家间的贸易需求较小, 尚处于自给自足的这么一个阶段.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">第二阶段: 小商品经济</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; 服务器已经运行一段时间, 货币已经产出不少, 这个时候玩家开始进行自己的生产, 满足了自己的需求后, 会出现部分剩余产品(打怪或者自己制造获得), 这些产品开始流向市场, 小商品经济开始发展起来. 这个时期是从通货紧缩到通货膨胀开始过渡. 这个时期是网络游戏的第一个稳定发展的时期, 最大可能的延长这个时期所停留的时间就成为一个游戏能否发展起来并且盈利的关键. </P>
<P style="TEXT-INDENT: 2em">这个时候:</P>
<P style="TEXT-INDENT: 2em">1.&nbsp;&nbsp;&nbsp; 玩家的需求开始激增, 但是货币供给, 物品产出相对不足.</P>
<P style="TEXT-INDENT: 2em">2.&nbsp;&nbsp;&nbsp; 处于一个通货紧缩的状态.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">然而:</P>
<P style="TEXT-INDENT: 2em">1. 随着玩家等级和装备的提升, 游戏币产生的速度在不断增加.</P>
<P style="TEXT-INDENT: 2em">2. 随着游戏的运行, 玩家对市场上已有装备的需求越来越小.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">一般的解决方法是: </P>
<P style="TEXT-INDENT: 2em">1. 加大游戏币的消耗出口.</P>
<P style="TEXT-INDENT: 2em">2. 拉大”内需”.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">第三阶段: 市场经济</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; 市场经济不同于传统自给自足式的经济，它不是面向家庭需求，局限于家庭</P>
<P style="TEXT-INDENT: 2em">资源，满足于自给自足；而是面向市场需求，利用市场资源，在广阔的时空范围内组织生产营销。</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">@1通常提到的游戏里的”JS”, 其实是属于真正了解市场经济的人.</P>
<P style="TEXT-INDENT: 2em">@2有人提到打钱公司, 我更倾向于把他们定义为辛勤劳作的玩家.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">这个阶段玩家等级提升已经比较缓慢, 或者短期内不能提升了, 也有了一定的装备基础, 这个阶段:</P>
<P style="TEXT-INDENT: 2em">1.玩家打钱效率会较上面有明显提高, 货币产出量会增加.</P>
<P style="TEXT-INDENT: 2em">2.玩家对极品装备的需求, 逐渐增大.</P>
<P style="TEXT-INDENT: 2em">3.系统的消耗出口也容易出现问题, 导致通过膨胀, 游戏生命周期过早结束.</P>
<P style="TEXT-INDENT: 2em">关于货币消耗方法的原则与建议:</P>
<P style="TEXT-INDENT: 2em">因为在现有游戏模式下, 货币的产出从某种意义上说, 不是游戏运营商所能完全控制的, 而一定程度上决定于玩家在游戏里面的辛勤程度. </P>
<P style="TEXT-INDENT: 2em">1. 要提供稳定持久的消耗出口, 因为玩家创造金钱的能力是不断增加的.</P>
<P style="TEXT-INDENT: 2em">2. 按等级分阶段的来考虑持续的消耗出口.</P>
<P style="TEXT-INDENT: 2em">3. 拉大内需的, 玩家有足够的需求, 才不会出现过渡的通货膨胀.</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp; 注:这里说的需求, 不同于玩家的追求, 是种大众化的日常的消费需要.</P>
<P style="TEXT-INDENT: 2em">4.规划一定的日常消耗量, 可能会让经济显得更容易控制.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">原则1. 经济要做的是控制,而不是限制. 如果为了控制而去限制产出, 显然不是最好的方法.</P>
<P style="TEXT-INDENT: 2em">原则 2. 通货膨胀都是在产出和需求,消耗间的不平衡导致的.</P>
<P style="TEXT-INDENT: 2em">原则3. 消耗的金字塔型是一个比较健康的模型. 底层是基础的稳定的量比较大的消耗出口, 随着金字塔的提高, 一些不是很稳定的偏波动的消耗出口逐渐产生.</P>
<P style="TEXT-INDENT: 2em">原则 4. 每个发展阶段金字塔的内容可能也不一样.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 图1</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">结合游戏讨论</P>
<P style="TEXT-INDENT: 2em">昨天我玩一个新幻师号到20级,任务和打怪并行:</P>
<P style="TEXT-INDENT: 2em">1.经验不是问题, 经验主要来源是任务.&nbsp;&nbsp; &nbsp;-1:经验主要用作升级和学技能</P>
<P style="TEXT-INDENT: 2em">2.装备基本上够用,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;-2:</P>
<P style="TEXT-INDENT: 2em">3.任务发的钱, 是主要收入．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -3:钱主要消耗于学技能</P>
<P style="TEXT-INDENT: 2em">4.尚未出现打怪时候战斗状态不对的情况. </P>
<P style="TEXT-INDENT: 2em">5.修炼生命满, 还没修炼法力;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -5:也是主要消耗经验和金钱的地方.</P>
<P style="TEXT-INDENT: 2em">花费时间约2小时. </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">剩余金钱6.5W 纯打怪任务, 吕不韦任务是主要的来源</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">这个阶段对武器防具, 还没有十分明显的需求, 药物也不用吃(注意:我是幻师), 基本没有什么贸易需求.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">程序在里面应该起到的作用:</P>
<P style="TEXT-INDENT: 2em">1.提供数据, 让我们知道游戏经济的现状, 预测发展趋势.</P>
<P style="TEXT-INDENT: 2em">2.提供详细数据, 让我们知道玩家在游戏里是什么样一个状态. 预测下一步的情况.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">讨论:</P>
<P style="TEXT-INDENT: 2em">1. 分析点卡收费和IB模式的影响.</P>
<P style="TEXT-INDENT: 2em">2. 简单拿魔兽做一个例子, 分析一下.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">节目预告:</P>
<P style="TEXT-INDENT: 2em">3.&nbsp;&nbsp;&nbsp; 结合CQ的经济系统做一个分析(待续)</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">春秋币 流入流出途径:</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">***一 春秋币产出与回收平衡***</P>
<P style="TEXT-INDENT: 2em">1.春秋币的总产出 总回收的记录.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">***二 系统产出选项***</P>
<P style="TEXT-INDENT: 2em">1.物品卖Npc</P>
<P style="TEXT-INDENT: 2em">2.任务奖励</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">***三 系统回收选项***</P>
<P style="TEXT-INDENT: 2em">1.Npc处购买</P>
<P style="TEXT-INDENT: 2em">2.战斗技能学习</P>
<P style="TEXT-INDENT: 2em">3.生活技能学习</P>
<P style="TEXT-INDENT: 2em">4.修炼</P>
<P style="TEXT-INDENT: 2em">5.生活技能合成</P>
<P style="TEXT-INDENT: 2em">6.摆摊抽税</P>
<P style="TEXT-INDENT: 2em">7.建立家族</P>
<P style="TEXT-INDENT: 2em">8.定制变异</P>
<P style="TEXT-INDENT: 2em">9.任务支付(CS任务)</P>
<P style="TEXT-INDENT: 2em">10.Npc处购买生活工具</P>
<P style="TEXT-INDENT: 2em">11.洗天赋</P>
<P style="TEXT-INDENT: 2em">12.洗PK值</P>
<P style="TEXT-INDENT: 2em">13.传送站扣钱</P>
<P style="TEXT-INDENT: 2em">14.家族雇工</P>
<P style="TEXT-INDENT: 2em">15.通天商铺</P>
<P style="TEXT-INDENT: 2em">16.春秋币兑换虚拟金币</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/70265665200842110545530</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/70265665200842110545530</guid>
    <pubDate>Wed, 21 May 2008 10:54:05 +0800</pubDate>
    <dcterms:modified>2008-05-21T10:54:47+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[使用DirectSound播放WAV文件]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/70265665200842110472349</link>
    <description><![CDATA[<div><P style="TEXT-INDENT: 2em">成都游戏学院 <A href="http://www.cdgamecollege.org">http://www.cdgamecollege.org</A> 
</P><P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wav files: wav 是一种未经压缩的数字音频，CD音质，但体积非常庞大。</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Midi files: midi 文件并没有保存音频记录，它实际上更像是一套演奏指令，所以，它的体积非常小。它的音质完全取决于演奏设备(如声卡)。</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mp3 files: 同wav文件一样，mp3也是一种数字音频格式，不同的是，mp3是经过压缩的，而且是有损压缩，这意味着它的体积将大大的减小，而音质上交会有一些失真(接近CD音质，基本听不出失真)。而且，mp3是一种媒体流，这意味着它在播放时不会将整个文件读入，取而代之的是分期的部分读入。</P>
<P style="TEXT-INDENT: 2em">使用DirectSound播放WAV文件</P>
<P style="TEXT-INDENT: 2em">WAV文件的结构
<TABLE cellSpacing=0 cellPadding=0 width=455 border=0>
<TBODY>
<TR>
<TD vAlign=top width=154>
<P></P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字&nbsp;&nbsp; 节&nbsp;&nbsp; 数</P></TD>
<TD vAlign=top width=301>
<P></P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说&nbsp;&nbsp; 明</P></TD></TR>
<TR>
<TD vAlign=top width=154>
<P></P>
<P style="TEXT-INDENT: 2em">4</P></TD>
<TD vAlign=top width=301>
<P></P>
<P style="TEXT-INDENT: 2em">RIFF标志</P></TD></TR>
<TR>
<TD vAlign=top width=154>
<P></P>
<P style="TEXT-INDENT: 2em">4</P></TD>
<TD vAlign=top width=301>
<P></P>
<P style="TEXT-INDENT: 2em">文件长度</P></TD></TR>
<TR>
<TD vAlign=top width=154>
<P></P>
<P style="TEXT-INDENT: 2em">4</P></TD>
<TD vAlign=top width=301>
<P></P>
<P style="TEXT-INDENT: 2em">WAVE 标志</P></TD></TR>
<TR>
<TD vAlign=top width=154>
<P></P>
<P style="TEXT-INDENT: 2em">4</P></TD>
<TD vAlign=top width=301>
<P></P>
<P style="TEXT-INDENT: 2em">fmt 标志</P></TD></TR>
<TR>
<TD vAlign=top width=154>
<P></P>
<P style="TEXT-INDENT: 2em">4</P></TD>
<TD vAlign=top width=301>
<P></P>
<P style="TEXT-INDENT: 2em">PCMWAVEFORMAT结构大小</P></TD></TR>
<TR>
<TD vAlign=top width=154>
<P></P>
<P style="TEXT-INDENT: 2em">16</P></TD>
<TD vAlign=top width=301>
<P></P>
<P style="TEXT-INDENT: 2em">PCMWAVEFORMAT结构</P></TD></TR>
<TR>
<TD vAlign=top width=154>
<P></P>
<P style="TEXT-INDENT: 2em">4</P></TD>
<TD vAlign=top width=301>
<P></P>
<P style="TEXT-INDENT: 2em">数据</P></TD></TR>
<TR>
<TD vAlign=top width=154>
<P></P>
<P style="TEXT-INDENT: 2em">4</P></TD>
<TD vAlign=top width=301>
<P></P>
<P style="TEXT-INDENT: 2em">声音数据大小</P></TD></TR>
<TR>
<TD vAlign=top width=154>
<P></P>
<P style="TEXT-INDENT: 2em">－－</P></TD>
<TD vAlign=top width=301>
<P></P>
<P style="TEXT-INDENT: 2em">声音数据</P></TD></TR></TBODY></TABLE></P>
<P style="TEXT-INDENT: 2em">使用DirectSound播放WAV文件</P>
<P style="TEXT-INDENT: 2em">v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RIFF标志：&nbsp; 在Windows环境下，大部分的多媒体文件都依循着一种结构来存放信息，这种结构称为"资源互换文件格式"(Resources lnterchange File Format)，简称RIFF。例如声音的WAV文件、视频的AVI文件等等均是由此结构衍生出来的。RIFF可以看做是一种树状结构，其基本构成单位为chunk，犹如树状结构中的节点，每个chunk由"辨别码"、"数据大小"及"数据"所组成。</P>
<P style="TEXT-INDENT: 2em">使用DirectSound播放WAV文件</P>
<P style="TEXT-INDENT: 2em">v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PCMWAVEFORMAT 数据结构：</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef struct pcmwaveformat_tag</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WAVEFORMAT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wf;</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wBitsPerSample;</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }PCMWAVEFORMAT;</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef&nbsp; struct waveformat_tag</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wFormatTag;</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wChannels;</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nSamplesPerSec;</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nAvgBytesPerSec;</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nBlockAlign;</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }WAVEFORMAT;</P>
<P style="TEXT-INDENT: 2em">v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wFormatTag: 格式类型为：WAVE_FORMAT_PCM、WAVE_FORMAT_ADPCM。Windows目前仅提供 WAVE_FORMAT_PCM格式，它表示：脉派编码调变(Pulse Code Modulation)</P>
<P style="TEXT-INDENT: 2em">v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nAvgBytesPerSec:&nbsp; 平均每秒传输的数据量 ，&nbsp;&nbsp; 其值=采样率*数据块大小。</P>
<P style="TEXT-INDENT: 2em">v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nBlockAlign: 数据块的大小，其值=样本位数/8*声道 数。</P>
<P style="TEXT-INDENT: 2em">v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WAV文件有三要素：采样率、声道数、样本位数</P>
<P style="TEXT-INDENT: 2em">v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用DirectSound播放WAV文件有5个步骤：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ①创建DirectSound对象</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp; ②设置DirectSound的协作等级</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp; ③创建次级缓冲区</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp; ④载入WAV文件数据</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp; ⑤播放WAV文件</P>
<P style="TEXT-INDENT: 2em">设置DirectSound的协作等级: 它有4个等级标志分别是：&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; ①DSSCL_NORMAL: 与其他应用程序的最佳工作方式 ，不能改变主缓冲区声音格式。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ②DSSCL_PRIORITY:允许改变主缓冲区声音格式，使用时可能会改变其他应用程序的输出格式。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ③DSSCL_EXCLUSIVE: 允许独占声音设备，使所有后台应用程序都不发声(即：对所有程序静音)。&nbsp;&nbsp;&nbsp;&nbsp; ④DSSCL_WRITEPRIMARY: 允许直接存取主缓冲区。需要DirectSound驱动程序，不能播放次级缓冲区声音数据，使其他应用程序将丢失它们的声音数据。</P>
<P style="TEXT-INDENT: 2em">v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建次级缓冲区: 次级缓冲区用来存放声音数据，主缓冲区只有一个，而次级缓冲区可以有多个。把多个完整的声音数据载入不同的次级缓冲区，然后通过次级缓冲区发送这些数据到主缓冲区混音播放。这样就实现了多个声音的播放。</P>
<P style="TEXT-INDENT: 2em">v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 次级缓冲区的分类：静态缓冲区、流式缓冲区。静态和流式缓冲区的标志，是通过对DSBUFFERDESC结构中的dwFlags成员的设置来决定的。比如：DSBUCAPS_STATIC表示静态缓冲区。若要使后台应用程序发声就必须在设置协作等级时不能使用：DSSCL_NORMAL标志同时dwFlags成员值中必须有DSBCAPS_STICKYFOCUS</P>
<P style="TEXT-INDENT: 2em">v&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; ①设置音量:DSBVOLUME_MIN、DBVOLUME_MAX</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其范围值：-10 000 ~ 0 </P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; ②设置声音频率: DSBFREQUENCY_MIN DSBFREQUENCY_ORIGINAL 、DSBFREQUENCY_MAX</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其范围值：100~0~100 000</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; ③设置声音均衡性: DSBPAN_LEFT、&nbsp; DSBPAN_CENTER、DSBPAN_RIGHT&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; 其范围值：-10 000 ~ 0 ~ 10 000</P>
<P style="TEXT-INDENT: 2em">&nbsp;
</P><P style="TEXT-INDENT: 2em">&nbsp;</P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/70265665200842110472349</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/70265665200842110472349</guid>
    <pubDate>Wed, 21 May 2008 10:47:23 +0800</pubDate>
    <dcterms:modified>2008-05-21T10:47:23+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[成都游戏学院放假(上课时间等候通知)]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/70265665200841354053182</link>
    <description><![CDATA[<div>成都游戏学院放假(上课时间等候通知)请大家注意安全.放假期间不到学校来,具体上课时间暂时还没有定</div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/70265665200841354053182</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/70265665200841354053182</guid>
    <pubDate>Tue, 13 May 2008 17:40:53 +0800</pubDate>
    <dcterms:modified>2008-05-13T17:40:53+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[字节对齐带来的影响]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/702656652008479562731</link>
    <description><![CDATA[<div><P>成都游戏学院 <A href="http://www.cdgamecollege.org">http://www.cdgamecollege.org</A> </P>
<P>什么是字节对齐?<BR>现代计算机中内存空间都是按照byte划分的，从理论上讲似乎对任何类型的变量的访问可以从任何地址开始，但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问，这就需要各种类型数据按照一定的规则在空间上排列，而不是顺序的一个接一个的排放，这就是对齐。<BR>对齐原则<BR>1.数据类型自身的对齐值：<BR>&nbsp;对于char型数据，其自身对齐值为1，对于short型为2，对于int,float,double类型，其自身对齐值为4，单位字节。<BR>2.结构体或者类的自身对齐值：<BR>&nbsp;其成员中自身对齐值最大的那个值。<BR>3.指定对齐值：<BR>&nbsp;#pragma pack (value)时的指定对齐值value。<BR>4.数据成员、结构体和类的有效对齐值：<BR>&nbsp;自身对齐值和指定对齐值中小的那个值。<BR>为什么要对齐？<BR>一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些平台每次读都是从偶地址开始，如果一个int型（假设为32位系统）如果存放在偶地址开始的地方，那么一个读周期就可以读出这32bit，而如果存放在奇地址开始的地方，就需要2个读周期，并对两次读出的结果的高低字节进行拼凑才能得到该32bit数据。显然在读取效率上下降很多。<BR>例子<BR>#pragma pack(push, 8)<BR>struct s1<BR>{<BR>&nbsp;short a;<BR>&nbsp;&nbsp;long b;<BR>};</P>
<P>struct s2<BR>{<BR>&nbsp;char c;<BR>&nbsp;s1 d;<BR>&nbsp;double e;<BR>};<BR>#pragma pack(pop)<BR>int main()<BR>{<BR>&nbsp;s2 a;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; sizeof(a) &lt;&lt; endl;<BR>&nbsp;cout &lt;&lt; &amp;(a)&nbsp;&nbsp; &lt;&lt; endl;<BR>&nbsp;cout &lt;&lt; &amp;(a.d.a) &lt;&lt; endl;<BR>&nbsp;cout &lt;&lt; &amp;(a.d.b) &lt;&lt; endl;<BR>&nbsp;cout &lt;&lt; &amp;(a.e)&nbsp;&nbsp; &lt;&lt; endl;<BR>&nbsp;return 0;<BR>}<BR>WIN32+VC6结果<BR>24<BR>0013FF68&nbsp;s2结构体首地址 s2.c char<BR>0013FF6C&nbsp;s1.a short<BR>0013FF70&nbsp;s1.b long<BR>0013FF78&nbsp;s2.e double<BR>LINUX+GCC结果<BR>20<BR>0xbffc4fb0&nbsp; s2结构体首地址 s2.c char<BR>0xbffc4fb4&nbsp; s1.a short<BR>0xbffc4fb8&nbsp; s1.b long<BR>0xbffc4fbc&nbsp; s2.e double<BR>遭遇的问题<BR>#include &lt;winsock2.h&gt;<BR>#include &lt;windows.h&gt;<BR>当包含的顺序不同时，编译环境会受到影响，导致在同一平台下某些数据类型的大小产生不一致，如果在两个模块中单独使用是没有问题的，一旦交叉使用则会产生问题。<BR>原因<BR>当先包含winsock2.h时，在文件头部会有#include &lt;pshpack4.h&gt;，作用是设置字节对齐为4字节对齐的，同时也有#include &lt;poppack.h&gt;是恢复默认的字节对齐设置。由于在winsock2.h中包含了windows.h文件，所以会造成windows.h中的数据结构都是按照4字节来对齐的</P>
<P>&nbsp;</P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/702656652008479562731</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/702656652008479562731</guid>
    <pubDate>Wed, 7 May 2008 09:56:27 +0800</pubDate>
    <dcterms:modified>2008-05-07T09:56:27+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[64bit 优点]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/702656652008479514056</link>
    <description><![CDATA[<div><P><FONT size=4>成都游戏学院 </FONT><A href="http://www.cdgamecollege.org"><FONT size=4>http://www.cdgamecollege.org</FONT></A><FONT size=4> </FONT><BR>需要多于4GB的内存。64位处理器具有64位寻址能力，它可以寻址4GB×4GB个内存单元。 <BR>使用的文件大小常大于2GB。<BR>密集浮点运算，需要利用64位架构的优势。<BR>能从64位平台的优化数学库中受益。<BR>64位微处理器有更宽的字长，可以进行更大规模和更精确的数据处理。<BR>更多的通用寄存器。<BR>AMD x86-64处理器架构带来的好处就是，可以允许应用程序使用指令指针，来帮助计算函数和变量在共享库中的地址。 <BR>很多使用time_t数据类型的32位应用程序，都会碰到类似当年千年虫的问题，这是因为没有更多的位 <BR>缺点<BR>某些应用程序在64位处理器上运行，可能实际上会较在同等的32位处理器上慢，主要是因为64位地址在缓存中占用了更多的空间，反而降低了缓存命中率。 <BR>在64位平台上，因为内存开销的增加，所以程序进行指针跟踪可能会更慢 <BR>64位处理器对加密程序来说，并不会有太大的帮助 <BR>为了向下兼容，需要更大的客户端。平台的兼容性等会受到影响。<BR>64编程的充分条件<BR>必要的64硬件平台<BR>一个可支持64的操作系统.<BR>64位编译器<BR>C/C++ 基本数据类型之间的关系<BR>&nbsp;数据类型&nbsp;LP64&nbsp;ILP64&nbsp;LLP64&nbsp;ILP32&nbsp;LP32<BR>&nbsp;char&nbsp;8&nbsp;8&nbsp;8&nbsp;8&nbsp;8<BR>&nbsp;short&nbsp;16&nbsp;&nbsp;16&nbsp;16&nbsp;16&nbsp;16&nbsp;<BR>&nbsp;_int32&nbsp;N/A&nbsp;32&nbsp;N/A&nbsp;N/A&nbsp;N/A<BR>&nbsp;int&nbsp;32&nbsp;64&nbsp;32&nbsp;32&nbsp;16<BR>&nbsp;long&nbsp;64&nbsp;64&nbsp;32&nbsp;32&nbsp;32<BR>&nbsp;long&nbsp;long&nbsp;N/A&nbsp;N/A&nbsp;64&nbsp;N/A&nbsp;N/A<BR>&nbsp;pointer&nbsp;64&nbsp;64&nbsp;64&nbsp;32&nbsp;32<BR>Windows OS<BR>32位Windows采用的是ILP32数据模型.<BR>64位Windows采用的是LLP64数据模型.<BR>Windows上的32位程序设计和64位程序设计最大的不同就在于指针的长度不同由32位变成了64位<BR>Windows XP Professional x64 Edition和Windows Server 2003 x64 Edition允许运行32位及64位应用程序；</P>
<P>它们只有64位库。所有32位指令都通过被称为WOW64的x86仿真层传递，它负责把相应指令转换成对64位库的调用。 <BR>WoW64不能处理16位应用程序；这包括老的安装程序和所有的MS-DOS程序。<BR>64位操作系统上所有的驱动程序必须是64位的。 <BR>64位处理器不能加载32位DLL，反之亦然。开发人员在进行开发之前必须确保有第三方DLL的64为版本。&nbsp; <BR>一些旧一点的DirectX API函数已经被64位本地应用程序废置 <BR>部分文件夹名字发生了改变，某些情况下，应用程序应该使用SHGetFolderPath函数。对于一个运行于64位平台的32位应用程序，用CSIDL_PROGRAM_FILES作为参数，函数将返回“C:\Program Files(x86)”而不是“C:\Program Files”。 <BR>在64位平台上，内嵌的汇编代码不被支持，它们需要被替换。架构的变化改变了应用程序的瓶颈，用可读性更强的C/C++或内部函数不再是性能瓶颈，用它们可以取得与汇编代码相似的性能表现。最受推崇的做法是把所有的汇编代码改写成C或C++。内部函数可以被用来代替汇编代码，但是只应在全面的测试和分析已完成后使用。<BR>RDTSC指令可能无法如按预期地工作了。&nbsp;<BR>&nbsp;在64位模式中x87、MMX和3Dnow!指令集被废置了。这些指令集依然存在是为了先后兼容32位模式，但是为了避免在将来产生兼容问题，不鼓励在当前和将来的工程中使用它们。 <BR>固定精度的数据类型<BR>类型&nbsp;定义<BR>DWORD32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32&nbsp;位无符号整数<BR>DWORD64&nbsp;64&nbsp;位无符号整数<BR>INT32&nbsp;32&nbsp;位有符号整数<BR>INT64&nbsp;64&nbsp;位有符号整数<BR>LONG32&nbsp;32&nbsp;位有符号整数<BR>LONG64&nbsp;64&nbsp;位有符号整数<BR>UINT32&nbsp;无符号&nbsp;INT32<BR>UINT64&nbsp;无符号&nbsp;INT64<BR>ULONG32&nbsp;无符号&nbsp;LONG32<BR>ULONG64&nbsp;无符号&nbsp;LONG64<BR>Linux/ Unix OS<BR>现今所有64位的类Unix平台均使用LP64数据模型 <BR>可能出现的问题<BR>scanf("%d", &amp;mylong); <BR>#define INVALID_POINTER_VALUE&nbsp;&nbsp; 0xFFFFFFFF <BR>要在常量表达式中指定数据类型。尤其是Linux 系统<BR>当从32位到64位时，数据对齐方式也会有所改变。避免使用偏移量来获取结构体成员。</P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/702656652008479514056</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/702656652008479514056</guid>
    <pubDate>Wed, 7 May 2008 09:51:40 +0800</pubDate>
    <dcterms:modified>2008-05-07T09:51:40+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[API]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/7026566520084585833985</link>
    <description><![CDATA[<div><P style="TEXT-INDENT: 2em"><FONT size=2>成都游戏学院 </FONT><A href="http://www.cdgamecollege.org/"><FONT color=#556c88 size=2>http://www.cdgamecollege.org</FONT></A><FONT size=2>&nbsp;&nbsp;&nbsp;</FONT></P>
<P style="TEXT-INDENT: 2em">API(Application Programming Interface,应用程序编程接口)是一套用来控制Windows的各个部件(从桌面的外观到为一个新进程分配的内存)的外观和行为的一套预先定义的Windows函数.用户的每个动作都会引发一个或几个函数的运行以告诉Windows发生了什么. <BR><BR>这在某种程度上很象Windows的天然代码.其他的语言只是提供一种能自动而且更容易的访问API的方法.VB在这方面作了很多工作.它完全隐藏了API并且提供了在Windows环境下编程的一种完全不同的方法. <BR><BR>这也就是说,你用VB写出的每行代码都会被VB转换为API函数传递给Windows.例如,Form1.Print...VB 将会以一定的参数(你的代码中提供的,或是默认参数)调用TextOut 这个API函数. <BR><BR>同样,当你点击窗体上的一个按钮时,Windows会发送一个消息给窗体(这对于你来说是隐藏的),VB获取这个调用并经过分析后生成一个特定事件(Button_Click). <BR><BR>API函数包含在Windows系统目录下的动态连接库文件中(如User32.dll,GDI32.dll,Shell32.dll...). <BR><BR>API 声明<BR><BR>正如在"什么是API"中所说,API函数包含在位于系统目录下的DLL文件中.你可以自己输入API函数的声明,但VB提供了一种更简单的方法,即使用API Text Viewer. <BR><BR>要想在你的工程中声明API函数,只需运行API Text Viewer,打开Win32api.txt(或.MDB如果你已经把它转换成了数据库的话,这样可以加快速度.注:微软的这个文件有很多的不足,你可以试一下本站提供下载的api32.txt),选择"声明",找到所需函数,点击"添加(Add)"并"复制(Copy)",然后粘贴(Paste)到你的工程里.使用预定义的常量和类型也是同样的方法. <BR><BR>你将会遇到一些问题: <BR><BR>假设你想在你的窗体模块中声明一个函数.粘贴然后运行,VB会告诉你:编译错误...Declare 语句不允许作为类或对象模块中的 Public 成员...看起来很糟糕,其实你需要做的只是在声明前面添加一个Private(如 Private Declare Function...).--不要忘了,可是这将使该函数只在该窗体模块可用. <BR><BR>在有些情况下,你会得到"不明确的名称"这样的提示,这是因为函数.常量或其他的什么东西共用了一个名称.由于绝大多数的函数(也可能是全部,我没有验证过)都进行了别名化,亦即意味着你可以通过Alias子句使用其它的而不是他们原有的名称,你只需简单地改变一下函数名称而它仍然可以正常运行. <BR><BR>你可以通过查看VB的Declare语句帮助主题来获取有关Alias的详细说明.<BR><BR>消息(Messages)<BR><BR>好了,现在你已经知道什么是API函数了,但你也一定听说过消息(如果你还没有,你很快就会)并且想知道它是什么.消息是Windows告诉你的程序发生了哪些事件或要求执行特定操作的基本方法.例如,当用户点击一个按钮,移动鼠标,或是向文本框中键入文字时,一条消息就会被发送给你的窗体. <BR><BR>所有发送的消息都有四个参数--一个窗口句柄(hwnd),一个消息编号(msg)还有两个32位长度(Long)的参数. <BR><BR>hwnd即要接受消息的一个窗口的句柄,msg即消息的标识符(编号).该标识符是指引发消息的动作类型(如移动鼠标),另外两个参数是该消息的附加参数(例如当鼠标移动时光标的当前位置) <BR><BR>但是,当消息发送给你时你为什么看不到呢--就象有人在偷你的信一样?请先别恼火,让我告诉你. <BR><BR>小偷其实是Visual Basic.但它并没有偷走你的信,而是在阅读了之后挑出重要的以一种好的方式告诉你.这种方式就是你代码中的事件(Event). <BR><BR>这样,当用户在你的窗体上移动鼠标时,Windows会发送一条WM_MOUSEMOVE消息给你的窗口,VB得到这条消息以及它的参数并运行你在事件MouseMove中的代码,同时VB会把这条消息的第二个32位数(它包含了x,y坐标,单位为像素(Pixel),每个位16位)转换为两个单精度数,单位为缇(Twip). <BR><BR>现在,如果你需要光标坐标的像素表示,然而VB已经把它转换成了缇,因此你需要重新把它转换为以像素为单位.在这里,Windows给了你所需要的,但VB"好意地"进行了转换而使你不得不重新转换.你可能会问--我难道不能自己接收消息吗?答案是肯定的,你可以使用一种叫做子类处理(Subclass)的方法.但你除非必须否则最好不要使用,因为这与VB的安全程序设计有一点点的违背.(注:子类处理确实有很大的风险,但如果使用得当,是很有用处的.不过有一点一定要注意,即千万不要使用VB的断点调试功能,这可能会导致VB崩溃!) <BR><BR>需要补充说明的是:你可以发送消息给你自己的窗口或其他的窗口,只需调用SendMessage或PostMessage(SendMessage会使接受到消息的窗口立刻处理消息,而PostMessage是把消息发送到一个称为消息队列的队列中去,等候处理(它将会在该消息处理完后返回,例如有些延迟)).你必须制定接受消息的窗口的句柄,欲发送消息的编号(所有的消息的编号均为常量,你可以通过API Text Viewer查得)以及两个32位的参数。<BR><BR><B>另一种含义：</B><BR><BR>1：美国石油协会(API:American Petrolenm Institute)：<BR>API610/682是机械密封的设计和选用标准；<BR>API676 转子泵的标准；<BR><BR><BR>2：API还有一种含意：空气污染指数。【英文 air pollution index 的缩写】<BR><BR>3：在JAVA中，API除了有应用“程序程序接口”的意思外，还特指JAVA API的说明文档，也称为JAVA帮助文档。 <BR><BR>4.API Q1质量体系认证是您向用户证明您有一套API认可的完善的质量管理体系, 有些石油、天然气设备制造商所生产的产品目前没有所适用API会标产品的规范对应， 但他们又想向用户证明他们的产品或服务符合API标准的要求，所以API Q1质量体系认证可以帮您办到。API Q1质量体系认证特别适用于那些所生产的产品没有相应的API会标产品规范所对应的石油、天然气设备生产厂家， 或向石油、天然气行业提供服务的公司。<BR>5.原料药（Active Pharmaceutical Ingredients）： 指的是药物活性成分，也就是我们通常所说的原料药。<BR><BR><B>另一种含义：</B><BR><B></B><BR>&nbsp; &nbsp;&nbsp; &nbsp;使用API（应用编程接口，英文全称：Application Programming Interface）构建业务是实现开放式业务结构的关键技术，也是下一代网络区别于传统电信网的主要特点之一。目前，关于下一代网络的开放式业务API标准主要包括：由Parlay组织、3GPP和ETSI SPAN共同制定的Parlay/OSA API以及由SUN公司在Java平台上推出的JAIN API。<BR>&nbsp; &nbsp;&nbsp; &nbsp;Parlay API是由Parlay组织定义的便于业务开发者快速创建电信业务的应用编程接口，自1999年成立以来，Parlay组织已制定了4个版本的Parlay协议。开放式业务结构(OSA)是3GPP制定的多媒体业务框架，选定Parlay作为其开放式业务接口API。两者结合的Parlay/OSA API独立于具体的实现技术，可以应用于固定网络、移动网络以及下一代网络的业务提供；独立于具体的实现语言，可以用C、C++、Java等各种语言实现；定义了完善的认证和授权机制，以支持对第3方应用的支持。<BR>&nbsp; &nbsp;&nbsp; &nbsp;Parlay/OSA API位于由网络运营商管理的Parlay网关和由业务提供商管理的应用服务器之间。Parlay网关对应用服务器屏蔽了下层网络的技术实现细节，使得应用服务器可以使用统一的方式对网络能力进行访问。<BR>&nbsp; &nbsp;&nbsp; &nbsp;Parlay/OSA API包括两类接口：业务接口和框架接口。业务接口提供应用访问网络能力和信息的接口，框架接口提供业务接口安全、管理所必需的支持能力。业务接口保证用户能够接入传统网络，如呼叫控制、呼叫管理、发送消息、用户交互等；框架接口提供的功能有：业务登记、业务预订、业务发现、认证、授权和综合管理。<BR>&nbsp; &nbsp;&nbsp; &nbsp;JAIN API和Parlay/OSA API设计思想相近，功能上具有互补性。它采用专一的Java语言实现，并且定义了比较完备的访问各种网络的网络协议API。目前Parlay/JAIN联合工作组正在进行两者的融合工作。<BR></P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/7026566520084585833985</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/7026566520084585833985</guid>
    <pubDate>Mon, 5 May 2008 08:58:33 +0800</pubDate>
    <dcterms:modified>2008-05-05T08:58:33+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[MFC]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/702656652008458575394</link>
    <description><![CDATA[<div><P style="TEXT-INDENT: 2em"><FONT size=2>成都游戏学院 </FONT><A href="http://www.cdgamecollege.org/"><FONT color=#556c88 size=2>http://www.cdgamecollege.org</FONT></A><FONT size=4><FONT size=2>&nbsp;</FONT>&nbsp;&nbsp;</FONT></P>
<P style="TEXT-INDENT: 2em"><STRONG>MFC</STRONG>,微软基础类(<B>Microsoft Foundation Classes</B>),实际上是微软提供的,用于在<B>C++</B>环境下编写应用程序的一个框架和引擎,<B>VC++</B>是<B>WinOS</B>下开发人员使用的专业<B>C++ SDK</B>(<B>SDK,Standard SoftWare Develop Kit,专业软件开发平台</B>),MFC就是挂在它之上的一个辅助软件开发包,MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的IDE,WS,PlatForm,这跟<A href="http://baike.baidu.com/view/9355.htm" target=_blank>Pascal</A>和Dephi的关系一个道理,Pascal是Dephi的语言基础,Dephi使用Pascal规范来进行Win下应用程序的开发和编译,却不同于<A href="http://baike.baidu.com/view/7334.htm" target=_blank>Basic</A>语言和<A href="http://baike.baidu.com/view/3063.htm" target=_blank>VB</A>的关系,Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的Basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言),MFC同BC++集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC++专配的..<BR><BR><B>MFC是Win <A href="http://baike.baidu.com/view/16068.htm" target=_blank>API</A>与C++的结合</B>,API,即微软提供的WinOS下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方(如我是一方,微软是一方,Borland就是第三方)的编程语言来进行对Win OS下应用程序的开发,使这些被开发出来的应用程序能在WinOS下运行,比如VB,VC++,<A href="http://baike.baidu.com/view/29.htm" target=_blank>Java</A>,Dehpi编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在WinOS的消息机制和绘图里,遵守WinOS作为一个操作系统的内部实现,这其实也是一种必要,微软如果不提供API,这个世上对Win编程的工作就不会存在,微软的产品就会迅速从时尚变成垃圾,上面说到MFC是微软对API函数的专用C++封装,这种结合一方面让用户使用微软的专业C++ SDK来进行Win下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Win下用C++ &amp; MFC编制软件时的大量内节,如应用程序实现消息的处理,设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价(这是微软的一向作风),因此就造成了MFC对类封装中的一定程度的的冗余和迂回,但这是可以接受的..<BR><BR>最后要明白MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些在WinOS(用MFC编写的程序绝大部分都在WinOS中运行)中实现内部处理的类,如数据库的管理类等,学习中最应花费时间的是消息和设备环境,对C++和MFC的学习中最难的部分是指针,C++面向对像程序设计的其它部分,如数据类型,流程控制都不难,建议学习数据结构C++版..<A href="http://home.nuc.edu.cn/~yayu/look.php?id=25" target=_blank>http://home.nuc.edu.cn/~yayu/look.php?id=25</A><BR>MFC是微软封装了的API。什么意思呢？windows作为一个提供功能强大的应用程序接口编程的操作系统，的确方便了许多程序员，传统的win32开发（直接使用windows的接口函数API）对于程序员来说非常的困难，因为 <BR>API函数实在太多了，而且名称很乱，从零构架一个窗口动辄就是上百行的代码。MFC是面向对象程序设计与Application framework的完美结合，他将传统的API进行了分类封装，并且为你创建了程序的一般框架，</P><A href="http://duwenquanoo.blog.163.com"></A></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/702656652008458575394</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/702656652008458575394</guid>
    <pubDate>Mon, 5 May 2008 08:57:05 +0800</pubDate>
    <dcterms:modified>2008-05-05T08:57:05+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[BT是如何采用激励机制来达到健壮性的]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/7026566520083309524550</link>
    <description><![CDATA[<div><P>&nbsp;</P>
<P style="TEXT-INDENT: 2em"><FONT size=4>成都游戏学院 </FONT><A href="http://www.cdgamecollege.org/"><FONT color=#556c88 size=4>http://www.cdgamecollege.org</FONT></A><FONT size=4>&nbsp;&nbsp;&nbsp;</FONT></P>
<P>概要<BR>BitTorrent 文件发布系统采用针锋相对（tit_for_tat）的方法来达到帕累托有效，与当前已知的协作技术相比，它具有更高的活力。本文将解释BitTorrent 的用途，以及是怎样用经济学的方法来达到这个目标的。</P>
<P>1、BitTorrent 用来做什么？<BR>当通过HTTP协议来下载一个文件的时候，所有的上载开销都在主机上。而使用 BitTorrent，当多个人同时下载同一个文件的时候，他们之间也相互为对方提供文件的部分片断的下载。这样，就把上载的开销分摊到每个下载者那里，也就可以在理论上支持无限多个下载者来下载同一个文件。<BR>研究人员以前也在寻找一种达到这种效果的可实用的技术[3]。这种技术原来并没有在大的范围内运用过，因为逻辑和的问题非常棘手。如果仅仅计算哪些 peers 拥有文件的哪些片断以及这些片断应该被发送给谁，那么很难只产生比较小的系统开销。Peers之间的连接很少会超过几个小时，通常是几分钟而已。最后，有一个普遍的问题，就是公平性。<BR>我们将解释BitTorrent 是如何很好的解决这些问题的。</P>
<P>1.1、BitTorrent接口<BR>BitTorrent 的接口可能是最简单的。用户点击希望下载的文件的超级链接，然后会弹出一个标准的“保存到”对话框。此后，出现一个下载进度的窗口，在这个窗口中，除了显示下载速率外，还显示一个上载速率。BT在使用上非常简单，使得BT能广泛的被运用。</P>
<P>1.2、部署<BR>决定采用BitTorrent的原因是因为有一些文件需要发布。而下载者使用 BitTorrent，是因为这是他们获取所需要的文件的唯一途径。下载者经常一完成下载，就停止为别人上载，虽然说，在BT 客户端完成下载之后，继续为别人提供一段时间的上载是一种礼貌的行为。标准的实现是让客户端一直保持上载，除非窗口被关闭。<BR>在一个典型的部署中，未完成的下载者<BR>一台主机负责提供原始的文件，下载者通过BT来下载这个文件。下载者在下载的同时，为其它人提供上载，最后，离开这个系统。</P>
<P>2、技术框架</P>
<P>2.1发布内容<BR>为了部署 BT，首先将一个扩展名为 .torrent 的文件放在一个普通的web服务器上。.torrent文件包含了要共享的文件的信息，包括文件名、大小、文件的散列信息和一个指向tracker的url。Tracker负责帮助下载者能够获取其它下载者的信息。Tracker和下载者之间使用一种很简单的基于HTTP的协议进行交互，下载者告诉tracker自己要下载的文件、自己使用的端口以及类似的信息，tracker告诉下载者其它下载同样文件的下载者的联系信息。下载者利用这些信息相互之间建立连接。一个被成为“种子”的下载者，必须首先被启动，它知道完整的文件信息。对tracker和web服务器的带宽需求很低，而种子必须至少发送原始文件的一份完整拷贝。</P>
<P>译注：<BR>P2P的核心思想就是没有服务器的概念，任何一个下载者既是client，又是server。<BR>下载者从别人那里取文件的时候，称为下载，而为别人提供文件的时候，称为上载（传）。<BR>为了完成一次部署，至少需要一个 tracker和一个seed。所谓tracker，是一个服务器，负责帮助peers之间相互建立连接。而seed，通常是第一个向tracker注册，然后它就开始进入循环，等待为别人提供文件，也就是说，第一个seed只负责上传文件。一旦有一个peer向tracker注册后，就可以取得seed的信息，从而与seed建立连接。从seed处读取文件。由于原始的文件，只有seed拥有，所有说，seed至少要上传原始文件的一份完整拷贝。如果又有一个peer加入进来，那么它可以同时和seed和前一个peer建立连接，然后从这两者处获取文件。</P>
<P>2.2对等发布<BR>所有和文件下载相关的逻辑问题，通过 peers之间的交互来解决。一些关于下载和上传的速率的信息被发送给tracker，tracker搜集这些信息用于统计。Tracker的职责被严格限定为“帮助peers相互发现对方”。<BR>尽管tracker是peers之间相互发现的唯一途径，也是peers之间相互协作的唯一地点，标准的tracker算法返回一个随机的 peers的列表。随机图具有非常强大的特性，许多的peer选择算法最终产生了一个幂律图，幂律图能以少量的搅拌来获得分片。注意，peers之间的连接都是双向传输的。<BR>为了跟踪每个peers都拥有什么，BT将文件切割为固定大小的片（典型的大小是256k）。每个下载者必须通知其它peers，它拥有哪些片。为了验证文件的完整性，对每个片断都通过SHA1算法计算出它的hash信息，并保存在torrent文件中。Peers只有在检查了片断的完整性之后，才会通知其它peers它拥有这个片断。删除代码是一种被建议使用的帮助文件分布的技术，但是这种更简单的方法（既分片）也是可用的。<BR>Peers不断的从它能连接到的peers那里下载文件片断。当然，它不能从没有跟它建立连接的peers那里下载任何东西。即使是建立了连接的peers，有的也并不包含它想要的片断，或者还不允许它去下载。关于不允许其它peers从它那里下载文件片断的策略，被称为 阻塞choking，后文将进行讨论。其它关于文件分布的方法通常都要用到麻烦的树结构，而且树叶的上载能力并没有被利用起来。简单的让 peers 宣布它拥有什么会导致不到 10 % 的带宽开支，却可以可靠的使用所有的上载能力。</P>
<P>2.3流水作业<BR>构架在TCP之上的应用层协议，例如BT，很重要的一点是应该同时发送多个请求，以避免在两个片断发送之间的延迟，因为那样会严重影响传输速率。为了达到这种目的，BT将每个片断又进一步分为子片断，每个子片断的大小一般是16k，同时，它一直保持几个请求（通常是5个）被流水的同时发送。流水作业所选择的data（应该是指的同时发送的请求数目，也就是5个request）的依据是能使得大多数连接变得饱和。</P>
<P>译注：也就是说，每次发送5个请求，然后过一段时间，又发送5个请求。流水作业在HTTP 协议1.1版本中被广泛运用。</P>
<P>2.4片断选择<BR>选择一个好的顺序来下载片断，对提高性能非常重要。一个差的片断选择算法可能导致所有的片断都处于下载中，或者另一种情况，没有任何片断被上载给其它 peers。</P>
<P>2.4.1严格的优先级<BR>片断选择的第一个策略是：一旦请求了某个片断的子片断，那么该片断剩下的子片断优先被请求。这样，可以尽可能快的获得一个完整的片断</P>
<P>2.4.2最少的优先<BR>对一个下载者来说，在选择下一个被下载的片断时，通常选择的是它的peers们所拥有的最少的那个片断，也就是所谓的“最少优先”。这种技术，确保了每个下载者都拥有它的peers们最希望得到的那些片断，从而一旦有需要，上载就可以开始。这也确保了那些越普通的片断越放在最后下载，从而减少了这样一种可能性，即某个peer当前正提供上载，而随后却没有任何的被别人感兴趣的片断了。</P>
<P>译注：<BR>也就说说，每个peer都优先选择整个系统中最少的那些片断去下载，而那些在系统中相对较多的片断，放在后面下载，这样，整个系统就趋向于一种更优的状态。如果不用这种算法，大家都去下载最多的那些片断，那么这些片断就会在系统中分布的越来越多，而那些在系统中相对较少的片断仍然很少，最后，某些 peer 就不再拥有其它 peer 感兴趣的片断了，那么系统的参与者越来越少，整个系统的性能就下降。<BR>在BT系统中，充分考虑了经济学的概念，处处从整个系统的性能出发，参与者越多，系统越优化。</P>
<P>信息理论显示除非种子上传了文件的所有片断，否则没有任何下载者可以完成所有文件的下载。如果在一个部署中，只有一个种子，而且种子的上载能力比它的大多数下载者都要差，那么，不同的下载者从种子那里下载不同的片断，性能就会变得比较好，因为，重复的下载浪费了种子获取更多信息的机会。“最少优先”使得下载者只从种子处下载新的片断（也就是整个系统中其它peer都没有的片断），因为，下载者能够看到其它peers那里已经有了种子已经上传的片断。</P>
<P>在某些部署中，原始的种子由于某些原因最终关闭，只好由剩下的这些下载者们来负责上传。这样显然会带来一个风险：某些片断任何一个下载者都不拥有。“最少优先”也很好的处理了这种情况。通过尽快的复制最少的片断，减少了这种由于当前的peers停止上载后带来的风险。</P>
<P>2.4.3随机的第一个片断<BR>“最少优先”的一个例外是在下载刚开始的时候。此时，下载者没有任何片断可供上传，所以，需要尽快的获取一个完整的片断。而最少的片断，通常只有某一个peer拥有，所以，它可能比多个peers都拥有的那些片断下载的要慢。因此，第一个片断是随机选择的，直到第一个片断下载完成，才切换到“最少优先”的策略。</P>
<P>2.4.4最后阶段模式<BR>有时候，从一个速率很慢的peer那里请求一个片断。在下载的中间阶段，这不是什么问题，但是却可能潜在的延迟下载的完成。为了防止这种情况，在最后阶段，peer向它的所有的peers们都发送某片断的子片断的请求，一旦某些子片断到了，那么就会向其它peer发送cancel 消息，取消对这些子片断的请求，以避免带宽的浪费。实际上，用这种方法并没有浪费多少带宽，而文件的结束部分也一直下载的非常快。</P>
<P>3 阻塞（choking）算法<BR>BT并不集中分配资源。每个peer自己有责任来尽可能的提高它的下载速率。Peers从它可以连接的peers处下载文件，并根据对方提供的下载速率给予同等的上传回报（你敬我一尺，我敬你一丈）。对于合作者，提供上传服务，对于不合作的，就阻塞对方。所以说，阻塞是一种临时的拒绝上传策略，虽然上传停止了，但是下载仍然继续。在阻塞停止的时候，连接并不需要重新建立。<BR>阻塞算法并不属于BT对等协议（指peers 之间交互的协议）的技术部分，但是对提高性能是必要的。一个好的阻塞算法应该利用所有可用的资源，为所有下载者提供一致可靠的下载速率，并适当惩罚那些只下载而不上传的peers。</P>
<P>3.1帕累托有效<BR>帕累托有效是指资源配置已达到这样一种境地，即任何重新改变资源配置的方式，都不可能使一部分人在没有其他人受损的情况下受益。这一资源配置的状态，被称为“帕累托最优”（Pareto optimum）状态，或称为“帕累托有效”（Pareto efficient）<BR>在计算机领域，寻求帕累托有效是一种本地优化算法<BR>BitTorrent的阻塞算法，用一种针锋相对的方式来试图达到帕累托最优。（原文不太好翻译，我简化了）。Peers对那些向他提供上传服务的peers给予同样的回报，目的是希望在任何时候都有若干个连接正在进行着双向传输。</P>
<P>3.2 BitTorrent的阻塞算法<BR>从技术层面上说，BT的每个peer一直与固定数量的其它 peers 保持疏通（通常是4个），所以问题就变成了哪些peers应该保持疏通？这种方法使得TCP的拥塞控制性能能够可靠的饱和上传容量。（也就是说，尽量让整个系统的上传能力达到最大）。<BR>严格的根据当前的下载速率来决定哪些peers应该保持疏通。令人惊讶的是，计算当前下载速率是个大难题。当前的实现实质上是一个每隔20秒的轮询。而原来的算法是对一个长时间的网络传输进行总计，但这种方法很差劲，因为由于资源可用或者不可用，带宽会变化的很快。<BR>为了避免因为频繁的阻塞和疏通 peers造成的资源浪费，BT每隔10秒计算一次哪个peer需要被阻塞，然后将这种状态保持到下一个10秒。10秒已经足够使得TCP来调整它的传输性能到最大。</P>
<P>3.3、optimistic unchoking<BR>如果只是简单的为提供最好的下载速率的peers们提供上载，那么就没有办法来发现那些空闲的连接是否比当前正使用的连接更好。为了解决这个问题，在任何时候，每个peer都拥有一个称为“optimistic unchoking”的连接，这个连接总是保持疏通状态，而不管它的下载速率是怎样。每隔30秒，重新计算一次哪个连接应该是“optimistic unchoking”。30秒足以让上载能力达到最大，下载能力也相应的达到最大。这种和针锋相对类似的思想非常的伟大。“optimistic unchoking”非常和谐的与“囚徒困境”合作。</P>
<P>3.4、反对歧视<BR>某些情况下，一个peer可能被它所有的peers都阻塞了，这种情况下，它将会保持较低的下载速率直到通过“optimistic unchoking”找到更好peers。为了减轻这种问题，如果一段时间过后，从某个peer那里一个片断也没有得到，那么这个peer认为自己被对方“怠慢”了，于是不再为对方提供上传，除非对方是“optimistic unchoking”。这种情况频繁发生，会导致多于一个的并发的“optimistic unchoking”。</P>
<P>3.5仅仅上传<BR>一旦某个peer完成了下载，它不能再通过下载速率（因为下载速率已经为0了）来决定为哪些 peers 提供上载了。目前采用的解决办法是，优先选择那些从它这里得到更好的上载速率的peers。这样的理由是可以尽可能的利用上载带宽。</P>
<P>4、真实世界的体验<BR>BitTorrent不仅仅早已经实现，而且早已经被广泛的使用，它为许多并发的下载者提供成百兆的文件下载。已知的最大的部署中，同时有超过1000个的下载者。当前的瓶颈（实际还没有达到）看来是tracker的带宽。它（trakcer的带宽）大概占用了带宽总量的千分之一，一些小的协议扩展可能会使它降到万分之一。</P>
<P>参考资料：</P>
<P>[1] E. Adar and B. A. Huberman. Free riding on gnutella. First Monday, 5(10), 2000.<BR>[2] A.-L. Barab′asi. Linked: The New Science of Networks.Perseus Publishing, 2002.<BR>[3] M. Castro, P. Druschel, A.-M. Kermarrec, A. Nandi, A. Rowstron, and A. Singh. Splitstream: High-bandwidth content distribution in cooperative environments. In Proceedings of IPTPS03, Berkeley, USA, Feb. 2003.<BR>[4] P. Maymounkov and D. Mazieres. Kademlia: A peer-to-peer information system based on the xormetric. In Proceedings of IPTPS02, Cambridge, USA, Mar. 2002.<BR></P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/7026566520083309524550</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/7026566520083309524550</guid>
    <pubDate>Wed, 30 Apr 2008 09:52:45 +0800</pubDate>
    <dcterms:modified>2008-04-30T09:53:24+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[SEH]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/70265665200832910146682</link>
    <description><![CDATA[<div><P style="TEXT-INDENT: 2em"><FONT size=4>成都游戏学院 </FONT><A href="http://www.cdgamecollege.org/"><FONT color=#556c88 size=4>http://www.cdgamecollege.org</FONT></A><FONT size=4>&nbsp;&nbsp;&nbsp;</FONT></P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">引言</P>
<P style="TEXT-INDENT: 2em">#include &lt;windows.h&gt;</P>
<P style="TEXT-INDENT: 2em">#include &lt;stdio.h&gt;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">int main(void)</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">&nbsp; _try</P>
<P style="TEXT-INDENT: 2em">&nbsp; {</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; *(DWORD*)0=0;</P>
<P style="TEXT-INDENT: 2em">&nbsp; }</P>
<P style="TEXT-INDENT: 2em">&nbsp; _except( EXCEPTION_EXECUTE_HANDLER )</P>
<P style="TEXT-INDENT: 2em">&nbsp; {</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; printf("What's wrong?\n");</P>
<P style="TEXT-INDENT: 2em">&nbsp; }</P>
<P style="TEXT-INDENT: 2em">&nbsp; return 0;</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">简介</P>
<P style="TEXT-INDENT: 2em">Structured Exception Handling是Win32操作系统提供的一种机制。</P>
<P style="TEXT-INDENT: 2em">在程序运行出现异常时，能让程序员对错误进行捕获，获得最后对异常的处理机会。</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">_try，_finally，_except；</P>
<P style="TEXT-INDENT: 2em">准备</P>
<P style="TEXT-INDENT: 2em">EXCEPTION_DISPOSITION</P>
<P style="TEXT-INDENT: 2em">__cdecl</P>
<P style="TEXT-INDENT: 2em">_except_handler(</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct _EXCEPTION_RECORD* ExceptionRecord,</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void* EstablisherFrame,</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct _CONTEXT* ContextRecord,</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void* DispatcherContext )</P>
<P style="TEXT-INDENT: 2em">准备（续）</P>
<P style="TEXT-INDENT: 2em">typedef struct _EXCEPTION_RECORD {</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; DWORD ExceptionCode;</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; DWORD ExceptionFlags;</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; struct _EXCEPTION_RECORD *ExceptionRecord;</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; PVOID ExceptionAddress;</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; DWORD NumberParameters;</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];</P>
<P style="TEXT-INDENT: 2em">}&nbsp; EXCEPTION_RECORD;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">_EXCEPTION_REGISTRATION struc</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp; prev&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;dd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ?</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp; handler dd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ?</P>
<P style="TEXT-INDENT: 2em">_EXCEPTION_REGISTRATION ends</P>
<P style="TEXT-INDENT: 2em">例子1</P>
<P style="TEXT-INDENT: 2em">DWORD scratch;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">printf("Try now!\n");</P>
<P style="TEXT-INDENT: 2em">ContextRecord-&gt;Eax = (DWORD)&amp;scratch;</P>
<P style="TEXT-INDENT: 2em">return ExceptionContinueExecution;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">DWORD handler = (DWORD)_except_handler;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">__asm</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp; handler</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp; FS:[0]</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; FS:[0],ESP</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">例子2</P>
<P style="TEXT-INDENT: 2em">return ExceptionContinueSearch;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">void Foo(void)</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">&nbsp; DWORD handler = (DWORD)_except_handler;</P>
<P style="TEXT-INDENT: 2em">&nbsp; __asm</P>
<P style="TEXT-INDENT: 2em">&nbsp; {</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp; handler</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp; FS:[0]</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; FS:[0],&nbsp; ESP</P>
<P style="TEXT-INDENT: 2em">&nbsp; }</P>
<P style="TEXT-INDENT: 2em">&nbsp; *(PDWORD)0 = 0;</P>
<P style="TEXT-INDENT: 2em">&nbsp; printf("I should never get here!\n");</P>
<P style="TEXT-INDENT: 2em">&nbsp; __asm</P>
<P style="TEXT-INDENT: 2em">&nbsp; {</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; eax,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ESP]</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; FS:[0],&nbsp; EAX</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; esp,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8</P>
<P style="TEXT-INDENT: 2em">&nbsp; }</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">关键字</P>
<P style="TEXT-INDENT: 2em">FS</P>
<P style="TEXT-INDENT: 2em">TEB/TIB</P>
<P style="TEXT-INDENT: 2em">_EXCEPTION_REGISTRATION</P>
<P style="TEXT-INDENT: 2em">EH_UNWINDING</P>
<P style="TEXT-INDENT: 2em">应用举例1</P>
<P style="TEXT-INDENT: 2em">GetCurrentProcessId()</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp; === Instead of ===</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">inline DWORD MyGetProcessId()</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">&nbsp; __asm</P>
<P style="TEXT-INDENT: 2em">&nbsp; {</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; mov&nbsp; EAX, FS:[20h]</P>
<P style="TEXT-INDENT: 2em">&nbsp; }</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">应用举例2</P>
<P style="TEXT-INDENT: 2em">Anti-Debug</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">PVOID*&nbsp; pProcess;&nbsp;&nbsp; // 30h Pointer to owning process database</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/70265665200832910146682</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/70265665200832910146682</guid>
    <pubDate>Tue, 29 Apr 2008 10:01:46 +0800</pubDate>
    <dcterms:modified>2008-04-29T10:02:44+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[Wiki带你进入另一个世界]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/702656652008322102747310</link>
    <description><![CDATA[<div><P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">成都游戏学院 <A href="http://www.cdgamecollege.org/">http://www.cdgamecollege.org</A>&nbsp;&nbsp;</P>
<P style="TEXT-INDENT: 2em">有人说, </P>
<P style="TEXT-INDENT: 2em">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;“Wiki是一个百科全书的生成器，它让全世界不同地域的人们联手打造属于全世界人民的百科全书，并且每一位读者都可以完善它.”</P>
<P style="TEXT-INDENT: 2em">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; “Wiki是一款多人协作的写作工具，它让你可以和远在大西洋彼岸的她联手写下你们的故事”.</P>
<P style="TEXT-INDENT: 2em">3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; “Wiki以“知识库文档”为中心，“共同创作”为手段，依靠“众人不断地更新修改”，开创了一种借助互联网创建、积累、完善和分享知识的全新模式。”</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">一.&nbsp;&nbsp; Wiki是什么.</P>
<P style="TEXT-INDENT: 2em">一组人坐在一块白板面前，任何人都可以在上面添加想法，做出修改，甚至擦掉一点东西.</P>
<P style="TEXT-INDENT: 2em">Wiki就是这块白版:</P>
<P style="TEXT-INDENT: 2em">&nbsp;
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=504>
<P></P>
<P style="TEXT-INDENT: 2em">张三认为…</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 李四觉得… </P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 王五的看法</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P></TD></TR></TBODY></TABLE></P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">Wiki依赖大家的力量来不断完善一个主题, 并且随着时间的推移, 也会有不同的人来维护这个主题.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">以往网页的缺点: </P>
<P style="TEXT-INDENT: 2em">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 读者只能查看, 不能修改, 如果你在阅读一篇技术文章时发现一处错误, 或者有一个更好的主意, 但你却不能修改它, 如果你真要修改, 你必须千方百计联系到作者.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">Wiki网页:</P>
<P style="TEXT-INDENT: 2em"><A href="http://www.cnic.org/wiki/%E7%BB%B4%E5%AE%A2%E5%8E%86%E5%8F%B2">http://www.cnic.org/wiki/%E7%BB%B4%E5%AE%A2%E5%8E%86%E5%8F%B2</A></P>
<P style="TEXT-INDENT: 2em">维基百科（中文战）:　<A href="http://zh.wikipedia.org/">http://zh.wikipedia.org/</A></P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">二. Wiki的特点: </P>
<P style="TEXT-INDENT: 2em">&lt;1&gt;基于Web的多人协作的写作工具, 不同于SVN, VSS, CVS等基于专门的服务器.</P>
<P style="TEXT-INDENT: 2em">&lt;2&gt;与读者互动, 读者即作者。</P>
<P style="TEXT-INDENT: 2em">&lt;3&gt;由于提供了读者自由修改内容的权利, 这样内容的自由度就极大的提高了, 不再是由网站编辑人员一方控制了.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">Wiki是一个很简单的系统, 它有下面一些优点:</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp; Wiki是廉价的、可扩展和易于维护的。它不需要大规模的软件部署，就可以很好地与已有网络基础设施连接。它使用了简化的语法，替代复杂的 HTML，加上 WEB 界面的编辑工具，降低内容维护的门槛；它能快速创建、存取、更改超文本页面，还直接以关键字名来建立链接；对页面的链接目标可以尚未存在，通过点击链接来创建这些页面，从而使系统得到不断增长；由于清除垃圾文字、广告是那么的容易，最终剩下的将是最有意义的内容和最好的参与者。</P>
<P style="TEXT-INDENT: 2em">　　</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp; Wiki是开放的、可观察和易于使用控制的。它基于Web，在使用时不需要多少学习时间，并允许用户决定内容的相关性，任意创建、修改、删除页面。同时，通过文本数据库或者关系型数据库实现了版本控制，系统内页面的变动还可以被访问者观察到，并可随时找回以前的版本，也可和以前的版本进行比对。版本控制既使多人协作成为可能，又保护了保存的内容不会丢失。</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">1.与HTML对比:
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">&nbsp;</P></TD>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">协作方式</P></TD>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">上手度</P></TD></TR>
<TR>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">HTML</P></TD>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">只能作者编辑</P></TD>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">语法复杂, 上手比较难</P></TD></TR>
<TR>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">WIKI</P></TD>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">允许多人编辑</P></TD>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">语法相对简单, 上手容易</P></TD></TR></TBODY></TABLE></P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">2.与BBS对比:
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=114>
<P></P>
<P style="TEXT-INDENT: 2em">&nbsp;</P></TD>
<TD vAlign=top width=114>
<P></P>
<P style="TEXT-INDENT: 2em">组织版面</P></TD>
<TD vAlign=top width=114>
<P></P>
<P style="TEXT-INDENT: 2em">表现方式</P></TD>
<TD vAlign=top width=230>
<P></P>
<P style="TEXT-INDENT: 2em">强调内容</P></TD></TR>
<TR>
<TD vAlign=top width=114>
<P></P>
<P style="TEXT-INDENT: 2em">BBS</P></TD>
<TD vAlign=top width=114>
<P></P>
<P style="TEXT-INDENT: 2em">以话题为主线</P></TD>
<TD vAlign=top width=114>
<P></P>
<P style="TEXT-INDENT: 2em">注册用户在相应的版中发帖，跟帖</P></TD>
<TD vAlign=top width=230>
<P></P>
<P style="TEXT-INDENT: 2em">强调互动，更像广场集会，很多人图的是热闹和一吐之快，积极发言</P></TD></TR>
<TR>
<TD vAlign=top width=114>
<P></P>
<P style="TEXT-INDENT: 2em">WIKI</P></TD>
<TD vAlign=top width=114>
<P></P>
<P style="TEXT-INDENT: 2em">以知识点为主线</P></TD>
<TD vAlign=top width=114>
<P></P>
<P style="TEXT-INDENT: 2em">成千上万个志愿者在修改成千上万个文档</P></TD>
<TD vAlign=top width=230>
<P></P>
<P style="TEXT-INDENT: 2em">强调共同创作，由无数人共同维护完善一个词条</P></TD></TR></TBODY></TABLE></P>
<P style="TEXT-INDENT: 2em">3.与Blog对比:
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">&nbsp;</P></TD>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">协作方式</P></TD>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">强调内容</P></TD></TR>
<TR>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">BLOG</P></TD>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">个人书写</P></TD>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">强调个人感情的抒发</P></TD></TR>
<TR>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">WIKI</P></TD>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">多人书写</P></TD>
<TD vAlign=top width=189>
<P></P>
<P style="TEXT-INDENT: 2em">强调共同创作，由无数人共同维护完善一个词条</P></TD></TR></TBODY></TABLE></P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">不足:</P>
<P style="TEXT-INDENT: 2em">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 它没有对现有的网页语言做兼容. 弄得不是你死就是我亡, 这个导致Wiki站点无法迅速成长. 因为很多网站不愿意去尝试颠覆性的技术. 它没有去利用互联网正流行的一些模式做过渡.[和谐和谐..]</P>
<P style="TEXT-INDENT: 2em">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在中国, 政府干预监管媒体的大前提下, 由于Wiki自由言论中常会出现一些敏感话题, 所以.. 我觉得Wiki百科式的发展, 在这里会受到比较大阻力.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp; </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">WIKI思想的运用. 反思.[重点]</P>
<P style="TEXT-INDENT: 2em">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wiki其实就是为一群时间和地点都不统一的人提供了一个统一的场所让他们聚到一起来研究同一个彼此感兴趣的话题.</P>
<P style="TEXT-INDENT: 2em">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wiki是种解决方案, 其实我们身边也存在着这样的一些实例</P>
<P style="TEXT-INDENT: 2em">比如 </P>
<P style="TEXT-INDENT: 2em">&lt;1&gt;比如有几个人最近思想比较活跃, 想一起写书, 大家就可以建立一个Wiki, 一起来写作.</P>
<P style="TEXT-INDENT: 2em">&lt;2&gt;比如大家对Unreal的某方面有兴趣, 大家不妨也可以建立一个Wiki, 让大家来一起完善这份文档. 这个不同于以往的协作.因为它是基于Web的协作. 更容易操作.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/702656652008322102747310</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/702656652008322102747310</guid>
    <pubDate>Tue, 22 Apr 2008 10:27:47 +0800</pubDate>
    <dcterms:modified>2008-04-22T10:27:47+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[游戏本质浅谈]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/702656652008315101719625</link>
    <description><![CDATA[<div><P style="TEXT-INDENT: 2em"><FONT size=3>成都游戏学院 </FONT><A href="http://www.cdgamecollege.org/"><FONT size=3>http://www.cdgamecollege.org</FONT></A><FONT size=3>&nbsp;</FONT>&nbsp;&nbsp; </P>
<P style="TEXT-INDENT: 2em">什么是游戏</P>
<P style="TEXT-INDENT: 2em">游戏是艺术么</P>
<P style="TEXT-INDENT: 2em">艺术的定义(by Chris Crowford)：它通过幻想来传递刺激性的情感，静态的艺术如雕塑和图画是时间静止的，动态的艺术如音乐、戏剧、电影可以表述时间流动的，交互的艺术如棋牌、电子游戏可以表达更为复杂的因果效应。</P>
<P style="TEXT-INDENT: 2em">艺术的特性：艺术的表现力取决于人们所具有幻想的共同性，越多人有共鸣艺术表现力就越强。传统艺术是排斥观众参与的，其表现过程是由掌握专门技术的艺术家所独享的，观众是被动的接收者。交互艺术的主动参与性使其更容易产生观众的共鸣。</P>
<P style="TEXT-INDENT: 2em">棋牌、扑克、麻将、儿童游戏、体育竞赛、单机游戏、网络游戏</P>
<P style="TEXT-INDENT: 2em">游戏的本质其实就是人性（生存/安全/社交/尊重/成就）的部分折射，它大致可以分成四个层面来分析：</P>
<P style="TEXT-INDENT: 2em">对真实世界和社会的部分表现</P>
<P style="TEXT-INDENT: 2em">在游戏规则下自由地同各种游戏元素交互</P>
<P style="TEXT-INDENT: 2em">跟规则本身或者其他玩家产生对立和冲突</P>
<P style="TEXT-INDENT: 2em">在玩游戏的过程中体验无与伦比的安全</P>
<P style="TEXT-INDENT: 2em">表现：游戏应该是一个能从主观上表现真实世界一个子集的封闭的形式系统</P>
<P style="TEXT-INDENT: 2em">封闭(closed)：从内部看来是一个完善的自足的系统，不需要在游戏规则以外设置裁判</P>
<P style="TEXT-INDENT: 2em">形式(formal)：规则必须很清楚，不能含糊</P>
<P style="TEXT-INDENT: 2em">系统(system)：包含各种元素的集合，而各种元素之间有复杂的相互作用和影响</P>
<P style="TEXT-INDENT: 2em">主观上表现(subjectively represents)</P>
<P style="TEXT-INDENT: 2em">主观(subjective)和客观(objective)是硬币的两面</P>
<P style="TEXT-INDENT: 2em">游戏设计更强调引发主观想像的表现</P>
<P style="TEXT-INDENT: 2em">杀死成千上万的怪物</P>
<P style="TEXT-INDENT: 2em">击落无数的战机</P>
<P style="TEXT-INDENT: 2em">在游戏中玩家主观幻想上的真实胜于一切</P>
<P style="TEXT-INDENT: 2em">两个极端的比较：游戏 vs. 模拟现实</P>
<P style="TEXT-INDENT: 2em">最夸张的艺术性简化规则 vs. 最接近真实的数学模型</P>
<P style="TEXT-INDENT: 2em">《雷电》 vs. 飞行模拟器</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P style="TEXT-INDENT: 2em">真实世界的子集(subset of reality)</P>
<P style="TEXT-INDENT: 2em">任何游戏都能在真实世界中找到影子，也就是说它必须包含真实</P>
<P style="TEXT-INDENT: 2em">一个游戏包含真实的度量标准，是给玩家足够的焦点关注，如果一个游戏关注焦点太多，甚至超过了生活本身，很难想像玩起来还有什么乐趣</P>
<P style="TEXT-INDENT: 2em">交互：油画和雕塑、音乐和电影都不具备交互性</P>
<P style="TEXT-INDENT: 2em">世界的奥妙在于变化和其中的因果关系</P>
<P style="TEXT-INDENT: 2em">解谜和游戏的对比：九连环 vs. 下棋</P>
<P style="TEXT-INDENT: 2em">故事和游戏的对比：电影 vs. RPG</P>
<P style="TEXT-INDENT: 2em">虚构的真实，真实的谎言《星球大战》</P>
<P style="TEXT-INDENT: 2em">单线和多线，固定和分支</P>
<P style="TEXT-INDENT: 2em">交互性和AI：情理之中，意料之外</P>
<P style="TEXT-INDENT: 2em">交互性玩家体验，被动变主动</P>
<P style="TEXT-INDENT: 2em">更复杂的交互，团队交互，诡计和默契</P>
<P style="TEXT-INDENT: 2em">足球 vs. 乒乓球</P>
<P style="TEXT-INDENT: 2em">桥牌/升级/斗地主 vs. 梭哈</P>
<P style="TEXT-INDENT: 2em">冲突：交互的过程必然产生冲突，阻止玩家快速达成目标的问题都可以称之为冲突</P>
<P style="TEXT-INDENT: 2em">跟游戏本身的冲突，游戏规则</P>
<P style="TEXT-INDENT: 2em">跟其他玩家的冲突，转移矛盾</P>
<P style="TEXT-INDENT: 2em">游戏冲突的特点</P>
<P style="TEXT-INDENT: 2em">清晰性，游戏的主观表现性决定的</P>
<P style="TEXT-INDENT: 2em">直接性，暴力和血腥</P>
<P style="TEXT-INDENT: 2em">安全：冲突代表危险，危险代表着要冒险，冒险代表不安全</P>
<P style="TEXT-INDENT: 2em">游戏的安全在于，冲突一般偏向主观心理上，不会延展到在物理空间的真实中</P>
<P style="TEXT-INDENT: 2em">一个小时创建并毁灭一个帝国</P>
<P style="TEXT-INDENT: 2em">一个小时赚了1亿美元又破产了</P>
<P style="TEXT-INDENT: 2em">5分钟内杀了N个人，自己也挂了</P>
<P style="TEXT-INDENT: 2em">但是即便是心理上的安全也是很重要的</P>
<P style="TEXT-INDENT: 2em">玩游戏还是被游戏玩</P>
<P style="TEXT-INDENT: 2em">程度跟玩家本身的群体性质有关，如年龄层</P>
<P style="TEXT-INDENT: 2em">什么会妨碍我们理解游戏本质</P>
<P style="TEXT-INDENT: 2em">毫无顾忌地用自己作为一个玩家的游戏经验来理解这个问题</P>
<P style="TEXT-INDENT: 2em">愉快而轻松地忘掉了游戏设计其实是一门极其复杂的学问</P>
<P style="TEXT-INDENT: 2em">忘了游戏开发者的职责，做游戏是娱乐别人的，不是娱乐自己的</P>
<P style="TEXT-INDENT: 2em">用过分看重技术的态度来研究这个问题</P>
<P style="TEXT-INDENT: 2em">没有金刚钻就别揽瓷器活，那有了金刚钻就一定能做好瓷器活么</P>
<P style="TEXT-INDENT: 2em">只关心技术只会扼杀自己进一步学习的潜力</P>
<P style="TEXT-INDENT: 2em">理解游戏本质的现实意义</P>
<P style="TEXT-INDENT: 2em">从最本源发掘技术研究和应用的动力</P>
<P style="TEXT-INDENT: 2em">在游戏开发中分清主次</P>
<P style="TEXT-INDENT: 2em">更好的团队合作，尤其是同策划的合作</P>
<P style="TEXT-INDENT: 2em">随着计算机软硬件技术的飞速发展，电子游戏艺术创作所受的限制越来越小，如果我们连什么是游戏、为什么人们会玩游戏、什么样的设计将会使游戏艺术更伟大都不知道，是无论如何都做不好电脑游戏的</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/702656652008315101719625</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/702656652008315101719625</guid>
    <pubDate>Tue, 15 Apr 2008 10:17:19 +0800</pubDate>
    <dcterms:modified>2008-04-15T10:18:21+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[空间计算模型的建立及启示]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/702656652008315101133375</link>
    <description><![CDATA[<div><P><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-fareast-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"></SPAN></P>
<P style="TEXT-INDENT: 2em"><FONT color=#000080><U>成都游戏学院 </U></FONT><A href="http://www.cdgamecollege.org"><FONT color=#000080>http://www.cdgamecollege.org</FONT></A><U>&nbsp;&nbsp;</U>
</P><P style="TEXT-INDENT: 2em"><U></U>&nbsp;
</P><P style="TEXT-INDENT: 2em">学习之前，我们要提出2个问题，以待我们学习之后来解决~
</P><P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. 用计算机处理几何图形时, 怎样表示几何数据才能让编程更方便,思考更顺畅</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. 在DX中, 向量的表示为什么会有四个分量,这第四个分量有什么含义, 怎样利用它</P>
<P style="TEXT-INDENT: 2em">空间的数学表示</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 向量空间</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 仿射空间</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 格拉斯曼空间</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 射影空间</P>
<P style="TEXT-INDENT: 2em">每一种空间都定义了一组元素集合及其运算规则,当一种空间表示因为其自身缺陷不符合现实要求时.可以通过改进其元素集合和运算规则来达到目的.</P>
<P style="TEXT-INDENT: 2em">改进过程
</P><P style="TEXT-INDENT: 2em">图略
</P><P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">向量空间</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 集合: 向量</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运算规则: 向量的加减,点乘,叉乘.数乘、</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缺点: 不能表示点, 所以在图形学中,仅仅用这种表示方法显然不够</P>
<P style="TEXT-INDENT: 2em">点与向量的区别</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 向量能进行加减和数乘,但点不行(主要是因为坐标相关)</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 向量有方向有长度,但是没有确切的位置.但点刚好相反</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 点能通过平移改变属性.而向量却不可以</P>
<P style="TEXT-INDENT: 2em">仿射空间的引入</P>
<P style="TEXT-INDENT: 2em">特点: 同时定义了点和向量, 它们有如下关系:</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 点 = 向量 – 向量&nbsp; </P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp; 向量 = 点 + 向量
</P><P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 仿射空间在定义点的数乘运算和无穷原点上面的有所不足</P>
<P style="TEXT-INDENT: 2em">点运算的改进及格拉斯曼空间</P>
<P style="TEXT-INDENT: 2em">特点:&nbsp; 赋予了点质量(或者说电荷)的概念.</P>
<P style="TEXT-INDENT: 2em">用 (mP,m) 表示一个格拉斯曼空间中的点,点的数乘和加法被赋予了新的意义:</P>
<P style="TEXT-INDENT: 2em">c(mP,m) = (cmP,cm)</P>
<P style="TEXT-INDENT: 2em">(m1P1,m1)+(m2P2,m2) = (m1P1+m2P2,m1+m2)</P>
<P style="TEXT-INDENT: 2em">在物理上表示的是两个点质量的中心, 质量在此可以为负</P>
<P style="TEXT-INDENT: 2em">矢量在格拉斯曼空间空间中类比于力, 力v把质点(mP,m)重新定位到P + v/m. 这样, 质量越大的物体受到力v的影响后产生的效应就越小,所以可以如下定义点和矢量的加法:</P>
<P style="TEXT-INDENT: 2em">(mP,m) + (v,0) = (mP + v, m)</P>
<P style="TEXT-INDENT: 2em">数乘满足分配律:</P>
<P style="TEXT-INDENT: 2em">C{(mp,m)+(v,0)} = c(mP+v,m) </P>
<P style="TEXT-INDENT: 2em">&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; = (cmP+cv,cm)</P>
<P style="TEXT-INDENT: 2em">&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;= c(mP,m) + c(v,0)</P>
<P style="TEXT-INDENT: 2em">到此就定义了一套关于点和向量的运算体系.</P>
<P style="TEXT-INDENT: 2em">可以将n维仿射空间中的点和向量的概念提高到高维的格拉斯曼空间去讨论</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">格拉斯曼空间和仿射空间之间有如下的映射关系:</P>
<P style="TEXT-INDENT: 2em">仿射空间 è格拉斯曼空间 :</P>
<P style="TEXT-INDENT: 2em">&nbsp;P è (P,1) vè(v,0)</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">格拉斯曼空间è仿射空间:</P>
<P style="TEXT-INDENT: 2em">&nbsp;(mP,m) è mP/mèP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (v,0) è v</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">无穷远点和射影空间</P>
<P style="TEXT-INDENT: 2em">&nbsp;用数对[X, w] 表示射影空间中的点, 参数w叫做齐次坐标, 这就是为了
</P><P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表达诸如透视投影之类的射影变换,在图形学中应用的齐次坐标</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当w为0时,表示的就是一个无穷远点. </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 很明显, 此时应该给除以零一个定义.</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在射影空间中,将无穷远点和向量联系起来了.所以射影空间是一个点空间,没有向量的概念了</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在射影空间中, 点的加法可以定义为:</P>
<P style="TEXT-INDENT: 2em">[c1P1,c1] + [c2P2,c2] = [c1P1+c2P2,c1+c2]</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">右边可以表示过这两点的直线上的点, 在对于有一个无穷点,两个无穷点.和没有无穷点的情况.上式都成立.</P>
<P style="TEXT-INDENT: 2em">应用举例</P>
<P style="TEXT-INDENT: 2em">根据仿射空间的运算性质,用一组基底向量和一个原点的组合就可以表示空间中任何点. 于是可以这样建立一个仿射坐标系:</P>
<P style="TEXT-INDENT: 2em">F = (v1, v2, ….. , vn, O)T</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">空间中的点可以表示为:</P>
<P style="TEXT-INDENT: 2em">P = a1v1 + a2v2 + …. + an vn + O</P>
<P style="TEXT-INDENT: 2em">这样, 空间中的向量和基底向量将没有什么不同,为空间变换提供了方便</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 比如: 有两个仿射空间A, B, 如果仿射变换T(P)将点从A映射到B. 那么, 可以有如下表示:</P>
<P style="TEXT-INDENT: 2em">T(P) = T(a1v1 + a2v2 +…. an vn + O )</P>
<P style="TEXT-INDENT: 2em">=&nbsp; a1T(v1) + a2T(v2) + anT(vn) + T(O)</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">分别求出坐标系每一个分量和原点的变换方式,然后再组合成变换矩阵. 让原本繁琐的推导过程变得更直观易懂</P>
<P style="TEXT-INDENT: 2em">其他</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有理曲线</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 阴影体</P>
<P style="TEXT-INDENT: 2em">启示</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过定义一种计算模型. 让代数计算法则能够在几何计算中发挥作用.</P>
<P style="TEXT-INDENT: 2em">&iexcl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类比.借用. 一种科学的思考方式</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;</P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/702656652008315101133375</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/702656652008315101133375</guid>
    <pubDate>Tue, 15 Apr 2008 10:11:33 +0800</pubDate>
    <dcterms:modified>2008-04-15T10:11:33+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[OBJ模型格式解析]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/702656652008312751385</link>
    <description><![CDATA[<div><P>成都游戏学院 <A href="http://www.cdgamecollege.org">http://www.cdgamecollege.org</A> </P>
<P>一、超大场景平滑切换的实现方法（3D/2D场景都适用）<BR>二、非多重混合纹理实现地表(既用图素方法够成)<BR>三、碰撞检测<BR>四、室内外场景结合 </P>
<P></P>
<P><BR>整个场景由64*64=4096个区域构成，每个区域管理4*4=16个屏幕大小场景，合计65535个屏幕场景。理论上可以更加大，目前的这样的场景数据约占用300M的磁盘空间(Zlib标准压缩后约12M空间)。不用多线程场景切换约为&lt;1秒。多线程时候，采用中等优先级别的线程就可以做到平滑切换了。</P>
<P>Class&nbsp;QuadTree{<BR>&nbsp;&nbsp;&nbsp;&nbsp;//用以剪裁判断,哪些区域的块需要渲染<BR>};</P>
<P>Class&nbsp;区域的块&nbsp;：public&nbsp;QuadTree{<BR>&nbsp;&nbsp;&nbsp;&nbsp;*m_p区域;//隶属于哪个区域<BR>&nbsp;&nbsp;&nbsp;&nbsp;int32&nbsp;*m_pDoodadsIndex;//哪些场景物件在这个区域的块中(索引)<BR>};</P>
<P>Class&nbsp;区域{<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;m_nX,&nbsp;m_nY;//该区域的x,y<BR>&nbsp;&nbsp;&nbsp;&nbsp;uint8*&nbsp;m_pPath;//路径障碍关系<BR>&nbsp;&nbsp;&nbsp;&nbsp;uint8*&nbsp;m_pGroundFlag;//贴图图素位置信息<BR>&nbsp;&nbsp;&nbsp;&nbsp;场景物件*&nbsp;m_pDoodads;<BR>&nbsp;&nbsp;&nbsp;&nbsp;区域块[4][4];<BR>&nbsp;&nbsp;&nbsp;&nbsp;QuadTree&nbsp;m_QuadTree;<BR>&nbsp;&nbsp;&nbsp;&nbsp;LoadData(){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--[[<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据m_nX,&nbsp;m_nY&nbsp;,从磁盘装载该区域的数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]<BR>&nbsp;&nbsp;&nbsp;&nbsp;};<BR>&nbsp;&nbsp;&nbsp;&nbsp;SetUpQuadTree(){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将装载好的数据分成区域块，放到QuadTree的中，每个区域块都是QuadTree的一个叶子<BR>&nbsp;&nbsp;&nbsp;&nbsp;};<BR>};</P>
<P>Class世界{<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;m_nX,m_nY;//管理区域的中心，即屏幕中心的块的x,y<BR>&nbsp;&nbsp;&nbsp;&nbsp;区域装载的缓冲[16];<BR>&nbsp;&nbsp;&nbsp;&nbsp;区域指针[3][3];<BR>&nbsp;&nbsp;&nbsp;&nbsp;Enter(x,y);//进入某个区域<BR>};</P>
<P>上面的结构应该不是很难理解，&nbsp;QuadTree部分只是剪裁渲染部分使用的，完全可以跳过。<BR>以下旨在介绍&nbsp;区域装载缓冲&nbsp;的运用</P>
<P>*--*--*--*<BR>|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|<BR>*--*--*--*<BR>|&nbsp;&nbsp;&nbsp;&nbsp;|@|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<BR>*--*--*--*<BR>|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<BR>*--*--*--*</P>
<P>@是现在Enter(x,y)进入的区域，我们需要将其周围的那些块都装载到内存来，并进行设备初始化包括网格贴图模型。(注意装载不是说一定要对其进行渲染。是否渲染是由QuadTree或者其他剪裁方法来完成的)<BR>Enter(x,y)<BR>{<BR>&nbsp;&nbsp;m_nX&nbsp;=&nbsp;x;&nbsp;m_nY&nbsp;=&nbsp;y;<BR>&nbsp;&nbsp;For(int&nbsp;i=0;i&lt;3;i++)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For(int&nbsp;j=0;j&lt;3;j++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;区域指针[i][j]&nbsp;=&nbsp;_Load(x-1+i,y-1+j);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>}</P>
<P>Load(x,&nbsp;y)<BR>{<BR>&nbsp;&nbsp;//首先判断x,y是否合法(x,y&lt;0,x,y&gt;=64),如果不合法,return&nbsp;NULL.<BR>&nbsp;&nbsp;Int&nbsp;nNULL&nbsp;=&nbsp;16;//需要找一块没有使用或者不需要使用的缓冲区来装载该区域<BR>&nbsp;&nbsp;for(int&nbsp;i=0;&nbsp;i&lt;16;i++)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(区域缓冲[i]&nbsp;!=&nbsp;NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(区域缓冲[i].m_x&nbsp;==&nbsp;x&nbsp;&amp;&amp;&nbsp;区域缓冲[i].m_y&nbsp;==&nbsp;y)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//原来已经装载过这个区域了，返回就好<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//return&nbsp;区域缓冲[i];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&lt;&nbsp;nNULL)&nbsp;nNULL=i;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;if(nNULL&nbsp;==&nbsp;16)<BR>&nbsp;&nbsp;{//所有的缓冲都被使用了<BR>&nbsp;&nbsp;&nbsp;//用离本区域最远的一块缓冲将其来装载<BR>&nbsp;&nbsp;&nbsp;//最远意味着该区域短时间内用不上<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;m,&nbsp;n&nbsp;=&nbsp;0,&nbsp;k&nbsp;=&nbsp;0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i=0;&nbsp;i&lt;16;&nbsp;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;=&nbsp;abs(区域缓冲[i].m_nX-m_nX)&nbsp;+&nbsp;abs(区域缓冲[i].m_nY-m_nY);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(m&gt;n){n&nbsp;=&nbsp;m;k=i;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;//找到了,将这个最远的区域删除掉<BR>&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;区域缓冲[k];&nbsp;区域缓冲[k]=NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;nNULL&nbsp;=&nbsp;k;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;//好了。现在有空位缓冲装载这个区域了<BR>&nbsp;&nbsp;区域缓冲[nNULL]&nbsp;=&nbsp;new&nbsp;区域(x,&nbsp;y);<BR>&nbsp;&nbsp;{//用多线程装载<BR>&nbsp;&nbsp;&nbsp;&nbsp;LoadThreadManang(区域缓冲[nNULL]);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;{//不用多线程<BR>&nbsp;&nbsp;&nbsp;&nbsp;区域缓冲[nNULL].Load();//装载该区域的数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;区域缓冲[nNULL].InitDeviceObject();<BR>&nbsp;&nbsp;}<BR>}</P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/702656652008312751385</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/702656652008312751385</guid>
    <pubDate>Sat, 12 Apr 2008 19:51:03 +0800</pubDate>
    <dcterms:modified>2008-04-12T19:51:03+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[3D技术实现2D场景成都游戏学院 http://www.cdgamecollege.org ]]></title>	
    <link>http://duwenquanoo.blog.163.com/blog/static/70265665200831274751503</link>
    <description><![CDATA[<div>一、超大场景平滑切换的实现方法（3D/2D场景都适用）<BR>二、非多重混合纹理实现地表(既用图素方法够成)<BR>三、碰撞检测<BR>四、室内外场景结合 
<P></P>
<P><BR>整个场景由64*64=4096个区域构成，每个区域管理4*4=16个屏幕大小场景，合计65535个屏幕场景。理论上可以更加大，目前的这样的场景数据约占用300M的磁盘空间(Zlib标准压缩后约12M空间)。不用多线程场景切换约为&lt;1秒。多线程时候，采用中等优先级别的线程就可以做到平滑切换了。</P>
<P>Class&nbsp;QuadTree{<BR>&nbsp;&nbsp;&nbsp;&nbsp;//用以剪裁判断,哪些区域的块需要渲染<BR>};</P>
<P>Class&nbsp;区域的块&nbsp;：public&nbsp;QuadTree{<BR>&nbsp;&nbsp;&nbsp;&nbsp;*m_p区域;//隶属于哪个区域<BR>&nbsp;&nbsp;&nbsp;&nbsp;int32&nbsp;*m_pDoodadsIndex;//哪些场景物件在这个区域的块中(索引)<BR>};</P>
<P>Class&nbsp;区域{<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;m_nX,&nbsp;m_nY;//该区域的x,y<BR>&nbsp;&nbsp;&nbsp;&nbsp;uint8*&nbsp;m_pPath;//路径障碍关系<BR>&nbsp;&nbsp;&nbsp;&nbsp;uint8*&nbsp;m_pGroundFlag;//贴图图素位置信息<BR>&nbsp;&nbsp;&nbsp;&nbsp;场景物件*&nbsp;m_pDoodads;<BR>&nbsp;&nbsp;&nbsp;&nbsp;区域块[4][4];<BR>&nbsp;&nbsp;&nbsp;&nbsp;QuadTree&nbsp;m_QuadTree;<BR>&nbsp;&nbsp;&nbsp;&nbsp;LoadData(){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--[[<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据m_nX,&nbsp;m_nY&nbsp;,从磁盘装载该区域的数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]<BR>&nbsp;&nbsp;&nbsp;&nbsp;};<BR>&nbsp;&nbsp;&nbsp;&nbsp;SetUpQuadTree(){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将装载好的数据分成区域块，放到QuadTree的中，每个区域块都是QuadTree的一个叶子<BR>&nbsp;&nbsp;&nbsp;&nbsp;};<BR>};</P>
<P>Class世界{<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;m_nX,m_nY;//管理区域的中心，即屏幕中心的块的x,y<BR>&nbsp;&nbsp;&nbsp;&nbsp;区域装载的缓冲[16];<BR>&nbsp;&nbsp;&nbsp;&nbsp;区域指针[3][3];<BR>&nbsp;&nbsp;&nbsp;&nbsp;Enter(x,y);//进入某个区域<BR>};</P>
<P>上面的结构应该不是很难理解，&nbsp;QuadTree部分只是剪裁渲染部分使用的，完全可以跳过。<BR>以下旨在介绍&nbsp;区域装载缓冲&nbsp;的运用</P>
<P>*--*--*--*<BR>|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|<BR>*--*--*--*<BR>|&nbsp;&nbsp;&nbsp;&nbsp;|@|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<BR>*--*--*--*<BR>|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<BR>*--*--*--*</P>
<P>@是现在Enter(x,y)进入的区域，我们需要将其周围的那些块都装载到内存来，并进行设备初始化包括网格贴图模型。(注意装载不是说一定要对其进行渲染。是否渲染是由QuadTree或者其他剪裁方法来完成的)<BR>Enter(x,y)<BR>{<BR>&nbsp;&nbsp;m_nX&nbsp;=&nbsp;x;&nbsp;m_nY&nbsp;=&nbsp;y;<BR>&nbsp;&nbsp;For(int&nbsp;i=0;i&lt;3;i++)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For(int&nbsp;j=0;j&lt;3;j++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;区域指针[i][j]&nbsp;=&nbsp;_Load(x-1+i,y-1+j);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>}</P>
<P>Load(x,&nbsp;y)<BR>{<BR>&nbsp;&nbsp;//首先判断x,y是否合法(x,y&lt;0,x,y&gt;=64),如果不合法,return&nbsp;NULL.<BR>&nbsp;&nbsp;Int&nbsp;nNULL&nbsp;=&nbsp;16;//需要找一块没有使用或者不需要使用的缓冲区来装载该区域<BR>&nbsp;&nbsp;for(int&nbsp;i=0;&nbsp;i&lt;16;i++)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(区域缓冲[i]&nbsp;!=&nbsp;NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(区域缓冲[i].m_x&nbsp;==&nbsp;x&nbsp;&amp;&amp;&nbsp;区域缓冲[i].m_y&nbsp;==&nbsp;y)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//原来已经装载过这个区域了，返回就好<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//return&nbsp;区域缓冲[i];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&lt;&nbsp;nNULL)&nbsp;nNULL=i;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;if(nNULL&nbsp;==&nbsp;16)<BR>&nbsp;&nbsp;{//所有的缓冲都被使用了<BR>&nbsp;&nbsp;&nbsp;//用离本区域最远的一块缓冲将其来装载<BR>&nbsp;&nbsp;&nbsp;//最远意味着该区域短时间内用不上<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;m,&nbsp;n&nbsp;=&nbsp;0,&nbsp;k&nbsp;=&nbsp;0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i=0;&nbsp;i&lt;16;&nbsp;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;=&nbsp;abs(区域缓冲[i].m_nX-m_nX)&nbsp;+&nbsp;abs(区域缓冲[i].m_nY-m_nY);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(m&gt;n){n&nbsp;=&nbsp;m;k=i;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;//找到了,将这个最远的区域删除掉<BR>&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;区域缓冲[k];&nbsp;区域缓冲[k]=NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;nNULL&nbsp;=&nbsp;k;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;//好了。现在有空位缓冲装载这个区域了<BR>&nbsp;&nbsp;区域缓冲[nNULL]&nbsp;=&nbsp;new&nbsp;区域(x,&nbsp;y);<BR>&nbsp;&nbsp;{//用多线程装载<BR>&nbsp;&nbsp;&nbsp;&nbsp;LoadThreadManang(区域缓冲[nNULL]);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;{//不用多线程<BR>&nbsp;&nbsp;&nbsp;&nbsp;区域缓冲[nNULL].Load();//装载该区域的数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;区域缓冲[nNULL].InitDeviceObject();<BR>&nbsp;&nbsp;}<BR>}</P></div>]]></description>
	    <author><![CDATA[成都游戏学院杜文权老师的博客]]></author>
	    <comments>http://duwenquanoo.blog.163.com/blog/static/70265665200831274751503</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://duwenquanoo.blog.163.com/blog/static/70265665200831274751503</guid>
    <pubDate>Sat, 12 Apr 2008 19:47:51 +0800</pubDate>
    <dcterms:modified>2008-04-12T19:47:51+08:00</dcterms:modified>
  </item>    
 </channel>
</rss>