用VB和TV3D轻松制作3D游戏教程5 场景的制作与读取
标签:
tv3d3d游戏制作vb教程制作3d游戏杂谈 |
分类: 程序教程 |
第5章 场景的制作与读取
一般3d游戏的场景都是用3dmax制作的,如果你会再好不过,如果不会也可以自学一点,至少能够使用现成模型也好。网上的场景模型还是很多的,我就随便用3dmax做了个场景示范一下。
模型做好后要导出成tv3d支持的格式,6.5中将场景格式统一加密成后缀为tvm的文件,将带动作的模型统一加密成后缀为tva的文件。你可以导出成3ds格式然后再用modelconverter进行转化,也可以用导出插件直接导出成tvm格式。
1、导出成3ds格式就不说了,导出后运行6.5目录下的tools\modelconverter\Converter-GUI.exe
如果无法打开,说明你的电脑没装net framework,下载安装即可,这也是我为什么不喜欢用.net编程的原因,现在装了net framework的电脑还是少数,而且它的体积还如此之大,很不方便。
点右边的Browse,选择刚才的3ds文件,如图配置即可。
http://s11/middle/6374fbb1hb523fef0f13a&690场景的制作与读取" TITLE="用VB和TV3D轻松制作3D游戏教程5
2、6.5目录下,plugins文件夹下有各个软件的导出插件。
比如你用3dmax8,就把plugins\3dsmax 8.0目录下的TV3DExport.dle放到3dmax目录下的plugins文件夹中即可。
另外还需要把6.5的sdk\cppdll\tv3d65.dll拷贝到3dmax的根目录下
然后就可以导出tvm,tva格式了,导出tvm如下设置即可。
http://s3/middle/6374fbb1hb52415f6b932&690场景的制作与读取" TITLE="用VB和TV3D轻松制作3D游戏教程5
由于需要观看场景了,所以我们还是把窗口弄大些,比如把窗口的height值设为9480,width值设为12120.基本上这就是800*600像素的大小。
读取的代码:
Mesh.LoadTVM "123.TVM"
最后别忘了渲染。
效果如图,如果需要例子中的场景可以到http://115.com/file/beliibw8#下载,解压放在游戏目录中:
http://s8/middle/6374fbb1hb524317e58f7&690场景的制作与读取" TITLE="用VB和TV3D轻松制作3D游戏教程5
全部代码如下:
Option Explicit
Dim Tv As New TVEngine '调用tv3d所必需的
Dim Scene As New TVScene '调用tv3d所必需的
Dim Mesh As TVMesh '添加一个网格物体
Dim Inp As New TVInputEngine
Dim TF As New TVTextureFactory '添加一个贴图库
Dim MF As New TVMaterialFactory ''添加一个材质库
Dim LE As New TVLightEngine '添加一个灯光库
Dim Mx As Long, My As Long, B1 As Boolean, B2
As Boolean, Roll As Long
Dim Camera As New TVCamera
'定义一个摄像机,相当于人的眼睛
Dim CameraPozX As Single, CameraPozY As Single, CameraPozZ As
Single '摄像机位置坐标
Dim CameraAngX As Single, CameraAngY As Single
'摄像机角度
Private Sub Form_Load()
Me.Show '显示当前窗口,每次都加上错不了
Tv.SetSearchDirectory App.Path '设定贴图读取目录为当前目录
Tv.Init3DWindowed Form1.hWnd '用窗口模式启动tv3d
Inp.Initialize
Tv.SetAngleSystem TV_ANGLE_DEGREE
TF.LoadTexture "pic.jpg", "pic"
'读取名为pic.jpg的贴图,并命名为pic
Atmos.SkyBox_SetTexture GetTex("SKYBOX_Front"),
GetTex("SKYBOX_Back"), GetTex("SKYBOX_Left"),
GetTex("SKYBOX_Right"), GetTex("SKYBOX_Up"), GetTex("SKYBOX_DOWN")
'设定贴图
Atmos.Fog_SetColor 1, 1, 1
Atmos.Fog_SetParameters 10, 60,
0
Atmos.Fog_SetType TV_FOG_LINEAR,
TV_FOGTYPE_PIXEL
MF.CreateMaterial "solid" '建立名为solid的材质
MF.SetAmbient GetMat("solid"), 0.1, 0.1, 0.1,
1
MF.SetDiffuse GetMat("solid"), 1, 1, 1, 1 '扩散光,即物体的固有颜色
MF.SetEmissive GetMat("solid"), 0, 0, 0, 1
MF.SetOpacity GetMat("solid"), 1 '不透明度
MF.SetSpecular GetMat("solid"), 1, 1, 1,
1
MF.SetPower GetMat("solid"), 60 '散射强度
LE.CreateDirectionalLight Vector(1, -1, 1),
1, 1, 1, , 1
Set Mesh = Scene.CreateMeshBuilder '网格物体初始化,必加
Mesh.LoadTVM "123.TVM", True, True
Mesh.SetLightingMode TV_LIGHTING_NORMAL
Mesh.SetMaterial GetMat("solid")
'设定摄像机
Camera.SetRotation CameraAngY, CameraAngX, 0
Camera.SetPosition CameraPozX, CameraPozY,
CameraPozZ
DoEvents '这句是把线程空出来,使其他的的程序能运行,必加
Loop
End Sub

加载中…