一个简单的XNA3D游戏教程
- 格式:docx
- 大小:1.17 MB
- 文档页数:12
3D max 教程第一章用户界面1.1 用户界面当启动3ds max后,显示的主界面见图1。
1.图1.1初看起来,大量的菜单和图标着实令人不知从何处着手.但随着我们对界面各个部分的深入讨论,将可以通过实际操作逐步熟悉各个命令.1.1.1 界面的布局用户界面的每个部分都有固定的名称,在所有标准的3ds max 教材和参考资料中,这些名称都是统一的.视口(Viewports)3ds max用户界面的最大区域被分割成四个相等的矩形区域,称之为视口(Viewports)或者视图(Views)。
视口是主要工作区域,每个视口的左上角都有一个标签,启动3ds max后默认的四个视口的标签是Top(顶视口)、Front(前视口)、Left(左视口)和Perspective(透视视口)。
每个视口都包含垂直和水平线,这些线组成了3ds max的主栅格.主栅格包含黑色垂直线和黑色水平线,这两条线在三维空间的中心相交,交点的坐标是X=0、Y=0和Z=0。
其余栅格都为灰色显示.Top视口、Front视口和Left视口显示的场景没有透视效果,这就意味着在这些视口中同一方向的栅格线总是平行的,不能相交,参见图1.1。
Perspective视口类似于人的眼睛和摄像机观察时看到的效果,视口中的栅格线是可以相交的。
菜单栏(Menu Bar)用户界面的最上面是菜单栏(参见图1.1)。
菜单栏包含许多常见的菜单(例如File/Open和File/ Save等)和3ds max 独有的一些菜单(例如Rendering / Ram Player和Customize/ Preferences等)。
主工具栏(Main Toolbar)菜单栏下面是主工具栏(参见图1。
1)。
主工具栏中包含一些使用频率较高的工具,例如变换对象的工具、选择对象的工具和渲染工具等。
命令面板(Command Panels)用户界面的右边是命令面板(见图1。
2左图),它包含创建对象、处理几何体和创建动画需要的所有命令。
XNA游戏:手势触控在XNA游戏中使用到手势触控操作时,需要引入using Microsoft.Xna.Framework.Input.Touch;空间,在该空间下下面两个类在触控编程中会用到。
TouchLocation 用来保存某一个触摸点的状态信息。
TouchCollectionN 是保存了当前所有触控状态(TouchLocation)的集合。
当我们把一个指头在屏幕上操作,可能会有这样三种动作:按,移动,移开。
那么这三个操作在WP7的XNA里如何获取呢?我们就需要了解XNA里的TouchPanel和TouchCollection这两个类TouchCollection touchState= TouchPanel.GetState();Foreach(TouchLocation location in touchState){switch(location.State){case TouchLocationState.Pressed://按下……break;case TouchLocationState.Moved://移动……break;case TouchLocationState.Released://释放……break;}}TouchLocation :NNN StateN 触摸状态,包含4个状态NNNNNNNN > TouchLocationState.Pressed 表示屏幕被触摸时手指按下的一瞬间NNNNNNNN > TouchLocationState.Moved 表示手指按下后正在移动,经过测试可知,在手指按下的一瞬间State为Pressed ,在手指按下后抬起前这段时间内的状态均是MovedNNNNNNNN > TouchLocationState.Invalid 无效状态NNNNNNNN > TouchLocationState.Released 表示手指抬起的一瞬间NNN ID 表示当前触摸事件的ID,一个完成的触控事件的过程应该是“PressedN -> MovedN -> Released ”在这个过程中ID是一致的,用来在多点触摸时区分触摸的每个点。
SYJ教你制作3D游戏(1-5)(图片:Lite-C)本文由SYJ原创,如需转载,请注明作者。
在这个教程中,我们要用到的软件是3D gstudio A786,大家可以到官方网站下载该软件。
3D gstudio A786这款软件包含了Wed、Med和Sed,它们分别是关卡编辑器、模型编辑器和脚本编辑器。
关卡编辑器,顾名思义,就是制作游戏场景的地方,我们可以把它当做是3D gstudio A786的主要部分,因为它集合了一个非常重要的游戏发布向导;模型编辑器,即用于编辑角色动画,以及游戏场景中的各元素,比如桌子,椅子,地形等,编辑好之后置入关卡编辑器就形成了一个完整的三维场景;脚本编辑器,当然是写游戏脚本的地方,也就是编程,在3D gstudio A786中,我们需要用到的脚本语言是C-script的简化语言Lite-C,当然,有能力的开发者可以扩展C++。
我就简单介绍到这里,下面开始进入正题。
一个游戏通常由场景和角色构成,对于编程方面我们先不讨论。
我们先来学习如何建造最基本的3D模型。
3D模型的构建十分简单,大家不要抱着难学、学不会的心态来看教程。
打开Med模型编辑器,我们可以看到有四个视窗,其中右上方的视窗叫做3D 视窗,其它三个视窗叫做2D视窗,左上方的2D视窗表示俯视角度,下方两个2D视窗分别表示不同的平视角度,视窗可以自由移动、放大和缩小,且3D视窗可以旋转。
在做模型之前,我们先来简单设置一下工作环境。
点“文件”“参数设置”选“视频输出”,大家可以在这里根据自己的爱好设置编辑视图,我呢,习惯把“绘制原点”和“2D/3D网格”打勾,“栅格低=10”以及“栅格高=8”。
设置好之后点确定,这样看起来爽多了。
刚开始呢,我们先从最基本的模型学起,嗯……我们先来制作一个最简单的东西,比如说,教室里的一张椅子,该怎么做呢?点工具栏上的“立方体”,再点一下任意视图,比如俯视图吧。
这时,你会看到在四个视图中同时出现了一个实实在在的正方体,我们可以在2D视图中看到这个正方体的透视图,甚至是每个面,我们应该不难发现,所有的三维模型都是由三角形块面构成的。
3d技巧与方法一、了解3D的基本规则。
1.1 3D游戏是一种基于数字组合的彩票游戏。
它的基本规则就是从000 - 999这1000个数字当中选择一个作为自己的投注号码。
这就像是在一个大宝藏箱里挑选一颗最有可能中奖的珍珠一样,看似简单,实则不易。
1.2 每个数字在每次开奖中都有相同的可能性被选中,这就是所谓的“机会均等”。
就像一群人赛跑,不管你是强壮的还是瘦弱的,在起跑线上大家都有一样的机会夺冠。
所以可别小看任何一个数字,有时候那些不起眼的数字反而可能是中奖的关键。
二、选号技巧。
2.1 观察走势法。
2.2 数字组合法。
可以把数字分成不同的组,比如0 - 3一组,4 - 6一组,7 - 9一组。
然后根据自己的感觉或者一些经验来组合这些数字。
比如说你觉得这一期可能是小数字比较多,那你就可以从0 - 3这个组里多选择几个数字来组合。
这有点像做菜,你根据自己的口味把不同的食材搭配在一起,但是最后做出来的味道好不好,还得看运气。
2.3 特殊数字选择。
有些数字在人们心中有特殊的意义,像168(一路发)、520(我爱你)这样的数字。
很多人喜欢选择这样的数字,觉得它们能带来好运。
虽然这没有什么科学依据,但是在彩票这个充满希望和幻想的世界里,选择这样的数字也算是一种乐趣。
就像人们在生日的时候许愿一样,虽然不一定会实现,但心里总是充满了美好的期待。
三、投注方法。
3.1 倍投要谨慎。
倍投是一种增加中奖金额的投注方式,但是风险也很大。
这就像是在赌博,你可能一下子赢得盆满钵满,也可能输得一塌糊涂。
如果没有足够的资金和心理承受能力,千万不要轻易尝试倍投。
一旦运气不好,可能会让你陷入经济困境。
这就是所谓的“贪心不足蛇吞象”,彩票只是一种娱乐方式,要理性对待。
3.2 小额投注。
对于大多数人来说,小额投注是比较明智的选择。
每次投个几块钱,就当是买个希望,中了奖当然开心,没中奖也不会对自己的生活造成太大影响。
这就像每天出门买个小零食一样,图个乐子,不要把它当成一种获取财富的主要途径。
迈克·弗雷斯查尔著xna@/pages/XNABook.aspx第二章 进入二维世界在第一章中我们讲述了游戏创建和运行的基本知识,但是到目前为止,还没有进行实质性的工作。
坦白地讲,我们所做的只是显示出一个极其乏味的蓝屏而已。
不过我们每个人都喜欢蓝屏,难道不是吗(译者注:因为至少说明程序调试通过了)?本章我们将主要学习如何在这个蓝屏上显示图象。
就先从2D图像开始吧。
XNA完全可以创建一个完整的2D游戏。
但如果你想用XNA制作一个全3D游戏的话,你还是必须掌握用XNA在屏幕上显示2D图像的基本知识,尽管2D图像通常只用于显示菜单或游戏的状态栏。
好了,让我们开始吧。
创建一个新项目好,下面我们就向已经创建的游戏中添加一些东西。
启动Windows资源管理器,浏览存储“MyFirstGame”的目录,并将整个文件夹复制一个新的目录,将这个目录重命名为“Sprites”。
如下图所示:打开刚刚重命名为Sprites的文件夹,双击MyFirstGame.sln,这样就会启动Visual C# Express,在第一章里所创建的游戏的内容也会显示出来。
现在,打开Solution Explorer,右击项目MyFirstGame,将其重命名为Sprites。
右击解决方案“MyFirstGame”,将其重命名为“MySecondGame”。
再右击Game1.cs重命名为Sprites.cs。
下图中的对话框就会弹出:然后点击Yes按钮。
如果在Sprites.cs中查看代码,你会注意到,这个类现在称为Sprites,而不是Game1。
在Sprites.cs代码中右击名字空间MyFirstGame并且选择【Refactor】->【Rename…】,将其重命名为MySecondGame,并选择应用。
打开Program.cs时你会注意到,他已经正确地重命名了你的game类。
你已经有了一个新项目,下边我们就在屏幕上绘制一副2D图像。
XNA游戏引擎简介
garagegames公司推出基于XNA的游戏引擎TorqueX,Torque X是⼀个利⽤XNA技术开发的全新引擎.它使⽤C#开发并整合了许多Torque的特性.
相关引擎中,还有TorqueX 2D, ⽤于开发XNA 2D游戏的⼀款引擎.
介绍下这款3D引擎包含的功能:
1.世界编辑器
有超⼤地形(相当于魔兽世界地形⼤⼩)
⽆缝连接的室内和室外场景
声⾳和视频,图形
动态照明
强⼤的粒⼦系统:⽕,烟,爆炸
可扩展的着⾊器( GLSL / HLSL )
后处理景深折射辉光模糊⾊彩校正地形
2.资源
包含 fbx|.x|dts 格式模型
3.组件
在编辑器中,可以直接选择赋予对象
4.物理
刚体
车辆
布娃娃
破坏
粒⼦物理系统
关节
5.提供完全⾃定义的GUI组件
⼯具,容器和对话
透明度,动画
易于使⽤的图形⽤户界⾯⽂件
⽪肤的⽀持
⽀持东欧语⾔
本地化包⽀持
声⾳(包含3D⾳效)
6.你可以任意使⽤第三⽅解决⽅案等等.。
Xara3D 6.0教程(1)一、Xara3D 6.0软件特点老牌的3D 文字动画制作工具,和友丽的Cool3D 享有同样的美誉。
界面简洁,功能却十分强大,只需要短短的几分钟就可以做出很棒的专业动态3D 文字,即使新手也可以很快入门,你甚至不需要学习,就可以创作出用于你的网页的高品质的3D 文字标题,所有的图片全都具有光滑平整的专业品质,它也可以创建高品质的动画GIF 和AVI。
最新版本增加了大量动画和字体风格,支持风格设置导入,并且还可以导出为静态图片、动画GIF、Flash 动画甚至屏幕保护。
更强的功能需要你自己来发现。
二、Xara3D v6.0软件下载及安装方法1、下载地址及解压Xara3D v6.0简体中文完整版下载地址:(/soft/html/16045.htmlXara3D v6.0简体中文汉化完整版注册码:X3D-9101-2462-1422)下载完成后(软件大小22.62MB,但下载速度可能有时比较慢),双击你下载的“Xara3D v6.0 Full Edition 简体中文汉化完整版”文件,先解压缩后生成下图所示包含6的个文件的文件包。
再双击“SETUP”文件,里面有下列图示两个文件,右边的蓝色3D字样即为该软件的EXE安装文件,左边的“HH”为汉化补丁文件。
2、安装方法:先安装Xara3D v6.0英文版,选择好路径(建议不要安装在C系统盘,以免重新安装系统后不带来不便!),比如安装你的计算机D:\Program File \Xara\Xara3D6下,接着安装汉化补丁,注意汉化补丁要安装在与英文版同一路径下(见上),这样启动软件后,界面就自动变成中文版了。
3、注册:按照上述步骤安装全部完成后,自动弹出一个需要填写注册码的窗口(见下图),把下列注册码复制进去,然后点“Run Xara3D”按钮,即可进入Xara3D v6.0立体字制作软件了。
Xara3D v6.0简体中文汉化完整版注册码:X3D-9101-2462-1422三、Xara3D v6.0立体字制作方法进入后Xara3D v6.0,可以很方便的制作自己喜欢的3D动态立体字,鼠标停在左边一列主按钮,可以看到各自的功能。
XNA的注意事项为了完成这一个章节,这里有另外一些关于XNA框架和XNA Game Studio Express 的技巧和窍门。
如你所见,你知识能够开始编码和顺利工作,但是当你运行遇到问题,或者不知道如何解决一个特定的问题,依赖于浏览器的一个个书签总是有好处的。
另外,这一个章节部分讨论了.NET和C#的一些优点,而且检验XNA与Managed DirectX之间的不同。
重要的超链接只是一些给你书签的链接。
/directx/xna/在微软MSDN上的XNA开发者中心页与XNA Game Studio和XNA框架论坛,它是你在Internet上发现的最活跃的XNA论坛。
在这里,你也能下载最近的XNA版本。
阅读FAQ,并且看更新的内容。
/wiki/Microsoft_XNA进入Wikipedia关于XNA,经常更新并且包含许多其他主题的链接。
网页底部有一些有用的外部链接被罗列。
好的新站点,有大量的链接、指南和让你开始在XNA世界的技巧。
-另外一个新站点,有大量的新闻,和一些实在有用的瓷片引擎指南。
也包含许多你可能喜欢的游戏组件。
-博客形式的XNA新闻网站,也包含一些视频教程,并且聚焦在学习XNA和图形工具的技巧和窍门。
-作者的官方网站。
在这里,你能找我做的更多游戏,连同Rocket Commander XNA,XNA Shooter,或来自于本书的竞速游戏,和所有文档和我为此而制作的视频指南。
另外,我建议检验Rocket Commander视频指南,它在Coding4Fun相当流行。
C#有利于开发游戏吗?像那样的网站,不断有论坛贯穿讨论C++和C#之间的差别。
通常在一些回复之后,它们都终结于一个无意识的语言战争。
回到.Net早期(2002)我讨论过相当多的这些思路,但是当99.9%的程序员站在C++一边那就太郁闷的了,而且没有办法使人信服,因为他们甚至不真诚对你。
不计主观感觉的好恶,语言战争不真正的把C#当作一门语言,因为JAV A做为游戏编程平台是失败的,除了蜂窝电话游戏以外。
怎么制作3D游戏制作3D游戏是一个复杂的过程,需要涉及到多个方面的知识和技能。
下面是一个简要的制作3D游戏的步骤,供参考。
1.设计游戏概念:在开始制作3D游戏之前,首先需要确定游戏的概念和主题。
这包括游戏的故事情节,游戏世界的设置,角色设计等等。
2.制定游戏规则:确定游戏的玩法和规则。
这将有助于你在后续的开发过程中更加明确游戏所需的功能。
3. 学习游戏引擎:选择适合的游戏引擎,例如Unity或Unreal Engine等,并开始学习使用该引擎。
这些游戏引擎提供了开发3D游戏所需的工具和资源。
4.创建游戏世界:使用游戏引擎中的3D建模工具,设计游戏的场景和环境。
你可以创建地形,建筑物,道路,植被等等。
注意确保游戏世界的尺寸和比例可以满足游戏所需。
5.设计角色和物体:使用游戏引擎提供的角色建模工具,创建游戏中的角色和物体。
给它们添加贴图,动画和其他必要的属性和行为。
6.程序开发:使用游戏引擎的脚本语言或编程语言,编写游戏的逻辑和功能。
这可能包括角色控制,碰撞检测,游戏规则的实现等等。
7.添加音效和音乐:为游戏添加适当的音效和音乐,以增强游戏的氛围和乐趣。
8.测试和调试:在发布游戏之前,进行测试和调试,以确保游戏的稳定性和流畅性。
这可以包括修复漏洞和错误,优化性能等等。
9.发布游戏:当游戏开发完成并经过充分测试后,可以将游戏发布到适合的平台上,例如PC,游戏主机或移动设备。
这可能需要进行一些额外的设置和配置以确保游戏在目标平台上运行良好。
10.更新和维护:一旦游戏发布,你可能还需要根据用户反馈和需求进行游戏的更新和维护。
这包括添加新功能,修复错误和改进游戏性等等。
1、首先用多边形制作出人物模型。
注意的是游戏引擎的极限,这里做的是CS1.5和1.6的游戏模型,引擎限制人物的三角面是1000左右,官方的都是700个面。
在用maya或max 建模时,要保持四边形在500以下才能保持三角面在1000以下,超过HL引擎极限就无法在游戏里运行。
这里我们用maya 6来制作模型,模型完成后执行modeling->polygons->tirangulate命令,把模型转成三角面,这里是986个面。
2、接下来选中模型,执行命令edit>polygons>normals>soft/harden这里选用soft180来软化模型的法线。
这样后模型就给法线圆滑了。
3、展开UV时不要忘记分割模型的UV,这样才可以更好的进行UV操作。
这里分割了10个部分的UV。
如果模型的左右对称,除了头以外。
身体的UV只要展开一半就行了。
然后镜像模型可以得到另一半的UV。
4、接下来展开模型的UV纹理坐标。
建立一个材质球,就lambert就可以了。
用checker 2d纹理来对位。
展开模型的UV如图就行了。
5、展开UV后,我们的10个部分都可以在maya的UV编辑器里查看。
注意把所有的UV要放在纹理坐标的第一像限里还可以导出UV,其他三人像限坐标和第一个像限是一样的。
6、现在打开ps-cs来画贴图,先把UV导过来,然后在它上面对位画贴图,一层一层的画。
7、贴图后,不显示那些不需要的图层,另存文件为XX.BMP文件,大小是512*512,深度为8位,一定不要错,不要以后HL引擎是不识贴图文件的。
记得保存原PSD文件,方便以后个性修改。
8、观察模型的贴图,修改一些不合理的地方,包括比例、结构等。
由于是1000面以下的底模,所有的关键都在贴图上。
9、修改好后,我们不一定要在maya里渲染,因为现在做的是游戏模型,是要在游戏引擎里及时渲染的。
下面我们将进入模型的骨骼、蒙皮、权重的工作。
PANDA3D入门----------古道天马一、前言这个就是我自学的总结。
因为刚开始瞧PANDA3D的教程,发现在瞧天书,静下心来学后,感觉其实就是教程不够深入浅出,没有照顾我们这些一点基础都没有的初学者。
因此,把我自学的一点心得记录下来,便于自己及她人参考。
学习PANDA3D的目的就是编制一个三维的设备管理程序。
嫌C#运行效率低下,C++的语言不够简练,瞧好了PYTHON编程。
百度了一下,PYTHON的3D图形库有PYGLET,PANDA3D,BLENDER等,最初就是想用BLENDER,但就是BELNDER侧重于建模,于我的用途不太符合。
改用PYGLET的,瞧中它也就是很简练的库,后来发现PYGLET缺乏维护,教程也少。
因此转向PANDA3D,PANDA3D的教程以及维护要完善的多。
但就是按网上的说法,学习曲线就是比较陡峭的。
果然,刚开始时一头雾水,经过查阅官方教程后,又通过自己一点点的实验与摸索,稍微有点头绪了。
顺便提一下,我的PYTHON与PANDA3D就是同步学的,都在初级阶段。
这里侧重写PANDA3D的特点,PYTHON的略微提到些。
注意:这不就是手册,很多进阶的东东请查官网手册。
二、安装我的系统就是WIN7 64位,安装PYTHON的2、7、6版本32位版,PANDA3D的1、8、1版本(自带2、7、3版本的PYTHON)。
打开“开始”菜单,运行PANDA3D下的范例文件,第一个范例就是ASTEROIDS,小行星。
点击“Run Asteroids”,出现游戏界面这说明PANDA3D内含的PYTHON2、7、3已经可以运行了。
现在,大家肯定都迫不及待的要瞧瞧源代码了吧。
点击View Source Code出现文件夹点击Tut-Asteroids、py,结果出现提示没有找到模块,说明您的PYTHON2、7、6还没找到PANDA3D的模块。
那么按下面的方法做。
在C:\Python27\Lib\site-packages的目录下,建一个PANDA、PTH的文件,用写字本添加下列文本(这里的文件路径就是默认的,如果您修改过的话,根据实际情况调整)C:\Panda3D-1、8、1C:\Panda3D-1、8、1/direct/src/actorC:\Panda3D-1、8、1/direct/src/clusterC:\Panda3D-1、8、1/direct/src/controlsC:\Panda3D-1、8、1/direct/src/directbaseC:\Panda3D-1、8、1/direct/src/directdevicesC:\Panda3D-1、8、1/direct/src/directnotifyC:\Panda3D-1、8、1/direct/src/directscriptsC:\Panda3D-1、8、1/direct/src/directtoolsC:\Panda3D-1、8、1/direct/src/directutilC:\Panda3D-1、8、1/direct/src/distributedC:\Panda3D-1、8、1/direct/src/extensionsC:\Panda3D-1、8、1/direct/src/extensions_native C:\Panda3D-1、8、1/direct/src/ffiC:\Panda3D-1、8、1/direct/src/fsmC:\Panda3D-1、8、1/direct/src/guiC:\Panda3D-1、8、1/direct/src/intervalC:\Panda3D-1、8、1/direct/src/leveleditorC:\Panda3D-1、8、1/direct/src/motiontrailC:\Panda3D-1、8、1/direct/src/particlesC:\Panda3D-1、8、1/direct/src/physicsC:\Panda3D-1、8、1/direct/src/pyinstC:\Panda3D-1、8、1/direct/src/showbaseC:\Panda3D-1、8、1/direct/src/showutilC:\Panda3D-1、8、1/direct/src/taskC:\Panda3D-1、8、1/direct/src/tkpanelsC:\Panda3D-1、8、1/direct/src/tkwidgetsC:\Panda3D-1、8、1/bin再次点击Tut-Asteroids、py,瞧瞧就是否成功运行。
Xara3D6操作方法
1.安装好Xara3D6软件,无需注册,到桌面找到快捷方式并且打开。
2.关闭欢迎栏;
3.进入操作界面;
4.点击菜单栏的选项按钮。
5.打开文字选项;
6.在文字面板内,打上你需要的文字。
7.选中文字改变其字体。
8.单击工具栏的改变字体下拉菜单,设置大小。
9.单击确定按钮,完成文字操作。
10.点击工具栏下的文字选项。
作者:爱昵7(QQ:2925112454 玉誉)
11.单击面板右边的文字斜边选项,进行相关设置。
12.点击颜色选项,选择文字正面。
13.进行颜色设置。
14.选择文字侧面,进行相关设置。
15.选择背景进行设置,随后是阴影。
16.选择工具栏倒数第三个按钮,灯光按钮。
显示出灯光;进行相关设置。
17.单击界面右边的动画选项,点击动画提取器。
18.选择其中一个动画。
19.点击文件菜单下的导出动画选项,进行GIF动画导出。
Loft Object(放样)是将一个二维形体对象作为沿某个路径的剖面,而形成复杂的三维对象。
同一路径上可在不同的段给予不同的形体。
我们可以利用放样来实现很多复杂模型的构建。
2.4.1 创建放样路径与截面在制作放样物体前,首先要创建放样物体的二维路径与截面图形。
1)在Create命令面板中选择Shapes项目栏。
在该项目的面板中单击Star (星)按钮,并且在Front视窗中创建星状截面。
2)单击Line(线)按钮在Top视窗中创建一条曲线,做为放样路径。
放样物体的二维截面与路径图形,如图2-38所示。
图2-38截面与路径通过以上步骤所创建的截面与路径都是二维的图形,我们将利用这些二维图形生成三维的实体模型。
2.4.2 制作放样物体Loft(放样)可以通过Get Path(获取路径)、Get Shape(获取图形)两种方法创建三维实体造型。
可以选择物体的截面图形后获取路径放样物体,也可通过选择路径后获取图形的方法放样物体。
1)选择路径图形。
2)在Create命令面板的Geometry中单击Compound Objects复合物体选项上的Loft(放样)按钮。
这时命令面板上出现放样参数卷展栏,如图2-39所示。
图2-39放样参数卷展栏3)单击按钮,并将鼠标移至视窗中点取星状截面。
完成放样操作,获得三维造型如图2-40所示。
图2-40放样物体2.4.3 增加放样截面我们在制作一些如台布、床罩、窗帘等的模型时,可以利用一条放样路径,增加多个不同的截面,这样可以减少模型制作的复杂程度,节省时间。
下面我们将练习制作一个圆形台布,用两条手绘的曲线创建放样造型。
1)在Create(创建)命令面板中Shapes项目栏中,单击Circle(圆)建立一个圆形做为布的上截面。
2)在Create(创建)命令面板中Shapes项目栏中,单击Star(星)建立一个Points=2的星形。
并在修改集中将这一造型的顶点进行光滑处理。
XNA Posing Studio教程XNALara版本升至9.8之后更名为XPS(XNA Posing Studio)。
软件的维护升级似乎也已转由XNAaraL 进行。
XPS 10之后支持动画。
现今DeviantART上已经有人从游戏中提取出AC的角色模型可供这款软件使用,下面掩饰所使用的模型也均为游戏中所提取1.首先你需要先从微软下载Microsoft .NET Framework 3.5(Win7自带可不装)安装,/downloads/details.aspx?familyid=333325FD-AE52-4E35-B531-508D977D32 A6&displaylang=en2.然后是下载Microsoft XNA Framework安装,/downloads/details.aspx?FamilyId=6521D889-5414-49B8-AB32-E3FFF05A4C 50&displaylang=en3.接着下载XPS10,绿色无需安装,已打包前两项/file/e7iwaef8或者官网下载,需注册。
xnalara. /t183-xnalara-xna-posing-studio-10854.下载好所需的角色模型,Ezio,Altair神马的/file/bejl4do25丰富的其它游戏模型(角色,物品,环境)的下载地址(涉及所有主流游戏):/gallery/https:///?cid=4A3E70355112C6C4&id=4A3E70355112C6C4!176/showthread.php?t=151335解压下载好的XPS,打开软件目录后把下载下来的角色模型解压后放到data这这个文件夹,这里我用的是Ezio和Christina 软件界面是英文的,暂时没有汉化,将就点选择file->add model,就可以看见之前放在data下的模型,这里我们选择ezio很酷,是吧,用鼠标左键试着移动一下,各个角度都是可见的,鼠标滚轮可以放大下面我们来说一下软件怎么使用,首先model这项是模型,也就是你导入了多少个模型,这里就分别有多少个模型可选然后pos,这是模型的坐标值,分别对应XYZ轴,试着输入一下感觉不同的位置变化Scale是模型大小右边的滑块区域是调整身体的各个部位的位置用的,分别对应XYZ轴,height是模型的离地高度,默认是零,一般不用调整。
3Dm a x教案(重点难点)第一讲 3Dmax概论目标:掌握3Dmax的界面基本操作重点:视图管理难点:视图控制区、视图显示模式一、 3D Max特点二、 3D Max的应用领域1、影视片头包装2、影视产品广告3、电影电视特技4、工业造型设计5、二维卡通动画6、三维卡通动画7、游戏开发8、网页动画9、建筑装璜设计三、建筑装潢设计流程四、 3D Max的屏幕组成及认识标题栏、菜单栏、工具栏、命令面板、状态行和提示行、画面控制区(时间轴)、视图区、视图控制区。
1、菜单栏File:文件 Edit:编辑 Tools:工具 Group:成组 Views:视图Create:创建Modifiers:修改 Character:角色 Animation:动画 Graph Editors:图解编辑Rendering:渲染 Customize:自定义 MAXScript:MAX脚本 Help:帮助五、视图管理1 工具栏的显示/隐藏法一:工具栏右击法二:Customize--Show UI包括:Show Command Panel:显示命令行Show Main Toolbar:显示主要工具行(Alt+6)2 视图区①键盘方式来快速改变视图显示方式T=Top 顶视图B=Bottom 底视图L=Left 左视图R=Right 右视图F=Front 前视图P=Perspective 透视图C=Camera 摄像机视图U=User 用户视图②调整视图布局方法一:Customize--Viewport Configuration--Layout(自定义--视图设置--布局)方法二:在任一视图左上角右击--Configuration--Layout。
③恢复原始视图设置Customize--Load custom UI scheme3、视图控制区:位于窗口右下角4、快捷键的设置:设置快捷键:Customize--Customize User Interface--Keyboard(键盘) 应用作业:调整视图区提高作业:试创建几何体第二讲基本几何体建模(一)目标:利用几何体创建凳子、圆桌重点:移动、旋转、复制关系的使用难点:复制关系的掌握一、单位设置Customize--Units Setup二、Standard Primitives(标准几何体)Create菜单--Standard Primitives(创建--标准几何体)1、Box:立方体2、Cone:锥体3、Shpere:球4、GeoSphere(几何球体)5、Cylinder:圆柱三、坐标轴向控制1 显示和隐藏坐标系:views --show Transform Gizmo2 显示锁定的坐标轴:键盘上的X键四、变换工具1、移动工具2、旋转工具3、移动和旋转复制复制产生的复制品和原来的物体产生的三种关系状态:(1)Copy复制,即完全独立,不受原始物体的任何影响;(2)Instance关联,即对它和原始物体中的任一个进行修改,都会同时影响到另一个;(3)Reference参考,即单向的关联,对原始物体的修改会同时影响到复制品,但复制品自身的修改不会影响到原始的物体。
Xara3D v6.0 汉化版教程打开Xara3D6,会出现一个图例。
左边是动画选项快捷键,右边是动画选项明细。
点击“文字选项”(Aa),在弹出的文字框内输入所想写的文字。
输入文字后,选择字体与字体大小、粗细、是否运用轮廓。
这样,所换成了自己所输入的文字。
增加文字。
如不在同一平面显示文字,则点“插入分页符”,在所需要分页的部位插入。
(注意:请不要留有空行,否则将不会在同行显示)全选已输入的文字来进行字体的选择。
当然,也可以在编辑的状态下进行选择◆◆Xara3D v6.0 汉化版下载与教程系列◆◆现在,插入分页与字体、字体大小均已选好。
去除边框。
当然,各取所需,边框的取舍按个人意愿。
图案选项。
进行边框的取舍、边框图案的提取更换。
阴影的取舍。
建议去除阴影。
动画的选取。
点击“动画提取器”,选择风格各异的动画表现形式。
颜色选项。
选择所喜爱的颜色来进行装点。
截入材质。
选择所喜爱的材质进行填充,使作品绚丽多彩。
绚丽的材质使字体更加眩彩。
点击文件-导出动画,对作品进行保存。
输入保存文件的文件名,保存格式为GIF动画格式。
最后保存。
尽量按默认数值进行保存。
(注意:尺寸最好小于600×300。
所以有时还得自己来定义。
偶一般都是定义为500×200)^_^教程3学习做带背景的3D动画图片,要学习下面的内容,朋友们先复习一下Xara3D6.0教程(2)里的制作。
一、打开Xara3D6.0软件后,按照教程(2)所说的方法打上自己要的文字,然后按“查看”---再按“背景材质”。
二、从电脑里选取需要的图片,按打开。
三、好,背景图片选好了,看上去一张一张地摆放着,我们不用去理它。
四、现在可以保存了,按“文件”----再按“导出动画”。
五、最后一步是非常重要的,当出现下面这界面时,我们先根据原来的背景图片的大小设置现在图片的大小(在用户定义设置),接着把“透明”前面的小勾去掉(这个很重要,如果不去掉,保存下来的图片是没有背景的),最后按“保存”,OK,完成了一幅带背景的3D动画。
这也是上的一个示例。
新建一个XNA(Windowsgame)工程,取名为Windows3DGame。
右击解决方案资源管理器中的Content节点,添加两个文件夹,分别命名为Audio和Models,然后向这两个文件夹里分别添加所需资源。
(h ttp://上可下载,也可从我的源码中获得,地址在下面。
)注意添加Model资源时,项目中只添加后缀名为.fbx的文件。
添加一个新类,命名为GameObject.cs,其代码如下:ing System;ing System.Collections.Generic;ing Microsoft.Xna.Framework;ing Microsoft.Xna.Framework.Audio;ing Microsoft.Xna.Framework.Content;ing Microsoft.Xna.Framework.GamerServices;ing Microsoft.Xna.Framework.Graphics;ing Microsoft.Xna.Framework.Input;ing ;10.u sing Microsoft.Xna.Framework.Storage;11.12.n amespace Windows3DGame13.{14. class GameObject15. {16. public Model model = null;17. public Vector3 position = Vector3.Zero; //位置参数18. public Vector3 rotation = Vector3.Zero; //旋转参数19. public float scale = 1.0f; //缩放参数20. }21.}一、绘制背景,载入地形。
1. 在Game.cs中添加几个变量1. GameObject terrain = new GameObject(); //地形2.3. Vector3 cameraPosition = new Vector3( //摄像机位置4. 0.0f, 60.0f, 160.0f);5. Vector3 cameraLookAt = new Vector3( //观察方向6. 0.0f, 50.0f, 0.0f);7.8. Matrix cameraProjectionMatrix; //Projection矩阵9. Matrix cameraViewMatrix; //View矩阵2. 在LoadContent()函数中添加如下代码:1. //设置View矩阵2. cameraViewMatrix = Matrix.CreateLookAt(3. cameraPosition,4. cameraLookAt,5. Vector3.Up);6.7. //设置Projection矩阵8. cameraProjectionMatrix = Matrix.CreatePerspectiveFieldOfView(9. MathHelper.ToRadians(45.0f),10. graphics.GraphicsDevice.Viewport.AspectRatio,11. 1.0f,12. 10000.0f);13.14. //载入地形15. terrain.model = Content.Load<Model>(16. "Models\\terrain");3. 添加函数DrawGameObject(GameObject gameobject)用来绘制游戏中的对象1. //绘制对象2. private void DrawGameObject(GameObject gameobject)3. {4. foreach (ModelMesh mesh in gameobject.model.Meshes)5. {6. foreach (BasicEffect effect in mesh.Effects)7. {8. effect.EnableDefaultLighting(); //默认灯光9. //设置World矩阵10. effect.World =11. Matrix.CreateFromYawPitchRoll(12. gameobject.rotation.Y,13. gameobject.rotation.X,14. gameobject.rotation.Z) *15. Matrix.CreateScale(gameobject.scale) *16. Matrix.CreateTranslation(gameobject.position);17. //设置Projection矩阵18. effect.Projection = cameraProjectionMatrix;19. //设置View矩阵20. effect.View = cameraViewMatrix;21. }22. mesh.Draw();23. }24. }关于这些矩阵,参考/changjiangboy/archive/2008/08/05/2770935.aspx。
在Draw(GameTime gameTime)函数中添加如下代码:1. //调用函数绘制地形2. DrawGameObject(terrain);4. 运行,效果如下图二、绘制导弹发射装置1. 在Game.cs中实例化两个对象1. GameObject missileLauncherBase = new GameObject(); //底座2. GameObject missileLauncherHead = new GameObject(); //发射头2. 在LoadContent()函数中添加如下代码1. //载入发射装置2. missileLauncherBase.model = Content.Load<Model>(3. "Models\\launcher_base");4. missileLauncherBase.scale = 0.2f; //原大小的五分之一5.6. missileLauncherHead.model = Content.Load<Model>(7. "Models\\launcher_head");8. missileLauncherHead.scale = 0.2f; //原大小的五分之一9. missileLauncherHead.position =10. missileLauncherBase.position +11. new Vector3(0.0f, 20.0f, 0.0f); //head比base高203. 在Update(GameTime gameTime)函数中添加代码控制导弹发射方向1. KeyboardState keyboardState = Keyboard.GetState(); //获取键盘状态2. if (keyboardState.IsKeyDown(Keys.Left))3. {4. //绕Y轴旋转,从上往下看逆时针方向;可看作向左5. missileLauncherHead.rotation.Y += 0.05f;6. }7. if (keyboardState.IsKeyDown(Keys.Right))8. {9. //绕Y轴旋转,从上往下看顺时针方向;可看作向右10. missileLauncherHead.rotation.Y -= 0.05f;11. }12. if (keyboardState.IsKeyDown(Keys.Up))13. {14. //绕X轴旋转,左侧看顺时针方向;可看作向上15. missileLauncherHead.rotation.X += 0.05f;16. }17. if (keyboardState.IsKeyDown(Keys.Down))18. {19. //绕X轴旋转,左侧看逆时针方向;可看作向下20. missileLauncherHead.rotation.X -= 0.05f;21. }22.23. //左右旋转范围(-PI/3,PI/3)24. missileLauncherHead.rotation.Y = MathHelper.Clamp(25. missileLauncherHead.rotation.Y,26. -MathHelper.Pi/3.0f, MathHelper.Pi/3.0f);27.28. //左右旋转范围(0,PI/3)29. missileLauncherHead.rotation.X = MathHelper.Clamp(30. missileLauncherHead.rotation.X,31. 0, MathHelper.Pi/3.0f);MathHelper.Clamp(float value, float min, float max)函数的作用是限制value的值在min和max之间。
4. 在Draw(GameTime gameTime)函数中添加代码1. //调用函数绘制发射台2. DrawGameObject(missileLauncherBase);3. DrawGameObject(missileLauncherHead);5. 运行后效果如下三、发射导弹1. 在Game.cs中添加如下变量1. GameObject[] missiles; //导弹2. const int numMissiles = 20; //屏幕上显示最多导弹数目3. const float launcherHeadMuzzleOffset = 52.0f; //偏离炮膛参数,描述导弹初始位置,这样导弹直接从发射口4.//出现,看起来有“真实”些5. const float missilePower = 20.0f; //导弹动力,速度参数,大小决定导弹速度6. KeyboardState previousKeyboardState; //获取(上次)当前键盘状态,7. //将与(当前)下一次对比2. 在LoadContent()函数中添加代码1. //载入导弹2. missiles = new GameObject[numMissiles];3. for (int i = 0; i < numMissiles; i++)4. {5. missiles[i] = new GameObject();6. missiles[i].model =7. Content.Load<Model>("Models\\missile");8. missiles[i].scale = 3.0f; //这里为原大小的3倍9. }3. 在Game1类中添加以下几个函数1. // 发射导弹2. private void FireMissile()3. {4. foreach (GameObject missile in missiles)5. {6. if (!missile.alive)7. {8. missile.velocity = GetMissileMuzzleVelocity(); //初始速度9. missile.position = GetMissileMuzzlePosition(); //初始位置10. missile.rotation = missileLauncherHead.rotation; //旋转度与炮口一致11. missile.alive = true; //“激活”状态12. break;13. }14. }15. }16.17. // 获取导弹初始速度18. private Vector3 GetMissileMuzzleVelocity()19. {20. Matrix rotationMatrix =21. Matrix.CreateFromYawPitchRoll(22. missileLauncherHead.rotation.Y,23. missileLauncherHead.rotation.X,24. 0);25.26. return Vector3.Normalize(27. Vector3.Transform(Vector3.Forward,28. rotationMatrix)) * missilePower;29. }30.31. // 获取导弹初始位置32. private Vector3 GetMissileMuzzlePosition()33. {34. return missileLauncherHead.position +35. (Vector3.Normalize(36. GetMissileMuzzleVelocity()) *37. launcherHeadMuzzleOffset);38. }39.40. // 更新屏幕上的导弹41. private void UpdateMissiles()42. {43. foreach (GameObject missile in missiles)44. {45. if (missile.alive)46. {47. missile.position += missile.velocity;48. //如果导弹跑出3000的距离,“肉眼”看不见了,自动消失49. //如果导弹跑出窗口边缘,脱离视野,自动消失50. if (missile.position.Z < -3000.0f ||51. missile.position.X > graphics.GraphicsDevice.Viewport.Width / 2.0f ||52. missile.position.X < -graphics.GraphicsDevice.vViewport.Width / 2.0f ||53. missile.position.Y > graphics.GraphicsDevice.Viewport.Height / 2.0f)54. {55. missile.alive = false;56. }57. }58. }59. }4. 在Update(GameTime gameTime)函数中添加如下代码1. //按一次空格发射一枚导弹2. if (keyboardState.IsKeyDown(Keys.Space) &3. previousKeyboardState.IsKeyUp(Keys.Space))4. {5. FireMissile(); //发射导弹6. }7.8. //调用函数更新屏幕导弹9. UpdateMissiles();10.11. previousKeyboardState = keyboardState; //当前键盘状态为下一初始状态5. 在Draw(GameTime gameTime)函数中添加代码绘制导弹1. //绘制各个导弹2. foreach (GameObject missile in missiles)3. {4. if (missile.alive)5. {6. DrawGameObject(missile);7. }8. }6. 运行,效果如下四、添加飞船1. 在Game.cs中添加如下常变量1. GameObject[] enemyShips; //飞船2. Random r = new Random(); //随机数生成器3. const int numEnemyShips = 3; //屏幕飞船数目4. Vector3 shipMinPosition = new Vector3(-2000.0f, 300.0f, -6000.0f); //最远位置5. Vector3 shipMaxPosition = new Vector3(2000.0f, 800.0f, -4000.0f); //最近位置6. const float shipMinVelocity = 5.0f; //最小速度7. const float shipMaxVelocity = 10.0f; //最大速度2. 在LoadContent()函数中加以下代码1. //载入飞船2. enemyShips = new GameObject[numEnemyShips];3. for (int i = 0; i < numEnemyShips; i++)4. {5. enemyShips[i] = new GameObject();6. enemyShips[i].model = Content.Load<Model>(7. "Models\\enemy");8. enemyShips[i].scale = 0.1f;9. enemyShips[i].rotation = new Vector3(10. 0.0f, MathHelper.Pi, 0.0f);11. }3. 添加函数用来更新屏幕上的飞船1. // 更新屏幕上的飞船2. private void UpdateEnemyShips()3. {4. foreach (GameObject ship in enemyShips)5. {6. if (ship.alive)7. {8. ship.position += ship.velocity;9. //如果飞船飞到炮口后(炮位置Z坐标是0),自动消失10. //如果飞船飞出视野(左、右、上),自动消失11. if (ship.position.Z > 10.0f ||12. ship.position.X > (-ship.position.Z + 160f) * Math.Tan(22.5) ||13. ship.position.X < -(-ship.position.Z + 160f) * Math.Tan(22.5) ||14. ship.position.Y > (-ship.position.Z + 160f) * Math.Tan(22.5) /15. graphics.GraphicsDevice.Viewport.AspectRatio)16. {17. ship.alive = false;18. }19. }20. else //如果有没“激活”的飞船,激活它,并确定其位置速度21. {22. ship.alive = true;23. ship.position = new Vector3(24. MathHelper.Lerp(25. shipMinPosition.X,26. shipMaxPosition.X,27. (float)r.NextDouble()),28.29. MathHelper.Lerp(30. shipMinPosition.Y,31. shipMaxPosition.Y,32. (float)r.NextDouble()),33.34. MathHelper.Lerp(35. shipMinPosition.Z,36. shipMaxPosition.Z,37. (float)r.NextDouble()));38.39. ship.velocity = new Vector3(40. 0.0f,41. 0.0f,42. MathHelper.Lerp(shipMinVelocity,43. shipMaxVelocity, (float)r.NextDouble()));44. }45. }46. }MathHelper.Lerp(float value1,float value2,float amount)函数线性插入一个限定在两个值之间的值。