用VB和TV3D轻松制作3D游戏教程2灯光材质贴图 灯光材质贴图

第二章灯光材质贴图

在上一章里,看到的白色茶壶就是没有任何材质贴图的物体,我们要让它好看,就必须加入材质贴图和灯光。

首先加入贴图吧,就以这张名为pic.jpg贴图为例,大家可以把图片保存到程序目录并改名。

首先我们要添加一个tv3d的贴图库

Dim TF As New TVTextureFactory '添加一个贴图库

然后要指定图片的读取目录

Tv.SetSearchDirectory App.Path'设定贴图读取目录为当前目录

把贴图读取到贴图库

TF.LoadTexture "pic.jpg", "pic" '读取名为pic.jpg的贴图,并命名为pic

为了能更好的展示贴图,我们把模型换为球体,其他相关代码如下:

Mesh.CreateSphere 1'建立一个半径为1的球

Mesh.SetTexture GetTex("pic") '赋予物体pic贴图

运行一下


这样就ok了,很简答吧,一共也就4-5行代码。

有光照效果才能更真实,我们要给它加上光照,而要让光照的效果发生作用就必须要有材质。

同理,和添加贴图一样,先添加库。

Dim MF As New TVMaterialFactory ''添加一个材质库

Dim LE As New TVLightEngine '添加一个灯光库

然后设置材质,相关代码:

MF.CreateMaterial "solid" '建立名为solid的材质

MF.SetAmbient GetMat("solid"), 0, 0, 0, 1'环境光

MF.SetDiffuse GetMat("solid"), 1, 1, 1, 1'扩散光,即物体的固有颜色

MF.SetEmissive GetMat("solid"), 0, 0, 0, 0'自发光

MF.SetOpacity GetMat("solid"), 1 '不透明度

MF.SetSpecular GetMat("solid"), 1, 1, 1, 1'高光色

MF.SetPower GetMat("solid"), 60 '散射强度

然后把材质赋予物体

Mesh.SetMaterial GetMat("solid") '赋予物体solid材质

这样材质就完成了

添加灯光就更简单了

灯光有三种,分别是平行光、点光源、聚光灯。

平行光就是全场景只有一个方向的光,如果我们的游戏是在室外场景,就应该采用平行光。

建立平行光:LE.CreateDirectionalLight Vector(平行光的方向向量), r, g, b,灯的名字, 高光范围

其中向量不懂的话可以百度,也可以等高中学习了立体几何自然就懂了。Rgb是灯光的红绿蓝三色的比例,可以取0-1的值。

点光源,就像我们室内的白炽灯,光线是从一个点向外扩散出去的,用在室内效果比较好。

建立点光源:LE.CreatePointLight vector(光源位置坐标),r,g,b, 半径,名字,高光

聚光灯:就像探照灯那样,光线路径是一个圆锥,cs中的手电筒就是用聚光灯做的。

建立聚光灯:LE.CreateSpotLightVector(位置), Vector(方向), r, g, b, 半径, 光锥衰减外角,光锥衰减内角,名字, 高光

我们一般做游戏就用平行光好了,所以这里只建立一个平行光,名字如果不需要调用是可以空着的。

LE.CreateDirectionalLight Vector(1, -1, 1), 1, 1, 1, ,1'添加一个平行光

同时,我们可以把灯光的高光打开。

LE.SetSpecularLighting True '高光开关

然后让光对物体起作用

Mesh.SetLightingMode TV_LIGHTING_NORMAL’这个最常用的灯光模式

还有另外两种常用的灯光模式

Mesh.SetLightingMode TV_LIGHTING_NONE’就是灯光对物体不起作用

Mesh.SetLightingModeTV_LIGHTING_BUMPMAPPING_TANGENTSPACE’这种模式是为法线贴图准备的效果更精细些,但是速度较慢。

好了一切完成,全部代码如下,我们测试一下。为了能让大家看得更清楚,我加了一个垂直同步的语句,目的是为了把刷新频率降下来,和屏幕的刷新频率一致。不然在我的电脑上,每秒钟刷新的频率是8000帧,太浪费cpu了。


用VB和TV3D轻松制作3D游戏教程2灯光材质贴图 灯光材质贴图

Option Explicit

Dim Tv As New TVEngine '调用tv3d所必需的

Dim Scene As New TVScene '调用tv3d所必需的

Dim Mesh As TVMesh '添加一个网格物体

Dim TF As New TVTextureFactory '添加一个贴图库

Dim MF As New TVMaterialFactory ''添加一个材质库

Dim LE As New TVLightEngine '添加一个灯光库

