XNA Kick Start

前言

 

       很久以前,翻译了《Managed DirectX9 Kick Start》,在过去的几年中,继续自学,虽然仍未达到自己所希望的目标,不过对托管DirectX以及实时渲染技术已稍有研究。不敢妄谈游戏引擎,但已能实现一些小把戏,以自娱。学习中深感国内资料的匮乏,故凡遇所喜之外文,则边学边翻,期望对有相同喜好之人有所帮助。《Managed DirectX9 Kick Start》是带领我进入实时渲染技术的入门书,由MDX的设计者所编写,全书浅显易懂,又不乏专家级的指导。如今XNA已发布,可惜资料尚少,为了能帮助爱好者入门和学习,希望能在前人的肩膀上,自己编写一份关于XNA的学习资料。

       本教程假设你已经熟悉C#语法,Visual Studio.net 2005开发环境,以及简单WinForm程序开发基础。其中第一条是必须的,贸然学习图形技术,只会让你半途而废。这是一份专注于XNA中图形技术的教程,主要讨论3D图形设计;编程语言语法基础,配置开发环境,通用程序开发技术,以及网络通信都不在本教程讨论范围之内。我将假设你从来没有接触过计算机图形技术,从最基础的内容开始讲解,除了解释API的用法之外,还会附带在API之后的图形学原理和算法。

       此外,为了确保你能运行XNA程序,应该安装以下硬件和软件:

硬件:一块支持Shader Model 2.0的显卡,如果你不知道Shader Model是什么,那么需要保证你的显卡是Nvidia Geforce FX或更高级别的显卡,以及ATI Radeon 9XXX系列或更高级别的显卡。

软件:WindowsXP wih SP2或更高的操作系统,最新版本的DirecxtX SDKVisual C# 2005 ExpressXNA Game Studio ExpressXna Framework)。

       鉴于本人愚钝,错误总是难免的,如果发现了,请及时纠正(clayman_joe@yahoo.com.cn)。

       阅读本资料,说明你已经接受了如下条件:为了保证我的权益,请勿转载,勿把本文用于任何商业用途。小小要求,仅此而已,不希望我免费提供的东西再被人恶意剽窃。所有文章将不定期在本人bloghttp://blog.csdn.net/soilwork/)和中国XNA开发网(http://www.xnadev.cn/)更新。如有需要,我会在每个章节结束之后提供pdf文档。

 

 

第一章 敲开计算机图形的大门

  本文版权归我所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。
由于本人水平有限,难免出错,欢迎大家和我交流。
作者:clayman
Blog:
http://blog.csdn.net/soilwork
clayman_joe@yahoo.com.cn 
 

 

       这一章,我将带领你学习最基本的基础知识,不要急,我们将从最下面一块积木开始,最终搭建出一个完整的城堡。

 

    如果你希望深入学习一门技术,那么先了解这门技术的来龙去脉,将大有帮助。好了,带上火把和地图(猎枪??不不,我们不需要它),让我们先来进行一点考古工作。

 

