3d编程教程
A. VB怎么做3D程序 本人就一VB小白
第一章 熟悉vb和tv3d
Vb就是Visualbasic,是一种可视化的基础编程语言。为什么用vb呢?因为它简单嘛,学得快的人几个小时就能学会。有人说我只会C++,没关系,原理都是相通的,你学vb只会更快。有人说,我不会vb怎么办?既然是从零开始的教程,我自然已经考虑到了这个问题。既然只是做游戏,又不是制作应用软件,所以我们只需要知道几个常用的命令就可以了。下面列出来就是vb在游戏制作中常用的命令,有vb基础的同学可以直接跳过这里了。
1、 变量:用来储存数据或文字
常用的变量类型
Long 整数
Single 浮点,也就是有小数点的数
String 文字
实际上制作游戏只需要用到这3种类型,甚至连long都可用single代替。
举例:
dim aaa as single
Aaa=100
就是定义了一个名为aaa的小数变量,且aaa的值为100
2、 条件命令
格式:
If 条件 then
结果
Else
没达到条件的结果
End if
举例:if aaa=100 then
aaa= aaa+1
End if
当条件a=100时,运行结果aaa=aaa+1,这样aaa的值就变为101了。
3、 重复命令For next
格式:
dim i as long
for i= 1 to 重复次数
重复内容
Next
举例:
for i=1 to 10
aaa=aaa+1
next
也就是把aaa+1重复10次,这样也就相当于是aaa+10了
这里顺便提一个命令
格式:
Do
重复内容
Loop until 条件
这个就是无限循环了,不达到条件是不会停止的,这个游戏中只有主循环才会用一次,所以大家知道一下就可以了。
4、 随机函数 rnd*最大范围
游戏中会用到很多的随机事件,实际上,世界上根本就没有随机,我们是不知道原理或者不想去细致的讨论全部因素才会用随机来代替。比如敌方的子弹射过来,子弹的路径之所以不同,主要是由枪的后座力、稳定性,子弹的规整度,风力、空气密度,敌人的瞄准能力、反应能力、手臂肌肉强度,以及敌人在射击的一瞬间的心理活动……总之,我们不想,也没必要去考虑这些问题,所以在游戏中干脆就把敌人的命中率设为30%就ok啦。
代码如下,你可以好好研究下
Dim aaa as long
Aaa=rnd*100
If aaa<=30 then
命中
Else
没命中
End if
基本就是这么几个常用的东西啦,只要熟练掌握这几个命令,简单的游戏都可以做了。不过我还是建议你能系统的自学一下vb,这样会更熟悉Vb一些。
我们把这几个命令用猜数字的游戏实际应用一下,这是代码,直接全部替换到vb的窗口代码中。里面有些命令我们是用不到的,所以不需要记住。“’”符号后面的内容是注释,不影响代码。
Option Explicit '这条语句是表示所用到的变量必须先定义,建议每次开头都加上这条语句,养成好习惯。
Private Sub Form_Load()
Dim a As Long
Dim b As Long '定义a,b两个整数型变量
Randomize Time '这个语句是让每次的随机值都不一样,如果不加,你测试的时候会发现,每次随机的值都是一样的,但是生成exe以后不会,所以只用于测试。
b = Int(Rnd * 99) + 1 'rnd是随机函数,游戏中非常常用,大家记住Int(Rnd * 99)这条语句是随机取0—98共99个整数,而我们要1—99的数,所以后边要加1。
Do’循环
a = InputBox("请猜一个数,此数为1-99之间。") '这条语句是让你输入一个数然后储存到变量a中。
If a = b Then 'a=b自然就是猜对了
MsgBox "猜对了!"
End '然后结束程序
End If
If a > b Then MsgBox "大了" 'if语句写在一行之内可以省去结尾的end if
If a < b Then MsgBox "小了"
Loop
End Sub
也许有人会问了,vb不是效率很低么?不是很多人都认为vb不能制作大型游戏么?
我要说的是,直接用vb来制作游戏,确实效率很低,这本没有错。这样就必须引出vb亲密的伙伴tv3d了。Tv3d全名TrueVision3D,是美国的一款免费的商业3d游戏引擎。其实tv3d也支持c++,Delphi等编程语言,只不过你学习别的编程语言至少也要1个月。Tv3d是以微软发布的dx作为底层,也就是运行效率和vb没有多少关系,vb只需要调用tv3d命令和一些表层数据的计算就可以了,其余的包括渲染,碰撞都是由tv3d完成,所以制作大型游戏完全没有问题,而且tv3d的效率还是相当高的。
Tv3d的官方网站是 http://www.truevision3d.com
6.3版本下载(特点,直接支持cs的bsp地图,以及mdl骨骼动画,并且附带很多基础的教程和例子)
http://www.truevision3d.com/downloads/download.php?go=2&file=16&mirror=23
6.5版本下载(特点,拥有更强大的特效,如水面反射、动态阴影、泛光、物理引擎等。支持win7)
http://www.truevision3d.com/downloads/download.php?file=28
我要教大家的就是6.5版本,一个更加高效率,更强大特效的版本。
之前的6.3版本使用的人已经很多了,也有很多人制作出了很棒的游戏。比如《梦幻战争》系列,这可是一个人制作的哦。
但是用6.5制作的游戏确不多见,主要原因就是因为例子和教程比较少,所以希望我的教程能够填补这一空白,使大家对6.5能有个进一步的了解。我们也来看看6.5强大的特效。
好,我们下载完成后安装,然后打开vb,点上面菜单中的工程,然后点引用。注意这是很重要的一步,如图,把tv3d的dll引用了,点确定,这样才能让vb能够调用tv3d。
像往常一样,我们先来个helloworld吧,来做我们的第一个tv3d程序。
下面是全部代码,直接复制替换即可,运行后我们会看到一个旋转的白色茶壶。看出来了么?这可是3D的哦,可不是那种不入流的2D了,我们已经步入了3D时代。
Option Explicit
Dim Tv As New TVEngine '调用tv3d所必需的
Dim Scene As New TVScene '调用tv3d所必需的
Dim Mesh As TVMesh '定义一个网格物体
Private Sub Form_Load()
Me.Show '显示当前窗口,每次都加上错不了
Tv.Init3DWindowed Form1.hWnd '用窗口模式启动tv3d
Set Mesh = Scene.CreateMeshBuilder '网格物体初始化,必加
Mesh.CreateTeapot '建立一个茶壶
Mesh.SetPosition 0, 0, 3 '设定物体的位置坐标
Do '主循环
Tv.Clear '清屏
Mesh.RotateY 0.001 '沿y轴以0.001每帧的速度转动
Mesh.Render '渲染茶壶
Tv.RenderToScreen '把所得最终结果渲染到屏幕
DoEvents '这句是把线程空出来,使其他的的程序能运行,必加
Loop
End Sub
B. Softimage 3D 基础教程之常用动画制作方法
Softimage 3D基础教程之常用动画制作方法
Softimage 3D是一款强大的三维动画制作软件,广泛应用于电影、电视、游戏等领域。在Softimage 3D中,制作动画通常涉及骨骼绑定、关键帧设置、动画曲线编辑等步骤。下面将详细介绍几种常用的动画制作方法。
方法一:骨骼绑定与关键帧动画
骨骼绑定是动画制作的基础,它允许你将模型的各部分与骨骼相连接,通过移动骨骼来驱动模型的动作。在Softimage 3D中,你可以使用内置的骨骼工具创建骨骼系统,并将其绑定到模型上。一旦骨骼绑定完成,你可以通过设置关键帧来记录模型在不同时间点的姿态。通过在关键帧之间插值,Softimage 3D会自动生成平滑的动画效果。例如,你可以创建一个角色行走的动画,通过在关键帧中设置不同时间点的腿部和上半身姿态,实现角色自然行走的效果。
方法二:动画曲线编辑
除了关键帧动画外,Softimage 3D还提供了强大的动画曲线编辑功能。通过调整动画曲线,你可以控制动画的速度、加速度和缓动效果,使动画更加生动自然。例如,在角色跳跃的动画中,你可以使用动画曲线编辑器来调整角色上升和下降的速度,以及跳跃过程中的加速度和减速度,从而创造出更加逼真的跳跃效果。
方法三:约束与表达式动画
Softimage 3D还支持约束和表达式动画,这两种方法允许你通过编程或预设规则来驱动动画。约束可以将一个对象的属性与另一个对象的属性相关联,从而实现复杂的动画效果。例如,你可以使用“跟随约束”让一个物体始终跟随另一个物体的运动。而表达式动画则允许你使用数学表达式来定义对象的属性变化,从而实现更加灵活和复杂的动画效果。例如,你可以使用表达式来控制角色眼睛的注视方向,使其始终看向特定的目标点。
综上所述,Softimage 3D提供了多种常用的动画制作方法,包括骨骼绑定与关键帧动画、动画曲线编辑以及约束与表达式动画。通过熟练掌握这些方法,并结合实际项目需求进行灵活运用,你可以制作出高质量的三维动画作品。
C. Softimage 3D 实例教程之做一张可乐的Map
softimage|3D在3.8以后,加入了Mental Ray渲染器,现在我们用Softimage|3Dv3.8sp2版来做一个可乐和冰块的练习,来感受一下她强大的功能。
去买一瓶可乐,做一张可乐的Map,如图:
驱动Softimage|3D,按中键进入,点击Draw/Curve/B-Spline(绘图/曲线/B样线条),我们要画一条相当于Max中的旋转建模的Line。以X轴为轴心,从原点开始,由下向上画出可乐的外型,按中键可以增加节点,总体轮廓画完后,可点击Edit/Delete、Add、Move Ponit(编辑/删除、增加、移动节点)等慢慢修改,最后如图所示:
选取Info/Selection(信息/选择)把Step(步幅)该成4,按OK退出。Step是控制点与点之间的划分数,如果数值太大了,会增加模型的复杂度。占用系统的资源。
选取屏幕左上方的Preferences/Create Modelling Relation(优先设置/创建交互建摸),在瓶体旋转成型后,如果有什么满意的地方,仍然可通过修改B-Spline来完成。
旋转瓶体,点击Surfance/Revolution(表面/旋转),如图设置控制面板
瓶体选择为Path(面片)的B-Spline类型,
Axis of revolution旋转坐标轴为Y轴
Degree(角度)为360度
Subdivision(细划分)设为15,在圆周上设置15个节点,
Step(步幅)设为4,即两节点之间的线段划分是4,那么,瓶体就是Subdivsion*step(15*4=60),
设的值越大,瓶体越光滑,但面数就更多,占用的空间也就更大。
选择Close(关闭)关闭图形,形成一个封闭的实体。
把摄像机视图该成Shade(实体)方式显示,结果如图:
看瓶体有什么不满意的地方,修改B-Spline线条。但我们可以看到,可乐瓶顶端有一个黑洞,这是因为V轴没有封闭的缘故,现在我们可不喜欢这样。点取Info/Selection(信息/选择),封闭V轴的底部和顶部。如图:
好了,给你的可乐瓶加上材质吧。但我们发现一个问题,瓶体用的是圆柱型贴图,上方的红色会白色的罐面盖住,虽然可用多边型贴图,但为了方便制作罐面的细节,干脆让它从瓶体分离出来。
选取Draw/cut(绘图/修剪),白色罐面和红色交界的经线上点击,结果又生成两个物体,把原来的瓶体删除掉(快捷键是鼠标右键+Backspace键),把分离的两个物体用Null(空物体)联结起来,选取Get/Primitive/Null(选取/内建物体/空物体),空物体是不可见的。
选取Prent(父级)再在图解视图点区分离的瓶体,结果,两个物体都变成了Null的子物体。按Esc键退出Prent(父级)选择模式,点击Trans Y(在Y轴移动)把NUll移到瓶体体的中间。按住空格键+鼠标右键,把Null和分离的瓶体都选中。
把做好了的Map存成Tga格式或是Tiff格式,记住!不要起中文名字,在Softimage里面全会变成框框,看不清文件名。按F5进入Tools工具模块。把文件引进Softimage。
选取Imput/Images/Targa或Tiff(引进/图片/Tga图片或Tiff图片,看你存成什么格式图片)
出现输入对话框,双击次根目录,退到你安装Softimage的盘后,如我是在F盘装的,双击..直到F盘后,再到你存的目录下面找你的贴图文件,切记!不然以为自己的电脑死机了,找到后按OK键,有会出现对话框,问你是否要该名,如果不要的话,直接按OK。
贴图转进来了,现在我们要到Matter模式下加上材质,按F4或直接在标题栏按Matter,标题栏的颜色又改变了,点取Material(材质库),出现Material Editor控制面板。
Shading Mode(材质模式)为Phong
Specular(高光区)为R500,G500,B500
Ambient(背光区)为R0,G0,B0
Diffuse(缺省区)为R0.8,G0.8,B0.8
Specular Decay(反射区衰减)值为300
Reflectivity(反射率)值为0.2
按OK确认。现在,罐面和瓶体都是灰色金属材质,点取瓶体(空格键+鼠标左键),如果还选择了其他物体,先按空格+中键取消。
选取Texture/2D Global(贴图纹理/2D全域)命令,设置对话框:
在中间上方第二个Select(选择)找到刚才转进的贴图,
Mapping Method(贴图方式)为Cylindrcal Coordinaes(圆柱式),其他不必修改。按OK键退出,
到TXT编辑模式,在屏幕右下角按TXT键,在Y轴缩小到0.95,按Trans Y(在Y轴移动),把贴图轴移到顶部对齐,因为下面白色底部是没有图案的,按如果你的瓶体画的比例和我画的不太一样,可再改Y轴数值,直到满意为止。
要预览图片,先设置好参数,按Preview/Setup(预览/设置)
打开Mental ray2.1渲染器
Anti-Aliasing(抗锯齿)设为On,弹出对话框,击活Active(有效的)最大采样和最小采样该成2和-2.按Accept (同意)退出,选择Preview/All,看到没有设灯光的效果,怎么样?有初步成果了,开一瓶可乐先庆祝一下吧。
灯光在三维中占了很大一部分,一个好的作品,离不开灯光的造型设计,而在Softimage中,定义有一个环境色,它的RGB值为0.3,使得我们的画面,整体涂上了一层灰色,在很多情况下都不是我们所需要的,所以,在每次进行创作前,把环境色先关掉,倒是一个好主意。在Matter模式下,选取Atmosphere/Ambience(大气/环境色),打开对话框,把RGB都该为0。
现在我们先给场景打上聚光灯和点光源,不要老是看到黑黑的场景。选择Light/Define(灯光/定义),弹出灯光设置的控制面板。按如下设置:
聚光灯设置:点取Spot类型,RGB颜色各为1
Start Falloff(开始衰减)为20,End Falloff(结束衰减)为35
Cone Angle(椎型角度)为35,Spread Angle(分离角度)为25
击活Area Light(Mental ray)(区域光源),以Rectangle(矩形区域)UV值为8,
Shadow Type(阴影类型)为Soft(柔和)Umbra强度为0.4,Penumbra Factor(半影因子)为1
再建一个点光源,选择为Point(点光源)类型,
RGB值为0.493,0.493,0.532
Start Falloff(开始衰减)为16,End Falloff(结束衰减)为25。
拷贝一个点光源,选择Duplicate/immediate(复制/直接复制)选择新建的点光源,就在原地产生了一盏和点光源一样属性的点光源。
按快捷键V,在三维空间移动这三盏灯光,调到自己喜欢的位置
预览图片,现在已有一点效果了#p#副标题#e#
现在,该给罐面添加细节了,仔细观察,发现文字和凹纹虽然不是看得非常清楚,但也是不可缺少的,有一丁点错误,眼睛都能发现。通过凹凸贴图来实现细节是一个事半功倍的好方法,但拉环如果能用建模的方法画出来,效果会更好。我们就用其他绘图工具做三张如下贴图,做好以后存成Tga图片,用上次所讲方法,转成Pic格式的图片待用。
di.tga
d2.tga
d3.tga
回到Softimage,选取罐面,选取Texture/2D Global(纹理/二维全局)设置控制面板。
步骤一:在中间上方第二个Select装入d1.pic,Mapping Method(贴图方式)该为XZ Coordinates(XZ平面贴图),按Preview,发现贴图翻过来了,按第三个贴图重叠方式,
步骤二:在Blending栏里Overall Blending(综合融合)的值关掉,去除纹理的影响,我们只需要凹凸作用,Roughness(粗糙)的值设为5,再按Preview预览。发现贴图坐标偏大一些,要把它该小一点,选择OK退出控制棉板,回到TXT贴图编辑模式,把X轴和Z轴该成0.95。
回到控制面板,按Nexit添加剩下的两张d2.pic和d3.pic,重复以上步骤,只是把Roughness(粗糙)值设为-2和-20。如果要回到上一张贴图,按Nexit旁的 Previous。因为每一张贴图都有它自己的贴图坐标,所以一张图设置完成后,都要退出控制面板去缩小贴图坐标。材质设定好以后,我们可以看到如下的画面:
好了,可乐罐画完了,庆祝一下,把可乐开了畅饮一番吧。#p#副标题#e#