第五章涉及到3D编程,建议先看一下从网上收集的XNA中的HLSL简单应用,附源代码),然后还有从http://creators.xna.com/网站下载的Shader教程:
原文地址。源代码下载:DeferredLightingXNA4.rar。
感谢网友roujiao将这个HLSL教程编译成了电子书,HLSL.chm下载。
至此shader的基本实现方法已经告一段落了,想进一步学习,强烈推荐Nvidia网站,把http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html上的shader都弄懂了,你就是高手了。
学习Shader编程的经典图书系列,2002年出版,不过好像太老了,里面的代码都是用汇编实现的。 电子书下载 ,英文版,pdf格式,10.5MB。
学习Shader编程的经典图书系列,2004年出版。电子书下载(英文版,pdf格式,6.8MB),C++源代码下载(38MB)。主要内容有:
学习Shader编程的经典图书系列,2004年出版。电子书下载(英文版,pdf格式,15.3MB),C++源代码下载(187MB)。主要内容有:
学习Shader编程的经典图书系列,2004年出版。电子书下载(英文版,pdf格式,30.6MB)。
ShaderX系列目前已出到ShaderX8,名称已变为GPU Pro,上述电子书和源码的来源地址为http://tog.acm.org/resources/shaderx/
学习Shader编程的经典图书系列,2005年出版。电子书下载(英文版,chm格式,14.4MB)。
学习Shader编程的经典图书系列,2007年出版。电子书下载(英文版,chm格式,26.2MB)。
作者:半山工作室的康玉之,发表于2009年9月,电子书下载(简体中文版,3MB)。应该去看看这篇文章的前言,真知灼见,现在中国搞基础研究的太少,比起外国,在图形学方面我们落后太多了。
电子书下载 ,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引擎的0.3版本中需要实现高级地形、水面,而代码主要参考了http://www.riemers.net网站上的3D系列教程4,所以事先进行了翻译。3D系列共有4个教程,分别是简单地形,一个简单的3D空战游戏,HLSL,高级地形。
2009年翻译完成了《XNA 3.0 Game Programming Recipes》,下面的工作就是将所学的知识整合起来,也就是制作一个游戏引擎,第一步是——给引擎起一个好听的名字,因为儿子叫范思腾(外公起的,来自于荷兰三剑客之范巴斯滕,虽然我喜欢的不是足球而是篮球,但叫范乔丹实在不像样),所以取个谐音就叫StunEngine吧,Stun的英文原意是“使震惊(或惊愕、目瞪口呆)”,还不错。
第一阶段完成了2D用户界面,并用这个简陋的引擎将《Professional XNA Game Programming》中第一个游戏XNA Pong重做了一遍。源代码StunEngine0.1.rar(2009年11月20日),注意此引擎用的是XGS3.1,其中使用的字体是“微软雅黑”,如果你的机器没有安装这个字体会出错,请将源代码中的两个SpriteFont文件中的字体改为安全的“宋体”即可解决,教程会陆续放出。
StunEngine0.2源代码下载 (2009年12月2日)
Sample02演示了基本地形、天空盒、fps相机、free相机和相机跟随地形的移动。
Sample03演示了基本地形,天空球,层次动画模型以及模型跟随地形旋转的效果。
StunEngine0.3源代码下载 (2010年5月11日更新)
Sample04主要演示了水面的反射和折射的实现。
StunEngine0.4源代码下载 (32MB,2010年6月30日更新)注意:必须先生成TestGame项目创建引擎的dll文件,而后才能使用Samples项目打开示例,否则会提示找不到对引擎的引用。
Sample05主要演示了后期处理和将XNA程序嵌入WinForm。
源代码StunEngine0.5.zip下载(51MB,2011年5月20日更新)
已知问题
终于可以干回老本行了,下一阶段的主要任务是想自己编写物理引擎,所以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,截止到2011年4月9日,最新版本为3.2,从代码中可以看出,它主要参考了Box2D(http://www.box2d.org/);flash物理引擎主要参考APE(http://www.cove.org/ape/),照道理应该参考Box2DFlashAS3(http://box2dflash.sourceforge.net/)才是,但ape足够简单,打好基础吧。
物理引擎开发,C++代码,2007年出版。 电子书下载 ,英文版,pdf格式,6.9MB。
2004年出版。 电子书下载 ,中文版,pdf格式,22.4MB。
2003年出版。 电子书下载 ,英文版,pdf格式,7.3MB。
2010年清华大学出版社。即《Real-Time Collision Detection》的中译本,我买了实体书,就我目前的水平来看,碰撞检测看这本书就够了。
第12章键盘控制请见Content目录下Settings目录中的GameSettings.xml文件,你也可以自己改动
动画模型的相关知识,C++代码,2009年出版。电子书下载,英文版,pdf格式,14.6MB。
电子书下载 ,pdf格式,4.3MB。写的东西挺实用的,但我不喜欢作者的编程风格。源代码下载(约20MB)。 (XNA3.0版本)
电子书下载 ,pdf格式,4.8MB。书写得不错,但代码缺少素材,也就没兴趣研究了。源代码下载地址http://xnaessentials.com/Downloads.aspx,源代码本站下载(780K)。注意:出于商业和带宽考虑,源码中不包含模型、纹理等素材,这些都在随书光盘中。
简体中文版电子书下载 ,pdf格式,6.4MB,由裴小星翻译,对应网址为http://www.cnblogs.com/peixiaoxing。对初学者这本书还是很好的,说得也很详尽。4.0版本源代码下载(约47MB)。
电子书下载 ,pdf格式,14.1MB,本书的作者James Silva制作的《洗碗工:死亡武士》曾在2007年微软XNA游戏大赛上获过奖。本书只涉及2D编程,如果你想编写一个类似于马里奥的平台游戏,这本书是很有帮助的,书中还实现了一个地图编辑器和2D角色编辑器。源代码下载(237MB,代码只支持XBox360手柄控制,键盘控制代码需要自己添加)
电子书 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)
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.xnadev.cn/(此网站已过期!)组织翻译的 XNA Game Studio Express Beta2帮助文件 而来,我只是添加了一点XNA3.0新的东西。
关于微软帮助文件的一个笑话:一位驾驶员正开一架单引擎的小飞机,载着几位高层管理人员飞往西雅图机场, 可是空中布满浓雾,能见度不到10英尺,而且机上的仪表也坏了。他只好盘旋寻找地标。差不多过了一个小时,燃油眼看就要耗尽,机上乘客紧张万分。透过浓雾的间隙,驾驶员终于看到一座高楼,在那儿的五楼还有一个人在孤零零的埋头工作。
驾驶员飞近大楼,放下窗玻璃,冲着那人高喊:“喂!我在什么地方啊?”孤单的职员回答道:“你在飞机里。”飞行员升起窗玻璃,做了个275度转弯,紧跟着一个 漂亮的盲着陆动作,停在了五英里外的机场跑道上。也就在这一刻,飞机引擎烧尽最后一滴燃油停止了转动。
机上的乘客觉得驾驶员神了。有一个问他怎么知道的。“很简单,”驾驶员回答 道。“他给我的回答百分之百正确,但丝毫用处也没有。因此那里一定是微软的技术支持部。从那里到机场距离5英里,方位87度。还有问题吗?”
有意思!的确,在翻译xna3.0帮助文件的过程中也有这个感觉,要想真正弄懂还是要看源代码的注释,不过是英文的了。
此示例展示如何管理精灵块,精灵动画,是否可见和虚拟化二维相机的数据。源代码下载
这个示例实现了以下功能:可以支持不同材质的多个模型,可以支持多个点光源,可以支持每个材质的环境光、漫反射光、镜面高光和纹理属性,可以支持每个光源的颜色、强度和衰减,支持Phong反射。源代码下载
本示例展示了如何使用XNA框架的内容管道处理和绘制一个蒙皮动画模型。源代码下载
这个示例展示了如何从一个单向光源实现一个基本的阴影映射,而阴影贴图的视场和投影可以匹配相机的视锥体。源代码下载
这个示例展示如何有效率地绘制相同模型的许多副本,使用GPU instancing技术减少重复绘制调用的开销。
本示例介绍了粒子系统的原理,展示了如何SpriteBatch使用粒子效果,包含两个粒子效果:爆炸和烟雾。源代码下载
本示例展示了如何使用XNA框架的GraphicsDevice在WinForms程序中显示3D图形。源代码下载
本示例展示了如何通过动态运行Content Pipeline导入器和处理器在运行时导入任意模型,你无需事先生成内容。源代码下载
本示例展示了如何判断玩家的光标是否在一个物体上,如何找到物体的屏幕坐标。源代码下载
本示例展示了XNA框架内置的effect(BasicEffect,SkinnedEffect,EnvironmentMapEffect,DualTextureEffect和AlphaTestEffect)和SpriteBatch(SpriteEffect)使用的默认shader的源代码。源代码下载
学习XNA编程的主要目的是想自己做一个物理引擎,或者说一个虚拟物理实验室帮助物理教学。这一点上金华科公司的仿真物理实验室做的相当好,我的基本构想是以这个软件为借鉴做成3D版的,事实上我也知道很多情况下3D的反而影响观察效果,权当练练手吧。
首先要解决的问题就是如何实现用户界面。因为XNA主要服务于游戏设计,而在游戏中通常都是自己实现用户界面的,想要通过winform使用标准的控件不是那么容易,参考了这篇文章(http://www.codeplex.com/XNACommunity/Wiki/View.aspx?title=XNAEditorEnglish&referringTitle=XNAEditor)并翻译了一下,源代码下载
基本框架搭完后,下面就要开始艰苦卓绝的物理引擎编写过程了,在网上找到了这篇系列文章,原文地址http://innovativegames.net/blog/category/game-engine-tutorial/,自己翻译一下作为知识储备。
翻译完此篇文章有点失望,本来以为会教你如何实现一个物理系统呢,原来只是引用现成的JigLibX物理引擎,但看了JigLibX的源代码才发现它实在是太复杂了,自己没几个月时间可能是无法理解的,现在想清楚了,知道如何使用就好,不要自己从头发明轮子,有兴趣的可以研究一下JigLibX。源代码下载
在这篇文章中的留言中也有网友提问:为什么xna已经提供了一个很好的串行化工具(可见xna3.0帮助文件中的如何串行化数据),你还要自己实现它呢?作者Sean回答:因为这是一个教程,自己实现它能更好地了解工作原理,这个道理与XNA Game Engine教程系列1-Component和GameScreen中自己实现component类是一样的,其实xna已经提供了GameComponent,DrawableGameComponent,GameComponentCollection类,诸如鼠标类,相机类,水面类,地形类都可以从这些类继承,在《Professional.XNA.Game.Programming》一书的第四章俄罗斯方块游戏中就使用了xna的组件类。2009年3月4日,作者发布了更新了的组件类代码,为串行化和编辑器做好了准备。源代码下载
作者至少也得放一张编辑器的界面截图吧,不然我翻得云里雾里,看得也云里雾里。
建议先阅读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页说得更清楚,下载电子书(扫描质量不高,建议去买一本放在案头,数学基础很重要),此书还详细分析三种方式的优缺点。
对从winform编程一路走来的程序员(比如我)来说这篇文章前半部分写得有点啰嗦。而后半部分他是使用Xna Creators Club网站上的winform series1中的方法实现的,根据我前面翻译的文章,这种方式还不是很完美,因为作者没有放出源码,不知具体效果如何。
2009初研究了一个月,想通过XNA实现3维空间中的电场线,这在教学中还是很有用的,书本和黑板上只能演示2维平面中的电场线,通过语言很难在学生脑海中形成一个正确的物理图景。
首先还是网上搜索,看看被人是如何实现的,从http://download.csdn.net/source/852536下载了“二维点电荷形成的静电场电场线绘制”源代码,是河海大学电气工程学院一位大学生的毕业论文,编程语言为VB,主要的算法就是借鉴他的。
从http://www.physics-software.com/software.html下载了Electric Field(安装文件),不仅能绘制电场线,还能绘制等势面,可惜没有源代码。
从http://www.electrostatics3d.com/找到了Equipotential Surfaces 3.1,能绘制3维空间中的电场线和等势面,可惜无法下载。
最后,推荐网站http://www.falstad.com/mathphysics.html,使用java实现了电场和磁场的3维模拟,还提供源码,有时间好好研究一下。
我的成果截图如下,但算法上有点小问题,电荷在某些特殊位置程序会死循环,但此软件的亮点是能用鼠标拖动电荷,电场线也能动态地发生变化。
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游戏,游戏失败时方块的飞散效果还没有实现,欢迎大家改进。
所见过的最详细的水面渲染教程,来源网站http://habibs.wordpress.com,pdf文件下载
2006 - 2024,推荐分辨率 1024*768 以上,推荐浏览器 Chrome、Edge 等现代浏览器,截止 2021 年 12 月 5 日的访问次数:1872 万 9823。 站长邮箱