XNA的历史

       切始于20021220号,随着DirectX 9的发布,SDK中加入了Managed DirectX 1.0。顾名思义,Managed DirectX.net平台上的DirectX,它封装了DX中的大部分功能,几乎实现了函数的一一对应,以便开发者在.net平台上编写3D程序。当然,如果你还要深究,就会发现在开发DirectX 8.1的后期,有一个被称为DirectX for Visual Basic的项目,当.net runtime的第一个beta版本出现后,这个项目变为了DirectX.net,它就是Managed DirectX的雏形。

       Managed DirectX早期的开发过程中,当移植完了所有的核心API后,开发者发现它的性能只能达到原来C++代码的40%,于是接下来的几个月中,ms的程序员们进行了大量工作来解决所有性能瓶颈问题,最终发行版本的性能已经达到了C++代码的90%甚至更高。

       接下来,进入了.net 2.0时代,在200510月的DirectX SDK中,加入了Managed DirectX 2.0的第一个beta版本,除了把API升级到.net 2.0以外,这个版本的MDX还在性能和易用性上有了提高。作为beta1来说,这个版本的MDX有很多Bug,虽然在之后的sdk中,消除了大部分Bug,但却一直停留在beta版本,也没有任何正式的文档。接下来的几个月,再也没有了关于MDX2.0的消息,MDX团队成员的blog也停止了更新。这是一段黑暗的时期,传说东方的天空出现了阴影,一时谣言四起(指环王???-_-,有人说ms要完全放弃这个项目,也有人说ms要用另一个项目来代替它。

       终于,在2006814号的Gamefest 2006上,ms宣布了XNA。其实在更早的时候,就有了一些关于XNA的消息,但ms一直遮遮掩掩,谁也说不准它到底是什么。至此,谜底终于解开,XNA是基于.net的专用于游戏开发的API,可以同时在windowsxbox360上运行。好奇的考古学者总是想弄清每一个名字是什么意思,XNA,听起来和DNA差不多,有什么特殊含义呢?很不幸,msxna就是xna,并没有什么特殊含义,也不是缩写。不过民间的传闻却说X代表ms的图形技术(DirectX?),N代表下一代(Next?),A代表构架(architecture?),所以XNA是“下一代图形构架”的含义。好了,你可能有些迷糊了,说了半天这个XNA究竟和MDX 2.0有什么关系呢?简单的说XNA包含了MDX,仔细观察之后,你就会发现Microsoft.Xna.Framework.Graphics中大部分函数都来自于MDX 2.0

       200612月的DirectX SDK中,移除了所有关于Managed DirectX 2.0的内容,宣告XNA时代的正式来临。当然,至于Managed DirectX 1.0还将长期保留在SDK中,但不再进行更新,只会有一些错误修正。

       好了,考古工作到此结束,拍掉你身上的泥土,回到现代,来看看XNA究竟是什么。

 

近距离观察XNA

       来,拿出箱子里的显微镜,让我们看看XNA究竟是个什么东西。

          上面说过,XNA是基于.net的专用于游戏开发的API。专用于游戏开发意味着什么呢?它表示XNA不仅仅是一套图形函数库。打开XNA的帮助文档可以看到,名称称空间分为了6大部分:

 

Framework:这里是最基本的API,包含了数学库,游戏框架以及一些其他相关的类。其中最重要的就是Game类。如果你有DXMDX经验的话,就知道SDK中提供了一个名为sampler framework的库,用来搭建基本的游戏框架,包括游戏循环(game loop),资源管理,图形设备管理等等。这些工作是你编写任何一个DirectX游戏都需要实现的基础设施。即使如此,要使用sampler framework搭建一个DirectX程序还是需要编写一定的代码,因此,XNA把这些需要不停重复的东西打包为了一个类—Game,大大减小了开发者入门的难度。作为一个中立的作者,我将告诉你Game类并不是万能的。因为进行了高度封装,因此程序的可扩展性,可控性受到限制,如果你将要编写很大型的游戏,需要获得更多控制权,或者需要用不同的算法,那么实现你自己的Game也许是更好的选择。(仔细研究sampler framework的源代码,将让你对Game类的实现有更多了解。)嘿,不要被窗外跑过的那个亡灵吸引了你的注意力,注意,我并没有说Game不好,实际上,很多情况下这个“智能”的Game已经完全能满足我们的需求。

 

Framework.Audio显然,无论你想制造噪音还是演奏优美的音乐,你所要的都在这里了。

 

Framework.ContentConent,内容?什么是内容?简单的说内容就是资源,包括模型,纹理,Effect文件等等。记得我前一部分我说过Framework.Graphics名称空间中包含了MDX中的大部分函数吗?那么遗失的小步分函数是什么呢?这些消失的函数大都位于MDX中的Microsoft.DirectX.DirectD3DX名称空间,大部分是用来把资源加载到程序中的。看到这里你因该有些线索了,这个名称空间下的类都是关于资源管理的,包括加载资源,在资源的生命期对资源进行管理。说到这里就不能不提到Content Pipeline这个词了,你可能已经听说过,它所指的就是这样一系列功能。这里你可能会问Content Pipeline和原来的DirectD3DX有什么区别呢?对于DirectD3DX来说,它所负责的任务只有一个,就是在运行时把资源加载到程序中。而Content Pipeline就不一样了,它对资源的管理分为预处理和运行时管理两部分。所谓的预处理指的是Content Pipeline在程序编译时就将对资源进行处理。比如它将把所有模型文件,图片文件等编译为二进制格式的.xnb文件,在这种特殊的文件中,已经对原来的数据进行了优化和压缩,因此,程序在加载和使用这些资源时将获得更好的性能。当然,如果你需要为资源添加一些特殊的数据,也应该在这个阶段完成,比如计算并添加顶点的法线信息。而运行时的管理则包括资源的加载,在生命期间的管理,以及销毁。在没有Content Pipeline的时代里,资源整个生命期的管理都需要开发者编写大量代码来控制,而Content pipline大大简化了这个过程。为了再一次表明我的诚实和中立性,我还将告诉你一些额外的内容。实际上,Content pipline是整个XNA Framework中争议最大的部分。首先,最大的一点就是Content pipline加载资源的方式,所有资源必须经过预处理才能加载到程序中,你无法直接把自己喜欢的bmp格式的暗夜精灵图片加载到程序中作为背景,无论是艺术家为游戏添加素材,还是玩家制作mod都将变得很困难(不,不要相信那个邪恶的巫师,大部分人的电脑上都不会安装VS.net,更不要说xna frameworkContent pipline了)。其次,Content pipline的可控性同样有限,你很难选择其它的资源管理策略。当然,这里的忠告和前面一样,不要轻视Content pipline,作为XNA中的重要技术之一,它同样相当强大,而且目前我们所用的只是1.0版,在以后的版本中可能还会对此进行改进。

 

Framework.Graphics:哦,让人着迷的东西都在这里了,它是整个框架中最有魔力的地方,也是核心部分。你可以用XNA绘制2D3D图形,它支持DirectX 9.0c 的所有特性(据隐士谷中的寓言者说,未来的XNA将继续升级到DirectX 10,会吗?)。哦,心急的地精们不要跳,我将用后面大部分的内容来逐步介绍他们,现在还不到时候。

 

Framework.Input:我已经看到你的指头在跳舞了,是的,处理用户输入的东西都在这里了,键盘,手柄,游戏杆一个都不能少。

 

Framework.Storage这里的函数主要用来处理读取和写入文件等。

~~~~~~~~~~未完待续~~~~~~~~~~~~~~

 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值