您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 用VB和TV3D从零开始轻松制作3D游戏教程
学习资料收集于网络,仅供参考学习资料用VB和TV3D从零开始轻松制作3D游戏教程第一章熟悉vb和tv3d(2011-12-2523:07:17)转载▼前言版权所有,转载请注明出处。大家好,我是Reity。这次终于开始做3d游戏的教程了。很多人都以为3d游戏的制作要比2d游戏复杂的多,其实呢,如果知道了制作方法,3d游戏反而比2d游戏的制作花费的精力少。3d本身就是一种视觉效果,即使美工很差,给人的感觉也会比2d的要优越。如果一个游戏含有很多人物动作,3d游戏只需要一个蒙皮的人物模型,然后就可以按照自己的设计拖拽出任意的动作,而2d游戏则需要把每一帧的人物造型全部画出来。比如拳皇这种格斗游戏,每个人物都需要几百张动作图呢。废话不多说了,总之,我希望通过我的教程,能够让你发现制作3d游戏原来如此简单。好了,我们开始吧。第一章熟悉vb和tv3dVb就是Visualbasic,是一种可视化的基础编程语言。为什么用vb呢?因为它简单嘛,学得快的人几个小时就能学会。有人说我只会C++,没关系,原理都是相通的,你学vb只会更快。有人说,我不会vb怎么办?既然是从零开始的教程,我自然已经考虑到了这个问题。既然只是做游戏,又不是制作应用软件,所以我们只需要知道几个常用的命令就可以了。下面列出来就是vb在游戏制作中常用的命令,有vb基础的同学可以直接跳过这里了。1、变量:用来储存数据或文字常用的变量类型Long整数Single浮点,也就是有小数点的数String文字实际上制作游戏只需要用到这3种类型,甚至连long都可用single代替。举例:dimaaaassingleAaa=100就是定义了一个名为aaa的小数变量,且aaa的值为1002、条件命令格式:If条件then结果Else没达到条件的结果Endif举例:ifaaa=100thenaaa=aaa+1Endif当条件a=100时,运行结果aaa=aaa+1,这样aaa的值就变为101了。3、重复命令Fornext格式:dimiaslongfori=1to重复次数重复内容学习资料收集于网络,仅供参考学习资料Next举例:fori=1to10aaa=aaa+1next也就是把aaa+1重复10次,这样也就相当于是aaa+10了这里顺便提一个命令格式:Do重复内容Loopuntil条件这个就是无限循环了,不达到条件是不会停止的,这个游戏中只有主循环才会用一次,所以大家知道一下就可以了。4、随机函数rnd*最大范围游戏中会用到很多的随机事件,实际上,世界上根本就没有随机,我们是不知道原理或者不想去细致的讨论全部因素才会用随机来代替。比如敌方的子弹射过来,子弹的路径之所以不同,主要是由枪的后座力、稳定性,子弹的规整度,风力、空气密度,敌人的瞄准能力、反应能力、手臂肌肉强度,以及敌人在射击的一瞬间的心理活动……总之,我们不想,也没必要去考虑这些问题,所以在游戏中干脆就把敌人的命中率设为30%就ok啦。代码如下,你可以好好研究下DimaaaaslongAaa=rnd*100Ifaaa=30then命中Else没命中Endif基本就是这么几个常用的东西啦,只要熟练掌握这几个命令,简单的游戏都可以做了。不过我还是建议你能系统的自学一下vb,这样会更熟悉Vb一些。我们把这几个命令用猜数字的游戏实际应用一下,这是代码,直接全部替换到vb的窗口代码中。里面有些命令我们是用不到的,所以不需要记住。“’”符号后面的内容是注释,不影响代码。OptionExplicit'这条语句是表示所用到的变量必须先定义,建议每次开头都加上这条语句,养成好习惯。PrivateSubForm_Load()DimaAsLongDimbAsLong'定义a,b两个整数型变量RandomizeTime'这个语句是让每次的随机值都不一样,如果不加,你测试的时候会发现,每次随机的值都是一样的,但是生成exe以后不会,所以只用于测试。b=Int(Rnd*99)+1'rnd是随机函数,游戏中非常常用,大家记住Int(Rnd*99)这条语句是随机取0—98共99个整数,而我们要1—99的数,所以后边要加1。Do’循环a=InputBox(请猜一个数,此数为1-99之间。)'这条语句是让你输入一个数然后储存到变量a中。Ifa=bThen'a=b自然就是猜对了MsgBox猜对了!End'然后结束程序学习资料收集于网络,仅供参考学习资料EndIfIfabThenMsgBox大了'if语句写在一行之内可以省去结尾的endifIfabThenMsgBox小了LoopEndSub也许有人会问了,vb不是效率很低么?不是很多人都认为vb不能制作大型游戏么?我要说的是,直接用vb来制作游戏,确实效率很低,这本没有错。这样就必须引出vb亲密的伙伴tv3d了。Tv3d全名TrueVision3D,是美国的一款免费的商业3d游戏引擎。其实tv3d也支持c++,Delphi等编程语言,只不过你学习别的编程语言至少也要1个月。Tv3d是以微软发布的dx作为底层,也就是运行效率和vb没有多少关系,vb只需要调用tv3d命令和一些表层数据的计算就可以了,其余的包括渲染,碰撞都是由tv3d完成,所以制作大型游戏完全没有问题,而且tv3d的效率还是相当高的。Tv3d的官方网站是版本下载(特点,直接支持cs的bsp地图,以及mdl骨骼动画,并且附带很多基础的教程和例子)=2&file=16&mirror=236.5版本下载(特点,拥有更强大的特效,如水面反射、动态阴影、泛光、物理引擎等。支持win7)=28我要教大家的就是6.5版本,一个更加高效率,更强大特效的版本。之前的6.3版本使用的人已经很多了,也有很多人制作出了很棒的游戏。比如《梦幻战争》系列,这可是一个人制作的哦。学习资料收集于网络,仅供参考学习资料但是用6.5制作的游戏确不多见,主要原因就是因为例子和教程比较少,所以希望我的教程能够填补这一空白,使大家对6.5能有个进一步的了解。我们也来看看6.5强大的特效。学习资料收集于网络,仅供参考学习资料学习资料收集于网络,仅供参考学习资料好,我们下载完成后安装,然后打开vb,点上面菜单中的工程,然后点引用。注意这是很重要的一步,如图,把tv3d的dll引用了,点确定,这样才能让vb能够调用tv3d。学习资料收集于网络,仅供参考学习资料像往常一样,我们先来个helloworld吧,来做我们的第一个tv3d程序。下面是全部代码,直接复制替换即可,运行后我们会看到一个旋转的白色茶壶。看出来了么?这可是3D的哦,可不是那种不入流的2D了,我们已经步入了3D时代。OptionExplicitDimTvAsNewTVEngine'调用tv3d所必需的DimSceneAsNewTVScene'调用tv3d所必需的DimMeshAsTVMesh'定义一个网格物体PrivateSubForm_Load()Me.Show'显示当前窗口,每次都加上错不了Tv.Init3DWindowedForm1.hWnd'用窗口模式启动tv3dSetMesh=Scene.CreateMeshBuilder'网格物体初始化,必加学习资料收集于网络,仅供参考学习资料Mesh.CreateTeapot'建立一个茶壶Mesh.SetPosition0,0,3'设定物体的位置坐标Do'主循环Tv.Clear'清屏Mesh.RotateY0.001'沿y轴以0.001每帧的速度转动Mesh.Render'渲染茶壶Tv.RenderToScreen'把所得最终结果渲染到屏幕DoEvents'这句是把线程空出来,使其他的的程序能运行,必加LoopEndSub用VB和TV3D轻松制作3D游戏教程2灯光材质贴图(2011-12-2614:33:47)转载▼第二章灯光材质贴图在上一章里,看到的白色茶壶就是没有任何材质贴图的物体,我们要让它好看,就必须加入材质贴图和灯光。首先加入贴图吧,就以这张名为pic.jpg贴图为例,大家可以把图片保存到程序目录并改名。首先我们要添加一个tv3d的贴图库DimTFAsNewTVTextureFactory'添加一个贴图库然后要指定图片的读取目录Tv.SetSearchDirectoryApp.Path'设定贴图读取目录为当前目录把贴图读取到贴图库TF.LoadTexturepic.jpg,pic'读取名为pic.jpg的贴图,并命名为pic为了能更好的展示贴图,我们把模型换为球体,其他相关代码如下:Mesh.CreateSphere1'建立一个半径为1的球学习资料收集于网络,仅供参考学习资料Mesh.SetTextureGetTex(pic)'赋予物体pic贴图运行一下这样就ok了,很简答吧,一共也就4-5行代码。有光照效果才能更真实,我们要给它加上光照,而要让光照的效果发生作用就必须要有材质。同理,和添加贴图一样,先添加库。DimMFAsNewTVMaterialFactory''添加一个材质库DimLEAsNewTVLightEngine'添加一个灯光库然后设置材质,相关代码:MF.CreateMaterialsolid'建立名为solid的材质MF.SetAmbientGetMat(solid),0,0,0,1'环境光MF.SetDiffuseGetMat(solid),1,1,1,1'扩散光,即物体的固有颜色MF.SetEmissiveGetMat(solid),0,0,0,0'自发光MF.SetOpacityGetMat(solid),1'不透明度MF.SetSpecularGetMat(solid),1,1,1,1'高光色MF.SetPowerGetMat(solid),60'散射强度然后把材质赋予物体Mesh.SetMaterialGetMat(solid)'赋予物体solid材质这样材质就完成了添加灯光就更简单了灯光有三种,分别是平行光、点光源、聚光灯。平行光就是全场景只有一个方向的光,如果我们的游戏是在室外场景,就应该采用平行光。建立平行光:LE.CreateDirectionalLightVector(平行光的方向向量),r,g,b,灯的名字,高光范围其中向量不懂的话可以百度,也可以等高中学习了立体几何自然就懂了。Rgb是灯光的红绿蓝三色的比例,可以取0-1的值。点光源,就像我们室内的白炽灯,光线是从一个点向外扩散出去的,用在室内效果比较好。建立点光源:LE.CreatePointLightvector(光源位置坐标),r,g,b,半径,名字,高光聚光灯:就像探照灯那样,光线路径是一个圆锥,cs中的手电筒就是用聚光灯做的。建立聚光灯:LE.CreateSpotLightVector(位置),Vector(方向),r,g,b,半径,光锥衰减外角,光锥衰减内角,名字,高光学习资料收集于网络,仅供参考学习资料我们一般做游戏就用平行光好了,所以这里只建立一个平行光,名字如果不需要调用是可以空着的。LE.CreateDirectionalLightVector(1,-1,1),1,1,1,,1'添加一个平行光同时,我们可以把灯光的高光打开。LE.SetSpecularLightingTrue'高光开关然后让光对物体起作用Mesh.SetLightingModeTV_LIGHTING_NORMAL’这个最常用的灯光模式还有另外两种常用的灯光模式Mesh.SetLightingModeTV_LIGHTING_NONE’就是灯光对物体不起作用Mesh.SetLightingModeTV_LIGHTING_BUMPMAPPING_TANGENTSPACE’这种模式是为法线贴图准备的效果更精细些,但是速度较慢
本文标题:用VB和TV3D从零开始轻松制作3D游戏教程
链接地址:https://www.777doc.com/doc-5068842 .html