Private Sub Form_Load()

Me.Show '显示当前窗口,每次都加上错不了

Tv.SetSearchDirectory App.Path '设定贴图读取目录为当前目录

Tv.SetVSync True '垂直同步开关

Tv.Init3DWindowed Form1.hWnd '用窗口模式启动tv3d

TF.LoadTexture"pic.jpg", "pic" '读取名为pic.jpg的贴图,并命名为pic

MF.CreateMaterial "solid" '建立名为solid的材质

MF.SetAmbient GetMat("solid"), 0, 0, 0, 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'添加一个平行光

LE.SetSpecularLightingTrue '高光开关

Set Mesh = Scene.CreateMeshBuilder '网格物体初始化,必加

Mesh.CreateSphere 1'建立一个半径为1的球

Mesh.SetTexture GetTex("pic") '赋予物体pic贴图

Mesh.SetPosition 0, 0, 3 '设定物体的位置坐标

Mesh.SetMaterial GetMat("solid") '赋予物体solid材质

Mesh.SetLightingMode TV_LIGHTING_NORMAL'这个最常用的灯光模式

Do'主循环

Tv.Clear'清屏

Mesh.RotateY 0.01'沿y轴以0.01每帧的速度转动

Mesh.Render'渲染茶壶

Tv.RenderToScreen'把所得最终结果渲染到屏幕

DoEvents '这句是把线程空出来,使其他的的程序能运行,必加

Loop

End Sub

接下来我们可以自己做一些调试,我会先领着大家做一些简单的调试,但是以后就需要大家自己去调试了。拿到一段代码,你可能不了解它具体的原理,但是你可以修改修改里面的数据,看看什么发生了变化,自然就知道它究竟是干什么的了。要想自学编程就需要这种探究精神,不然你绝对学不好。

比如光照模式改为TV_LIGHTING_BUMPMAPPING_TANGENTSPACE

MF.SetPower GetMat("solid"), 5'散射强度设为5


MF.SetEmissive GetMat("solid"), 1, 0, 0, 1'自发光设为红色


LE.CreateDirectionalLight Vector(1, -1, 1),0, 0, 1, , 1'将光源的颜色变为蓝色

另外修改不透明度不会起作用,这个等我们学习高阶教程,渲染半透明物体时,我再详细给大家讲。

  

爱华网本文地址 » http://www.aihuau.com/a/25101010/22709.html

更多阅读

2015年好玩的3D游戏有吗 3d网络游戏哪些好玩

2015年好玩的3D游戏有吗——简介畅游代理的韩国网游《灵魂回响》由《天堂》系列原班核心人马打造而成,游戏自韩国公测以来热度不断激增,创下月吸金40亿韩元的业绩,打破了Ncsoft近年来的垄断。2015年好玩的3D游戏有吗——方法/步骤2015

用PhotoShop和ImageReady制作Gif动画图解 精 photoshop imageready

相信大多数人都看到过各大网站首页都有不断切换的动画图片宣传效果很不错,但是苦于自己不是电脑专业,不能设计。在这里,我就教大家怎么制作简单的两帧Gif动画。(特别适合网站编辑人员吆) 首先,要选定想要切换播放的背景图片两张。用Pho

2014年到2015年最好玩的3D游戏 好玩3d网络游戏

2014年到2015年最好玩的3D游戏——简介(Echo of Soul)是一款由韩国Nvius公司研发,Hangame公司代理运营的大型3DMMORPG网游,国内暂无代理消息。该游戏公测后一路飘红,一个月后依然稳居韩国网吧排行榜前10,保证了其不减的人气。2014年到201

用圆规和直尺画出的美丽图案四 只用圆规画出美丽图案

用圆规和直尺画出的美丽图案(四)——简介用圆规和直尺可以画出很多美丽的图案,现在再给朋友展现一个图案的制作过程。用圆规和直尺画出的美丽图案(四)——工具/原料圆规 直尺 橡皮用圆规和直尺画出的美丽图案(四)——方法/步骤用圆规和直

3D动画制作软件及教程 3d室内动画制作教程

发表日期:2006年2月24日本页面已被访问 7512 次3D动画制作软件及教程点击下载基础教程步骤1:插入文字我们要做的第一件事是决定要使用的文字。在本例中,我们使用了两个文字块:"COOL" 和 "3D"。有三个方法可以打开「插入文字」对话框:单击

声明:《用VB和TV3D轻松制作3D游戏教程2灯光材质贴图 灯光材质贴图》为网友逆风方向分享!如侵犯到您的合法权益请联系我们删除