Professional XNA Game Programming学习笔记

相关源代码下载

Shader教程系列

XNA Shader编程教程1-环境光照
XNA Shader编程教程2-漫反射光照
简单的游戏漫反射够用了,开始涉及基本数学原理了。源代码Tutorial2_Diffuse.rar下载。
XNA Shader编程教程3-镜面反射光照
可以模拟光滑、有光泽或磨光的表面。源代码Tutorial3_Specular.rar下载。
XNA Shader编程教程3.1-纹理
觉得原文的教程有点跳跃,所以在教程3和4之间整理了一下使用纹理的基本方法。源代码Tutorial31_Texture.rar下载。
XNA Shader编程教程3.2-逐顶点和逐像素光照
解释了逐顶点和逐像素光照的区别,其他源代码好像都是使用逐像素光照模型。源代码Tutorial3.2_PerPixelLight.rar下载。
XNA Shader编程教程3.3-多纹理
这个例子比较简单。源代码Tutorial3.3_MultiTexture.rar下载。
XNA Shaders 编程教程4-法线映射
使用法线映射可以让少量多边形构成的模型看起来具有丰富的细节,而视觉效果大量多边形构成的几乎一样,现今很多游戏都使用了法线映射。源代码Tutorial4_NormalMapping.zip下载。
XNA Shaders 编程系列5-变形
建议你可以试着用键盘控制物体沿xyz方向的变形。源代码Tutorial5_Deform.rar下载。
XNA Shader编程教程6-Shader演示
在前几个教程的基础上实现了天空球和水面。源代码Tutorial6_ShaderDemo.rar下载。
XNA Shader编程教程7-卡通渲染
这是一项将3D物体转为类似2D手绘的卡通风格的技术。源代码Tutorial7_ToonShader.rar下载。
XNA Shader编程教程8-光泽贴图(Gloss Map)
通过光泽贴图可以控制模型不同部位的镜面反射强度。源代码Tutorial8_GlossMap.rar下载。
XNA Shader编程教程8.1-颜色,发光,凹凸和反射纹理贴图
这个例子来自于http://xna-uk.net/,原文地址(http://xna-uk.net/blogs/randomchaos/archive/2008/11/24/basic-hlsl-lighting-techniques-episode-3-colour-glow-bump-and-reflective-texture-maps.aspx)。使用了四种技术:颜色贴图,就是教程2的漫反射;发光贴图是新的,用一张额外的贴图控制漫反射强度,这个例子中表现出地球上的大城市的灯光效果;凹凸贴图,就是教程4的法线贴图,严格地说法线贴图只是凹凸贴图的一种,凹凸贴图还包含视差映射(Parallax Mapping)等;反射贴图就是教程8的光泽贴,通过一张额外的纹理控制模型不同部位的镜面反射强度,这个例子中让地球上的海面反射强度比陆地大。源代码GenericXNALightAndShadeIII.zip下载。
XNA Shader编程教程9-Post process波动效果
《Professional XNA Game Programming: For Xbox 360 and Windows》一书中用了一章的篇幅介绍了PostScreen Shader,有些地方把PostScreen翻译成离屏或后屏,我就保留英文了。这个shader的基本思路就是先将场景绘制到一张纹理中(这叫做Render To RenderTarget,渲染到渲染目标),想了解工作原理,请见3.8 将场景绘制到纹理,然后对这个纹理施加各种滤镜效果,熟悉Photoshop的人对滤镜肯定不陌生,原理不难,唯一的限制就是用什么算法和你的想象力了,《Professional XNA Game Programming》一书的后三个游戏都使用了PostScreen Shader让画面更漂亮。源代码Tutorial9_1_PostProcess.rar下载。
XNA Shader编程教程10-Post process图片反相
非常简单的一个算法,实现了反相的效果。这让我想起了《生化危机3》中当“追击者”出现时伴随着一声心脏跳动的声音,画面暂停并反相,表现出吃了一惊的效果。源代码Tutorial9_2_PostProcess.rar下载。
XNA Shader编程教程11-Post process图片灰度
使用两种不同的算法实现了图片灰度。源代码Tutorial9_3_PostProcess.rar下载。
XNA Shader编程教程12-Post process噪点扭曲
通过随机函数实现噪点效果。源代码Tutorial9_4_PostProcess.rar下载。
XNA Shader编程教程13-Alpha映射
通过一张Alpha贴图控制模型的透明程度。源代码Tutorial13_AlphaMapping.rar下载。
XNA Shader编程教程14-透射
此教程涉及了Framebuffer,BackBuffer,ZBuffer,DepthBuffer,StencilBuffer,我总结了一下,放在本文的最后部分。源代码Tutorial14_Transmittance.rar下载。
XNA Shader编程教程15-动态环境映射
这个教程有点难,我认为讲得也不够清晰,下次我会整理一个简单的反射、折射、动态反射例子的,还有源代码中可以使用X360手柄控制一些变量,我自己添加了键盘控制,用上下左右控制世界矩阵,用ADWS控制Du变量和C变量。源代码Tutorial15_DynamicEnvironmentMap.rar下载。
XNA Shader编程教程16-折射
只需使用HLSL的内置refract函数计算折射向量。源代码Tutorial16_Refraction.rar下载。
XNA Shader编程教程17-点光源和自阴影
相对于教程2中的单向光,点光源还要计算衰减,光照方程更加复杂。源代码Tutorial17_PointLight.rar下载。
XNA Shader编程教程18-多个点光源
在教程17的基础上,运算n次点光源光照方程然后叠加。源代码Tutorial18_PointLights.rar下载。
XNA Shader编程教程19-半球环境光照
相对于教程1中不变的全局环境光颜色,通过计算向上方向和法线方向的点乘获取不同的环境光颜色,更加真实。源代码Tutorial19_HemiAmbient.rar下载。
XNA Shader编程教程20 – 景深
首先应该看懂教程23-模糊,然后再看这个教程,景深效果的关键在于计算出当前像素是否处于焦点上,然后根据判断结果混合原始纹理和经过模糊的纹理。源代码Tutorial20_DepthOfField.rar下载。
XNA Shader编程教程21-过渡:淡入淡出
主要思路是将两个场景绘制到两个渲染目标中,并使用HLSL的内置lerp函数对两者进行插值。源代码Tutorial21_TransitionFade.rar下载。
XNA Shader编程教程22 – 过渡:左右揭开
在前一个教程基础上还使用了另一个HLSL内置函数smoothstep。源代码Tutorial22_TransitionCross.rar下载。
XNA Shader编程教程23 – 模糊
模糊的基本思路就是不从当前像素采样颜色,而是采样周边像素的颜色并取它们的平均值。源代码Tutorial23_Blur.rar下载。
XNA Shader编程教程24 – 发光
基本思路就是在shader中移除亮度低于临界值的颜色并施加模糊效果,这与 2.13 创建一个模糊(Blur),(发光)Glow Post-Processing Effect 中的Glow算法上还是有区别的。源代码Tutorial24_Bloom.rar下载。
毛发绘制(Fur Rendering)
基本思路就是绘制一些水平方向的切片,切片上的不透明部分作为毛发,道理与绘制一些靠得较近的点形成一条直线类似。源代码下载:FurRendering_1.zipFurRendering_2.zip

Deferred Rendering(延迟着色)

原文地址(http://www.catalinzima.com/tutorials/deferred-rendering-in-xna/)。源代码下载:DeferredLightingXNA4.rar

感谢网友roujiao将这个HLSL教程编译成了电子书,HLSL.chm下载。

至此shader的基本实现方法已经告一段落了,想进一步学习,强烈推荐Nvidia网站,把http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html上的shader都弄懂了,你就是高手了。

ShaderX

ShaderX:Direct3D ShaderX Vertex and PixelShader Tips and Tricks

学习Shader编程的经典图书系列,2002年出版,不过好像太老了,里面的代码都是用汇编实现的。 电子书下载 ,英文版,pdf格式,10.5MB。

ShaderX2Toturial

ShaderX2:Introductions&Tutorials with DirectX9

学习Shader编程的经典图书系列,2004年出版。电子书下载(英文版,pdf格式,6.8MB),C++源代码下载(38MB)。主要内容有:

  • DirectX HLSL语言介绍
  • vs_3_0和ps_3_0 Shader Models介绍
  • 使用Direct3D9的高级光照和着色
  • 不同的雾化效果
  • 阴影映射
  • Stencil ShadowVolumes理论
  • 使用RenderMonkey开发Shader
  • 创建对Shader友好的模型技巧
ShaderX2Tips

ShaderX2:Shader Programming Tips&Tricks with DirectX9

学习Shader编程的经典图书系列,2004年出版。电子书下载(英文版,pdf格式,15.3MB),C++源代码下载(187MB)。主要内容有:

  • 第一部分—几何体创建技巧Geometry Manipulation Tricks
  • 第二部分—渲染技术Rendering Techniques
  • 第三部分—Software Shaders和ShaderProgramming技巧
  • 第四部分—图像处理Image Space
  • 第五部分—阴影Shadows
  • 第六部分—3D引擎和工具设计3D Engineand Tools Design
ShaderX3

ShaderX3: Advanced Rendering with DirectX and OpenGL

学习Shader编程的经典图书系列,2004年出版。电子书下载(英文版,pdf格式,30.6MB)。

ShaderX系列目前已出到ShaderX8,名称已变为GPU Pro,上述电子书和源码的来源地址为http://tog.acm.org/resources/shaderx/

GpuGem2

GPU Gems 2: Programming Techniques for High-Performance Graphics and General-Purpose Computation

学习Shader编程的经典图书系列,2005年出版。电子书下载(英文版,chm格式,14.4MB)。

GpuGem3

GPU Gems 3

学习Shader编程的经典图书系列,2007年出版。电子书下载(英文版,chm格式,26.2MB)。

GPU编程与CG语言

作者:半山工作室的康玉之,发表于2009年9月,电子书下载(简体中文版,3MB)。应该去看看这篇文章的前言,真知灼见,现在中国搞基础研究的太少,比起外国,在图形学方面我们落后太多了。

实时计算机图形学(第3版)

Real-Time Rendering3rd

电子书下载(英文版,pdf格式,17MB)。

水面渲染教程

所见过的最详细的水面渲染教程,来源网站http://habibs.wordpress.com,pdf文件下载

  • 第一章 引言
  • 第二章 数学知识
  • 非常痛苦的一次翻译过程,数学太难,翻的时候手边备了两本书,一本《GPU精粹1》,一本《新概念物理教程光学》,有些大学里也没学过(也许学过全忘了),其中纳维-斯托克斯方程至今仍未被世人解出,甚至有没有解也不知道。不过看不懂不要紧,在后面的编程过程中遇到不懂的算法回过头来看看会有更好的理解。

  • 第三章 Shaders
  • 本章主要介绍如何使用shader,这是基本功,我就不翻译了,详见pdf英文原文。

  • 第四章 可用解决方案
  • 4.1 导言
  • 4.2 水的建模
  • 4.3 性能优化
  • 4.4 模拟水的方法
  • 4.5 反射

XNA 3.0 Game Programming Recipes

XNA 3.0 Game Programming Recipes

电子书下载 ,pdf格式,3.8MB。简体中文版电子书下载XNARecipes3.chm,更新时间:2009/11/18,1.8MB。word文件XNARecipes3.rar下载,5.3MB,更新时间:2009/11/18。

我认为这是最好的一本XNA教程(初学者直接看《Professional XNA Game Programming: For Xbox 360 and Windows》会很累的),思路也是我推崇的“提出问题→解决方案→工作原理→具体实现”,反观现在的物理教学,会做很难的物理题目的学生竟然不会用物理知识解决生活中的基本问题,就是因为不会学以致用,当然类似于物理先一个一个章节学习(或者说一个一个模块学习)然后再是综合题(制作一个游戏项目),这本书应该是模块学习,而要做一个游戏必须先学好一个个模块,但每个模块都学好不见得会做游戏,所以最后推荐如果条件成熟,自己做个游戏吧,在制作的过程中你会学到很多东西。此书的作者是Riemer Grootjans,如果你到网上搜一下,会发现很多网址或多或少都引用了他的文章。Riemer在比利时布鲁塞尔的Vrije大学获得了电子工程学的学位,几年前,他一直维护着一个网站(网址是http://www.riemers.net,感谢网友WyNfee的提示,这个网站如果不能访问请用代理服务器)介绍DirectX编程,当XNA在2006年12月发布后,他又将教程都移植到了XNA平台上,2007年7月,他获得了微软的XNA MVP称号。另外要研究Shader那么有一个人你必须知道:Wolfgang Engel。

游戏引擎StunEngine

sample01截图

2009年翻译完成了《XNA 3.0 Game Programming Recipes》,下面的工作就是将所学的知识整合起来,也就是制作一个游戏引擎,第一步是——给引擎起一个好听的名字,因为儿子叫范思腾(外公起的,来自于荷兰三剑客之范巴斯滕,虽然我喜欢的不是足球而是篮球,但叫范乔丹实在不像样),所以取个谐音就叫StunEngine吧,Stun的英文原意是“使震惊(或惊愕、目瞪口呆)”,还不错。

StunEngine0.1版

第一阶段完成了2D用户界面,并用这个简陋的引擎将《Professional XNA Game Programming》中第一个游戏XNA Pong重做了一遍。源代码StunEngine0.1.rar(2009年11月20日),注意此引擎用的是XGS3.1,其中使用的字体是“微软雅黑”,如果你的机器没有安装这个字体会出错,请将源代码中的两个SpriteFont文件中的字体改为安全的“宋体”即可解决,教程会陆续放出。

StunEngine0.2版

StunEngine0.2源代码下载 (2009年12月2日)

Sample02截图

Sample02演示了基本地形、天空盒、fps相机、free相机和相机跟随地形的移动。

Sample03截图

Sample03演示了基本地形,天空球,层次动画模型以及模型跟随地形旋转的效果。

StunEngine0.3版

  • UI控件中的多选框,单选框,列表框,下拉框,滑动条,滚动条。
  • 实现了材质类Material,Mesh类,自定义effect类。
  • 基本几何体矩形,立方体,球。
  • 高级地形,水面,海面。
  • billboard类。

StunEngine0.3源代码下载 (2010年5月11日更新)

Sample04截图

Sample04主要演示了水面的反射和折射的实现。

StunEngine0.4版

  • 阴影映射,已完成,但效果不理想,单元测试位于TestGame项目中的TestShadow方法中。
  • 法线映射,单元测试位于TestGame项目中的TestNormalMapping方法中,球体的切线算法有点小破绽,不过肉眼看不出来。
  • 蒙皮动画模型,完成度80%,还未实现动画混合,单元测试位于TestGame项目中的TestSkinningModel方法中。
  • Instance,完成度50%,类和effect已编写,还未在单元测试中实现,而且XNA4.0会添加一个DrawInstancedPrimitives方法可以更容易地实现Instance,所以会等XNA 4.0发布后才会加以改进。
  • 2D粒子系统,已完成。因为DirectX10之后已经取消了对PointSprite的支持,所以XNA4.0也取消了。而官网的3D粒子系统是基于PointSprite的,所以等官网发布新示例才会实现3D粒子系统,虽然也可以通过BillBoard实现,这在《XNA Recipes 3.0》有相关例子,但还是想知道是否有更好的做法。
  • 后期处理,完成度90%,主要是因为其中使用了ResolveTexture2D对象,而XNA4.0已经取消了对它的支持,待XNA4.0发布后会进行修改。推荐去http://shazzam-tool.com/publish.htm下载Shazzam - Shader Effect Editor,虽然它是用WPF实现的,但是其中的后期处理代码只要稍加修改就可以添加到本引擎中,目前引擎实现了6种效果,Shazzam实现了38种。

StunEngine0.4源代码下载 (32MB,2010年6月30日更新)注意:必须先生成TestGame项目创建引擎的dll文件,而后才能使用Samples项目打开示例,否则会提示找不到对引擎的引用。

Sample05主要演示了后期处理和将XNA程序嵌入WinForm。

Sample05

StunEngine0.5版

源代码StunEngine0.5.zip下载(51MB,2011年5月20日更新)

  • 取消了材质系统,用Effect封装类替代。
  • 实现了2D和3D粒子系统
  • 实现了画绘制3D线段的通用类
  • 改进了公告牌系统
  • 场景编辑器中实现了拾取
  • 暂时取消了阴影实现

已知问题

  • 引擎类在Debug模式工作正常,但编译成Release时报错,这是因为HLSL编译器在编译包含光照运算的Effect(比如说地形)时无法成功,原因是在Release模式下编译细节过程会有所不同,但找不到解决方法,事实上连官网上的ShipGame示例也会出现这种问题,Debug成功,Release失败。
  • Sample05后期处理还有些小问题,日后修复。

场景编辑器教程

XNA物理引擎的实现研究

终于可以干回老本行了,下一阶段的主要任务是想自己编写物理引擎,所以StunEngine中的阴影、动画模型就先放一放吧,做个物理课件好像用不着这些东西。

自己胃口挺大,想同时实现3D、2D和Flash上的物理引擎,倒不是自不量力,主要是因为实现原理都是相通的,初步研究下来可以齐头并进。3D引擎主要参考JigLibX(http://jiglibx.codeplex.com/),目前最新版本为JigLibX 0.3.1 Beta,发布于2009年4月,不过最近已经支持XNA 4.0了,好像作者自己又编写了一个新引擎 Jitter Physics(http://jitter-physics.com/phpBB3/index.php) ,据说比JigLibX快了100%,截止到2011年6月7日版本为0.1.5,源代码本地下载(13.6MB);2D引擎参考了Farseer Physics Engine(http://farseerphysics.codeplex.com/),截止到2011年4月9日,最新版本为3.2,从代码中可以看出,它主要参考了Box2D(http://www.box2d.org/);flash物理引擎主要参考APE(http://www.cove.org/ape/),照道理应该参考Box2DFlashAS3(http://box2dflash.sourceforge.net/)才是,但ape足够简单,打好基础吧。

游戏引擎开发

Game Physics Engine Development

物理引擎开发,C++代码,2007年出版。 电子书下载 ,英文版,pdf格式,6.9MB。

游戏开发物理学

游戏开发物理学

2004年出版。 电子书下载 ,中文版,pdf格式,22.4MB。

Physically-Based.Rendering

Physically-Based.Rendering

2003年出版。 电子书下载 ,英文版,pdf格式,7.3MB。

实时碰撞检测算法技术

实时碰撞检测算法技术

2010年清华大学出版社。即《Real-Time Collision Detection》的中译本,我买了实体书,就我目前的水平来看,碰撞检测看这本书就够了。

其他电子书

XNA Creator Guide

Microsoft XNA Game Studio Creator’s Guide(第2版)

电子书下载 ,pdf格式,4.3MB。写的东西挺实用的,但我不喜欢作者的编程风格。源代码下载(约20MB)。 (XNA3.0版本)

Xna Unleashed

XNA Unleashed 3.0

电子书下载 ,pdf格式,4.8MB。书写得不错,但代码缺少素材,也就没兴趣研究了。源代码下载地址http://xnaessentials.com/Downloads.aspx,源代码本站下载(780K)。注意:出于商业和带宽考虑,源码中不包含模型、纹理等素材,这些都在随书光盘中。

Learning XNA 4.0

Learning XNA 4.0

简体中文版电子书下载 ,pdf格式,6.4MB,由裴小星翻译,对应网址为http://www.cnblogs.com/peixiaoxing。对初学者这本书还是很好的,说得也很详尽。4.0版本源代码下载(约47MB)

BuildingXNA20

Building XNA 2. 0 Games A Practical Guide for Independent Game Development

电子书下载 ,pdf格式,14.1MB,本书的作者James Silva制作的《洗碗工:死亡武士》曾在2007年微软XNA游戏大赛上获过奖。本书只涉及2D编程,如果你想编写一个类似于马里奥的平台游戏,这本书是很有帮助的,书中还实现了一个地图编辑器和2D角色编辑器。源代码下载(237MB,代码只支持XBox360手柄控制,键盘控制代码需要自己添加)

ZombieSmashers

3D Graphics with XNA Game Studio 4.0

3D Graphics with XNA Game Studio 4.0

电子书 Sean James - 3D Graphics with XNA Game Studio 4.0.rar 下载(pdf格式,英文版,6.6MB),感谢网友WyNfee提供。

第一章包含5个示例:主要实现了自定了模型类和三种模式的相机:自由模式、轨迹球模式和跟踪模式。

第二章只有1个示例:创建了材质Material类,并实现了简单的逐像素镜面高光光照。

第三章有4个示例:首先分别实现了单独的点光源和聚光灯光源,然后实现3个单向光源,最后使用Deferred shadering技术实现了8个点光源。

第四章有3个示例:首先介绍投影纹理,以此为基础实现了阴影映射,最后一个示例对阴影进行模糊获得更好的效果。

第五章有5个示例:雾化,法线映射,天空球,立方贴图反射,水面反射。

第六章有3个示例:首先实现了BillBoard,并使用这个技术创建了树和云,然后在此基础上使用两张互相垂直的纹理表现树,使之效果更好,最后是粒子系统。

第七章包含4个示例:单纹理地形,多纹理地形,再施加一张噪点贴图增加细节,最后综合前面的几个示例展示了云、树、草、水面和地形。

第八章包含5个示例:介绍后期处理。

第九章包含7个示例:介绍模型动画:简单动画、关键帧动画、通过插值运算让移动更平滑、阶层模型动画、沿固定轨道的动画、蒙皮动画模型。因为网上下载的压缩包数据出错,最后一个示例无法修复运行,从字面的意思大概演示的是在蒙皮动画模型上附加其他模型,比如说在人的手上握一根棒,类似例子在XNA官网上也有下载。

源代码下载 (103MB)

Autodesk Softimage Mod Tool 7.5

ModTool

Softimage Mod Tool是建模软件Softimage的非商用免费版本,目前最新版本为7.5版,可以导出包括CryEngine、Unreal3、Source以及微软XNA的文件格式,下载地址为http://usa.autodesk.com/adsk/servlet/mform?id=12745430&siteID=123112,约456MB,在主菜单有专门针对XNA的选项,自己试用了一下,感觉还是挺方便的。自己整理了点教程,来自于它的帮助文件。

在网上也搜到了几个地址,想深入研究的话可以去看一下

  • 官方网站(http://www.softimage.com/products/modtool/learn.aspx)
  • http://www.noesisinteractive.com/xnabot/网站上的视频教程
  • 如何将XSI Mod Tool作为一个关卡编辑器(http://code-spot.co.za/2009/04/08/how-to-turn-xsi-mod-tool-into-a-level-editor-for-your-xna-games-updated-for-xna-30/)

Xna3.0帮助文件翻译

以下文章的翻译我是站在巨人的肩膀上的,由http://www.xnadev.cn/(此网站已过期!)组织翻译的 XNA Game Studio Express Beta2帮助文件 而来,我只是添加了一点XNA3.0新的东西。

关于微软帮助文件的一个笑话:一位驾驶员正开一架单引擎的小飞机,载着几位高层管理人员飞往西雅图机场, 可是空中布满浓雾,能见度不到10英尺,而且机上的仪表也坏了。他只好盘旋寻找地标。差不多过了一个小时,燃油眼看就要耗尽,机上乘客紧张万分。透过浓雾的间隙,驾驶员终于看到一座高楼,在那儿的五楼还有一个人在孤零零的埋头工作。

驾驶员飞近大楼,放下窗玻璃,冲着那人高喊:“喂!我在什么地方啊?”孤单的职员回答道:“你在飞机里。”飞行员升起窗玻璃,做了个275度转弯,紧跟着一个 漂亮的盲着陆动作,停在了五英里外的机场跑道上。也就在这一刻,飞机引擎烧尽最后一滴燃油停止了转动。

机上的乘客觉得驾驶员神了。有一个问他怎么知道的。“很简单,”驾驶员回答 道。“他给我的回答百分之百正确,但丝毫用处也没有。因此那里一定是微软的技术支持部。从那里到机场距离5英里,方位87度。还有问题吗?”

有意思!的确,在翻译xna3.0帮助文件的过程中也有这个感觉,要想真正弄懂还是要看源代码的注释,不过是英文的了。

Xna官方网站示例翻译

精灵平铺

精灵平铺(Tiled Sprites)

此示例展示如何管理精灵块,精灵动画,是否可见和虚拟化二维相机的数据。源代码下载

材质与光源

Shader系列4:材质和光源

这个示例实现了以下功能:可以支持不同材质的多个模型,可以支持多个点光源,可以支持每个材质的环境光、漫反射光、镜面高光和纹理属性,可以支持每个光源的颜色、强度和衰减,支持Phong反射。源代码下载

蒙皮动画

蒙皮动画模型(Skinned Model)

本示例展示了如何使用XNA框架的内容管道处理和绘制一个蒙皮动画模型。源代码下载

阴影映射

阴影映射(Shadow Mapping)

这个示例展示了如何从一个单向光源实现一个基本的阴影映射,而阴影贴图的视场和投影可以匹配相机的视锥体。源代码下载

InstancedModel

Instanced Model

这个示例展示如何有效率地绘制相同模型的许多副本,使用GPU instancing技术减少重复绘制调用的开销。

粒子系统

粒子系统Particle

本示例介绍了粒子系统的原理,展示了如何SpriteBatch使用粒子效果,包含两个粒子效果:爆炸和烟雾。源代码下载

WinForms Graphics Device示例

WinForms Graphics Device示例

本示例展示了如何使用XNA框架的GraphicsDevice在WinForms程序中显示3D图形。源代码下载

WinForms Content Loading示例

WinForms Content Loading示例

本示例展示了如何通过动态运行Content Pipeline导入器和处理器在运行时导入任意模型,你无需事先生成内容。源代码下载

拾取示例

拾取示例

本示例展示了如何判断玩家的光标是否在一个物体上,如何找到物体的屏幕坐标。源代码下载

StockEffect示例

StockEffect示例

本示例展示了XNA框架内置的effect(BasicEffect,SkinnedEffect,EnvironmentMapEffect,DualTextureEffect和AlphaTestEffect)和SpriteBatch(SpriteEffect)使用的默认shader的源代码。源代码下载

3D虚拟物理实验室

仿真物理实验室

学习XNA编程的主要目的是想自己做一个物理引擎,或者说一个虚拟物理实验室帮助物理教学。这一点上金华科公司的仿真物理实验室做的相当好,我的基本构想是以这个软件为借鉴做成3D版的,事实上我也知道很多情况下3D的反而影响观察效果,权当练练手吧。

WinForms和XNA

首先要解决的问题就是如何实现用户界面。因为XNA主要服务于游戏设计,而在游戏中通常都是自己实现用户界面的,想要通过winform使用标准的控件不是那么容易,参考了这篇文章(http://www.codeplex.com/XNACommunity/Wiki/View.aspx?title=XNAEditorEnglish&referringTitle=XNAEditor)并翻译了一下,源代码下载

XNA Game Engine教程系列1-Component和GameScreen

基本框架搭完后,下面就要开始艰苦卓绝的物理引擎编写过程了,在网上找到了这篇系列文章,原文地址http://innovativegames.net/blog/category/game-engine-tutorial/,自己翻译一下作为知识储备。

XNA Game Engine教程系列2- Engine, Content和Services

XNA Game Engine教程系列3 – Utilities,Camera和Actor

源代码下载

XNA Game Engine教程系列#4–DrawOrder

源代码下载

XNA Game Engine教程系列#5 – Physics

翻译完此篇文章有点失望,本来以为会教你如何实现一个物理系统呢,原来只是引用现成的JigLibX物理引擎,但看了JigLibX的源代码才发现它实在是太复杂了,自己没几个月时间可能是无法理解的,现在想清楚了,知道如何使用就好,不要自己从头发明轮子,有兴趣的可以研究一下JigLibX源代码下载

XNA Game Engine教程系列#6–Input

源代码下载

XNA Game Engine教程系列#7–第一人称相机

源代码下载

XNA Game Engine教程系列#8–基本地形

源代码下载

XNA Game Engine教程系列9:ComponentPredicate和Materials类

源代码下载

XNA Game Engine教程系列10:Post Processing

源代码下载

XNA Game Engine教程系列11:串行化

在这篇文章中的留言中也有网友提问:为什么xna已经提供了一个很好的串行化工具(可见xna3.0帮助文件中的如何串行化数据),你还要自己实现它呢?作者Sean回答:因为这是一个教程,自己实现它能更好地了解工作原理,这个道理与XNA Game Engine教程系列1-Component和GameScreen中自己实现component类是一样的,其实xna已经提供了GameComponent,DrawableGameComponent,GameComponentCollection类,诸如鼠标类,相机类,水面类,地形类都可以从这些类继承,在《Professional.XNA.Game.Programming》一书的第四章俄罗斯方块游戏中就使用了xna的组件类。2009年3月4日,作者发布了更新了的组件类代码,为串行化和编辑器做好了准备。源代码下载

XNA Game Engine教程系列12:设计编辑器

作者至少也得放一张编辑器的界面截图吧,不然我翻得云里雾里,看得也云里雾里。

拾取(Picking)

建议先阅读XNA帮助文件,已翻译好,可点击此处,如果你看过《XNA Game Studio Express Beta2帮助文件》,会发现老版本的XNA实现方法不一样,但里面的计算公式对理解原理还是很有帮助的,在新版本中,我猜大概微软将这个过程封装成了Viewport.Unproject()方法,代码简化了很多,齐.net博客上的这篇文章3D物体拾取及XNA实现(http://www.code84.com/u/matrixdom/Blog.aspx/t-31)也不错。然后看文中的代码,使用的是包围盒拾取,接着是Xna官方网站上的两个示例,一个使用包围盒拾取PickingSample.Zip,另一个使用多边形拾取TrianglePickingSample.Zip。最后看这篇文章提供的两个示例,一个是颜色拾取PixelPerfectPicking.rar,另一个是多边形拾取rayModelXNA3.zip。个人认为,普通应用包围盒拾取就够了。如果想真正弄懂原理,由翁云兵翻译的《3D游戏程序设计入门》中的第十五章可供参考,用的是C++代码。

旋转:矩阵,四元数和欧拉角向量;

其实《3D数学基础:图形与游戏开发》一书中P130至P173页说得更清楚,下载电子书(扫描质量不高,建议去买一本放在案头,数学基础很重要),此书还详细分析三种方式的优缺点。

XNA游戏编辑器教程1 :Form,Render Control

对从winform编程一路走来的程序员(比如我)来说这篇文章前半部分写得有点啰嗦。而后半部分他是使用Xna Creators Club网站上的winform series1中的方法实现的,根据我前面翻译的文章,这种方式还不是很完美,因为作者没有放出源码,不知具体效果如何。

3D空间中电场线的实现

2009初研究了一个月,想通过XNA实现3维空间中的电场线,这在教学中还是很有用的,书本和黑板上只能演示2维平面中的电场线,通过语言很难在学生脑海中形成一个正确的物理图景。

首先还是网上搜索,看看被人是如何实现的,从http://download.csdn.net/source/852536下载了“二维点电荷形成的静电场电场线绘制”源代码,是河海大学电气工程学院一位大学生的毕业论文,编程语言为VB,主要的算法就是借鉴他的。

二维点电荷形成的静电场电场线绘制

从http://www.physics-software.com/software.html下载了Electric Field(安装文件),不仅能绘制电场线,还能绘制等势面,可惜没有源代码。

Electric Field

从http://www.electrostatics3d.com/找到了Equipotential Surfaces 3.1,能绘制3维空间中的电场线和等势面,可惜无法下载。

Equipotential Surfaces 3.1

最后,推荐网站http://www.falstad.com/mathphysics.html,使用java实现了电场和磁场的3维模拟,还提供源码,有时间好好研究一下。

Java实现的电场线

我的成果截图如下,但算法上有点小问题,电荷在某些特殊位置程序会死循环,但此软件的亮点是能用鼠标拖动电荷,电场线也能动态地发生变化。

我的电场线

Blocker游戏

Blocker游戏

2008年12月翻译完《Professional.XNA.Game.Programming》之后,接下来的行动就是使用这本书介绍的游戏引擎制作一个自己的游戏,“纸上得来终觉浅,绝知此事要躬行。”,只有通过自己动手制作才会真正吃透书中的知识。这个游戏来自于《3D游戏编程入门经典》,清华大学出版社2006年翻译,Tom Miller著,他也是Managed DirectX API的设计师和首席开发人员,MDX取消后,他成为了XNA框架的架构师,书上的程序是用MDX编写的,我所做的只是借助于XNA游戏引擎把它移植到XNA平台上。以后会总结一下游戏设计思路。

实在是定不下心来写教程,放个源代码Bloker.rar吧,引擎主要参考了《Professional.XNA.Game.Programming》中的Xna Shooter游戏,游戏失败时方块的飞散效果还没有实现,欢迎大家改进。