最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

SYJ教你制作3D游戏1-6

IT圈 admin 35浏览 0评论

2024年2月20日发(作者:南雪萍)

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视图中看到这

个正方体的透视图,甚至是每个面,我们应该不难发现,所有的三维模型都是由三角形块面构成的。

我们制作完成了一个正方体,我们可以把它当做是椅子的主要部分,就是我们坐的地方。可是这个部分应该是一个扁正方体,所以我们有必要把它压一下。点“顶点模式”,这时我们可以看到视图中的模型出现了黄色的小点,这就是每个三角形块面所衔接的地方。我们先把正方体移动到坐标中央,也就是正方体中心的坐标在原点之上。点“移动”工具,在2D俯视图中选择整个正方体,使所有的顶点变红色,即被选中状态,按住这时出现的指标箭头不放并移动鼠标即可拖动被选择的顶点,即整个正方体,移动至指标箭头与横坐标轴和纵坐标轴重合;同样在平视图中使正方体居中。

如果大家感觉移动得不是很顺手,可以再编辑视图下方看到有几个可以输入本文的方框,那里是输入所选顶点坐标位置的地方,大家可以尝试把所有坐标的值设为0,按一下回车,正方体就乖乖地跑到中间去了。

现在,该是把正方体压扁的时候了,用 “缩放”工具在平视图,即左下方的视图中,选择整个正方体,此时出现指标箭头,按住纵坐标的蓝色箭头,并向上或下移动鼠标,看看正方体发生了什么变化?它的高度在增加或者缩减,而长和宽没有改变。我们把它的高缩小吧。

现在,我们开始制作椅子的四条腿,制作方法同样由建立正方体开始,然后用“顶

点模式”和“移动工具”在吸附作用下通过调整各顶点缩放正方体,使它的长和宽变小,且其比例保持1:1,并增加高度,具体原因如果你还不懂的话,则说明你还不懂椅子的腿是长什么样的。最后通过“编辑”“复制所选”以及“粘贴”功能克隆四条腿,分别移动至相应位置。如果大家还不清楚的话,请看下图,即做到此步骤时的完成图:

第一节教程到此结束。

还记得上一节我们学习的内容吗?我们学习了基本模型的创建、顶点的选择和移动以及缩放等等,而且我们还制作好了一张简单的椅子。现在,我觉得我们做出的椅子太简单了,坐着不够舒服,应该再加个椅靠,就是我们坐在椅子上的时候往后靠的东西,如果没有这个东西的话,那么大多数人即会弓着腰坐,一点也不舒服。对于椅靠的做法,我这里就不多说明了,相信上一节课所学习的内容已经足以让学习者拥有自己建造的能力。在做椅靠的时候要注意调整一下上部的顶点使其向外稍稍倾斜,这样做出来比较像一些。如果听不懂我说什么,请看完成图:

嗯,这样看起来就像多了,当然,如果大家感觉咱们教室的椅子坐久了不舒服的话,我们再加上一个软坐垫,注意,做坐垫的时候要给它看起来有“软”的感觉,该怎么做呢?其实很简单。

再建立一个立方体,并使它不要和我们先前做好的椅子重合,并用“顶点模式”选中该立方体上方的四个顶点(可在左下2D视图中选择),切换至“缩放”工具,并在俯视图中将选中的四个点缩小,上方四个点所构成的面积与下方四个未编辑的点所构成的面积大概1:1.2左右,并把整个所建的立方体压扁。先别急着调整整个模型横截面的大小,我们可以把它当做是坐垫的基本轮廓,现在,我们来把它做“软”。

大家可以看到,在工具栏上有一个“细分面”、“挤压”和“翻转法线”的工具,但是我们却不能选择它们,为什么呢?我们试着选择“三角型模式”,现在我们发现,它们现在可以选择了,由此,我们可以推出一个结论,这三个工具只能在“三角型模式”中可用。

现在,我们保持“三角型模式”,并选择整个坐垫,点一下“细分面”工具,看看发生了什么变化?哈哈,坐垫变“软”了,再点一次“细分面”工具,我们发现,它变得更“软”了。实质上,“细分面”工具只是让所选模型的面数增多而已,并使所增多的面能够自动平滑衔接,这样一来,我们的坐垫中所有的尖角部分亦都被变成了曲面,所以看起来就有了“软”的感觉。不过,大家不要疯狂地无数次按下“细分面”工具,否则你的机器会吃不消,因为过多的块面会增加硬件的负担,所以大家要注意了,如果你的电脑配置不是很好,那么我们以后所做的模型块面越少越好。

我们把做好的软坐垫适当缩放,再移动到座椅上,这样看起来就舒服多了,完成图如下:

嗯,好看多了,非常令人有成就感的作品完成了!

我们是否已经对Med模型编辑器感觉到厌倦了呢?那么我们将在下一节课学习Sed脚本编辑器,不过这并不代表我们对Med模型编辑器的学习仅此而已,我

们只不过是学会了最简单的模型构建,以后还会教大家做一些更复杂的模型,比如人物,花草树木等等,而且我们必须要学会如何运用贴图材质,即给我们做的3D模型上色。万事开头难,下一节课我们会从最简单的Lite-C语句学起,所以大家不要紧张,其实编程很简单。

本文由SYJ原创,如需转载,请注明作者

我们开始学习Lite-C语言编程

首先,我们来学习如何设置游戏运行的环境,比如,设定游戏画面的尺寸大小,即分辨率,运行时保持全屏模式还是窗口模式,以及背景色,帧率等等。我们先来学习动作函数。

打开Sed,在“选项”“参数设置”中,将“用来运行/发布的主脚本”设置到GS安装目录下的acknex.h文件,即X:……GStudio7includeacknex.h,设置好后点确定,准备工作完毕。

我们点一下工具栏上的黑三角形“测试运行”按钮,看看有什么效果。

屏幕上出现了Lite-C脚本读写向导,这时是读写脚本的步骤,如果该向导检查到脚本有错误,就会停止加载或者自动退出。等待读写完毕后,就执行预览。

我们看到预览框里什么也没有,背景是黑色的。这里,我们可以得出结论,默认情况下背景颜色是黑色的。

我们来输入一下代码:

function main()

{

screen_ = 200;

}

这是一条极为短小的代码,但同时它也是一个完整的Lite-C程序。我们先来看看function main(),function表示定义一个动作函数,后面紧跟的main表示这个函数的名字,我们发现这两个词的颜色是蓝的,而不是通常的黑色。这表示function和main是特殊字符,即Lite-C事先定义好的字符。我们尝试把main改成其它字符,比如screen_setting,这时我们发现它变成了灰色。我们又得出结论,main是一个特殊的函数,它用于执行主要、重要命令。我们可以把main看做主函数,而其它如screen_setting等在Lite-C中非预先定义的一切字符看做副函数,用于执行次要命令。

那么,在Lite-C中,函数是什么呢?函数后面紧跟的中括号{}里面代表该函数所包括的内容,即程序执行的动作。

我们再来看screen_ = 200;这句话,意思就是说设置画面背景色为红色,200可以看做颜色的纯度。如果我们把它设为50,再运行,那么我们会发现红色的亮度会减小,设为250则看起来更鲜艳。当我们选定这句话时,会看到Sed下面会有个命令帮助,大家可以看一下。关于背景颜色,我们还可以设置为绿色green,蓝色blue,大家可以实践一下。颜色后面紧跟的数字呢,范围在0至255,如果数值不在这个范围以内,则指令无效。另外,如果我们想把背景颜色设为除红、绿、蓝以外的颜色,我们该怎么办呢?

把源代码替换为:

function main()//定义主函数

{

vec_set(screen_color,vector(200,0,200));//设置背景颜色为淡紫色

}

运行一下,我们发现,背景颜色变成了淡紫色。

我们来看代码。vec_set(screen_color,vector(200,0,200));这一句,vec_set是一个设置的命令,vector表示向量,括号里面的三个数值分别表示蓝,绿,红的纯度,大家可以尝试不同的组合得到不同的颜色。

另外,我们发现,在一些指令的后面加入了双斜杠//,这是注释的意思,后面可

以接上对此命令的解释,不过只能以单行来写。如果要写多行的注释,则可用/*在这里注释*/来表示。

好了,我们下一节课学习如何更改屏幕尺寸大小。

第三节教程到此结束。

本文由SYJ原创,如需转载,请注明作者

这节课我们学习窗口属性的设置。

打开我们上次学习的文件,在主函数中添加以下一段代码:

screen_size.x = 800;

screen_size.y = 600;

这句代码的意思相信大家如果英语水平不错的话应该能很快理解,即设置屏幕尺寸的宽度为800像素,高度为600像素。我们运行一下,是不是感觉预览窗口的大小变化了?

我们将这段代码替换为:

video_mode = 7;//800*600

在运行脚本,我们发现,窗口的大小没有改变。这句video_mode表示窗口尺寸模式,后紧跟的数字表示各种屏幕分辨率,大家可以参考帮助文件获得相关取值规则如下:

1 320x200 (window only)

2 320x240 (window only)

3 320x400 (window only)

4 400x300 (window only)

5 512x384 (window only)

6 640x480, 640x400, 640x352

7 800x600, 720x480, 848x480 (default)

8 1024x768, 1024x600

9 1280x1024, 1280x800, 1280x720

10 1400x1050, 1440x900

11 1600x1200, 1680x1050

12 1920x1200, 1920x1080

我们在主函数中再添加一句代码:

video_screen = 2;

这段代码即窗口模式命令,后面的数字如果是1,则表示全屏模式,数字为2,则表示窗口模式(默认),大家可以尝试一下。

现在,我们来学习一个更简便的代码,它同时包括video_mode,video_screen这两个命令,而且还提供设置颜色质量。将源代码:

video_mode = 7;

video_screen = 2;

替换为:

video_switch(7,32,2);

其中,括号内的三个数字分别表示我们刚刚学习的video_modo的值,颜色质量(16位色或32位色等),video_screen的值。一句代码就全都概括了,是不是很简便?

在主函数中添加以下代码:

fps_max = 20;

fps即每秒播放的帧数,最大值不可超过20。大家可以设定10至400的值,默认是240。现在,如果测试运行脚本的话大家不会看得到变化的效果,以后当我们引用三维场景进行测试的时候大家可以把它设为15或是100看看操作手感有什么变化。

好了,关于预览窗口的基本属性设置大概就是这些了。我们学习这些今后可以用到游戏中屏幕分辨率的设置,帧率的限制设置等等。

下一节课我们继续回到Med的学习,并研究如何给我们的3D模型上材质

第四节教程到此结束。

本文由SYJ原创,如需转载,请注明作者

这节课我们用Med来制作一个简单的正方体,并给它加上材质,也就是上色。

打开Med,创建一个立方体,使其居中于三维坐标。

下面,我们来考虑如何绘制材质。首先,我们要了解贴图的使用规则。在3D

gstudio中,我们只可以使用BMP,PCX,TGA和DDS格式的图像文件作为材

质,而且,这些图像的大小也有一定限制,即长和宽的像素数值一定是2的二次方,如64,128,256,512,1024等,也就是说我们所绘制的材质大小必须为128*256或者512*512等等,而不能是400*300或者100*250。

我们知道,正方体有六个面,所以我们再绘制材质时,要绘制的内容即六个正方形。如图,这是我绘制的两张正方体材质:

(图片:材质A)

(图片:材质B)

这两张图片的分辨率分别是64*256,以及256*256,这些数字都是2的二次方,也就是说符合要求了,而且用到材质的话效果是一样的。但是,这两张图片有什么区别呢?

我们不得不来研究一下电脑的硬件,虽然这与3D gstudio的学习貌似无关。我们首先要明白,电脑中是靠什么进行3D加速的。

在电脑硬件中,3D加速的硬件是显示卡。而显示卡又由GPU核心,显存颗粒等等组成于PCB集成电路板中。我们来了解一下显存颗粒的作用。显存就是即时存放3D材质等的地方,显卡的显存大小可以在didxag诊断工具里查看,显存越大,则可以存放的3D材质越多,或者分辨率越大、质量越高,那么3D质量就会越好,当显存相对太小,不足以存放太多3D材质时,则就会造成3D处

理拖延,也就是我们平常说的“卡机”。

所以,我们在做3D材质时,要充分考虑当前显卡显存大小与材质的关系。

由此,我们看上图,材质A的分辨率明显比材质B的分辨率要低得多,而且效果没什么两样,所以我们绘制材质时要充分节约显存资源,避免材质B中空余部分过多。

我们开始将材质用于我们的立方体模型中。

在Med中,点“对象”“管理皮肤”“新建皮肤”在皮肤设置中点“纹理”的勾,并在“纹理文件”选择好材质A,关掉“皮肤设置”,这时我们看到在列表中多了一个皮肤1,选中它,点“皮肤编辑器”

这时,我们看到皮肤编辑器窗口的左边是一张我们的材质A贴图,右边是我们创建的立方体模型。

我们现在给立方体的其中一面上色,比如说,选“三角型模式”,并在左下角的平视图中选择正方形的最上面一条边,使其变成红色,点“对象”“生成贴图”“六面”,由于我们之前所选的立方体的面是位于上顶的面,因此我们选中“顶”,并点“确定”。回到皮肤编辑器,这时我们发现在皮肤编辑器左方的皮肤映射设置中出现了一个平面,这里的操作方式是2D的,大家可以使用顶点操作模式或

是块面操作模式使用选择、移动等工具把平面缩小至能容纳每一个面的程度,并放置于相应位置,操作方法相对简单,这里我就不详细说明了。至于其它的面,在创建六面贴图的方位选择中,大家可以参考下图解说:

(它们位于四个视图的左方,上面的是俯视图,下面的是平视图)

最终完成图如下:

嗯,看起来不错,现在关闭皮肤编辑器。大家同样可以在3D视图中看到已经上材质的效果,选中所有面,点“文件”“引擎预览”,等待建造以及渲染模型过程完毕后,即可看到预览窗口中所呈现的模型,大家可以按住鼠标右键并移动旋转视图,并按方向键或W、S、A、D移动视角。

下一节课我们继续回到Sed的学习,并开始研究如何插入文字、图片等各种基本元素。

第五节教程到此结束。

本文由SYJ原创,如需转载,请注明作者

现在,我们开始来学习如何在引擎(3D gstudio默认使用Acknex引擎)中插入图片,或者文字。

我们先来了解一下预览窗口的一些基本属性,大家请看下图:

在图中,我标注了一个平面坐标,大家可以分析看看,这很像我们学数学的坐标系的第四象限,只不过y轴是反向的。

我们在第三、第四节课已经学习了如何设置预览窗口的一些基本属性,并对窗口分辨率设为了800*600像素。那么我们准备插入的图片大小也要在屏幕分辨率的范围以内,否则便不能全部显示。在这里我准备好了一张bmp格式的风景图片,命名为“”,分辨率是400*300。这张图片的长和宽都小于窗口长和宽,也就是说这张图片符合引擎的要求了。这张图片如下:

在Sed中打开我们第三、第四节课所学习的脚本文件。为了方便管理,我们把这个脚本文件命名为“”,并新建一个名为“game”的文件夹,把“”和“”均放到里面去,使它们处于同一根路径下。

我们有几种引用图片的方式,先来看第一种。

在中的主函数以外添加以下一段代码:

PANEL* img_picture =

{

bmap = "";

}

我们来看代码,PANEL*表示定义一个面板元件。面板元件包括文字、图片、交互按钮等2D元素。后面紧跟的是所定义的面板元件名称,这里我把它命名为img_picture,大括号内即面板内容。bmap = "";一句表示在面板中引用同一文件路径下的“”图像文件,我们测试运行一下看看有什么效果。

噢!我的天!预览窗口什么也没有。是我代码写错了吗?确实,我们虽然正确引用了图像文件,但是我们忘了告诉引擎让这张图片显示出来。我们在引用图像代码后再添加一句代码:

flags = OVERLAY | VISIBLE;

这句代码的意思是让面板中调用的元素显示出来,这下应该没问题了吧。我们运行看看,虽然我有点紧张,不过我们确实看到了预览窗口的左上角呈现出了我们所引用的图片。我们成功了!不过,请别高兴得太早。如果我要求让这张图片显示在屏幕中央或者别的位置,而不是左上角,该怎么办呢?我们在引用图像文件前再添加以下两句代码:

pos_x = 200;

pos_y = 150;

相信大家能从x和y这两个字母很快理解这两行代码的意思。理所当然是给我们引用的图像定一个显示位置,后面的数字所表示的东西请看下图:

相信大家会很快看懂。那么我们该怎么样才能知道使这张图片居中于窗口的坐标各是多少呢?很简单,看这个公式:元素的横或纵坐标位置=(窗口的横或纵尺寸-元素的横或纵尺寸)/2。有点像小学数学,我们把数字带入公式,得:pos_x

=(800-400)/2=200;pos_y=(600-300)/2=150。虽然我承认我数学不怎么样,不过我应该没有算错吧?我们运行一下,哈哈!又成功了!我们又学会了新东西!

现在我又有了一个新的想法,我想在窗口重复插入一张“”,并使它的横纵坐标分别是300和100,且使它覆盖于原图之上。我们该如何做呢?如果前面的内容学得不错的话,相信大家能自己动手把代码写出来。同时,我也保证大家肯定会遇到问题,即如何表达图片之间覆盖与被覆盖的关系。现在我们再来认识一个重要的概念:图层。什么是图层?我举一个简单的例子:假设有三张图片,分别是a、b、c。其中a的图层为2;b的图层为1;c的图层为3,则c覆盖于a之上且a和c又覆盖于b之上。明白了吧,那么图层数值该怎么表达呢?答案是:

layer = 图层的数值;

好了,接下来聪明的你就自己写代码吧!差点忘了说,我们把另一个面板图像元素名称定义为img_picture2。另外,再补充一下,我们在定义命名时要注意一下几点:一、在Lite-C中,所定义的名字是区分大小写的,大家以后在学习调用文件时要注意。二、所定义的名字第一个字不能以数字开头,也不可以是斜杠/开头,可以是短横线_。

写好之后我们的全部代码是这样的:

function main()

{

vec_set(screen_color,vector(200,0,200));

video_switch(7,32,2);

fps_max = 20;

}

PANEL* img_picture =

{

pos_x = 200;

pos_y = 150;

layer = 1;

bmap = "";

flags = OVERLAY | VISIBLE;

}

PANEL* img_picture2 =

{

pos_x = 300;

pos_y = 100;

layer = 2;

bmap = "";

flags = OVERLAY | VISIBLE;

}

嗯,看起来长了很多,显得更深奥了。当然,聪明的你不会忘记该如何添加注释。最后,我们保存,并测试运行看看成效如何。

第六节教程到此结束

2024年2月20日发(作者:南雪萍)

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视图中看到这

个正方体的透视图,甚至是每个面,我们应该不难发现,所有的三维模型都是由三角形块面构成的。

我们制作完成了一个正方体,我们可以把它当做是椅子的主要部分,就是我们坐的地方。可是这个部分应该是一个扁正方体,所以我们有必要把它压一下。点“顶点模式”,这时我们可以看到视图中的模型出现了黄色的小点,这就是每个三角形块面所衔接的地方。我们先把正方体移动到坐标中央,也就是正方体中心的坐标在原点之上。点“移动”工具,在2D俯视图中选择整个正方体,使所有的顶点变红色,即被选中状态,按住这时出现的指标箭头不放并移动鼠标即可拖动被选择的顶点,即整个正方体,移动至指标箭头与横坐标轴和纵坐标轴重合;同样在平视图中使正方体居中。

如果大家感觉移动得不是很顺手,可以再编辑视图下方看到有几个可以输入本文的方框,那里是输入所选顶点坐标位置的地方,大家可以尝试把所有坐标的值设为0,按一下回车,正方体就乖乖地跑到中间去了。

现在,该是把正方体压扁的时候了,用 “缩放”工具在平视图,即左下方的视图中,选择整个正方体,此时出现指标箭头,按住纵坐标的蓝色箭头,并向上或下移动鼠标,看看正方体发生了什么变化?它的高度在增加或者缩减,而长和宽没有改变。我们把它的高缩小吧。

现在,我们开始制作椅子的四条腿,制作方法同样由建立正方体开始,然后用“顶

点模式”和“移动工具”在吸附作用下通过调整各顶点缩放正方体,使它的长和宽变小,且其比例保持1:1,并增加高度,具体原因如果你还不懂的话,则说明你还不懂椅子的腿是长什么样的。最后通过“编辑”“复制所选”以及“粘贴”功能克隆四条腿,分别移动至相应位置。如果大家还不清楚的话,请看下图,即做到此步骤时的完成图:

第一节教程到此结束。

还记得上一节我们学习的内容吗?我们学习了基本模型的创建、顶点的选择和移动以及缩放等等,而且我们还制作好了一张简单的椅子。现在,我觉得我们做出的椅子太简单了,坐着不够舒服,应该再加个椅靠,就是我们坐在椅子上的时候往后靠的东西,如果没有这个东西的话,那么大多数人即会弓着腰坐,一点也不舒服。对于椅靠的做法,我这里就不多说明了,相信上一节课所学习的内容已经足以让学习者拥有自己建造的能力。在做椅靠的时候要注意调整一下上部的顶点使其向外稍稍倾斜,这样做出来比较像一些。如果听不懂我说什么,请看完成图:

嗯,这样看起来就像多了,当然,如果大家感觉咱们教室的椅子坐久了不舒服的话,我们再加上一个软坐垫,注意,做坐垫的时候要给它看起来有“软”的感觉,该怎么做呢?其实很简单。

再建立一个立方体,并使它不要和我们先前做好的椅子重合,并用“顶点模式”选中该立方体上方的四个顶点(可在左下2D视图中选择),切换至“缩放”工具,并在俯视图中将选中的四个点缩小,上方四个点所构成的面积与下方四个未编辑的点所构成的面积大概1:1.2左右,并把整个所建的立方体压扁。先别急着调整整个模型横截面的大小,我们可以把它当做是坐垫的基本轮廓,现在,我们来把它做“软”。

大家可以看到,在工具栏上有一个“细分面”、“挤压”和“翻转法线”的工具,但是我们却不能选择它们,为什么呢?我们试着选择“三角型模式”,现在我们发现,它们现在可以选择了,由此,我们可以推出一个结论,这三个工具只能在“三角型模式”中可用。

现在,我们保持“三角型模式”,并选择整个坐垫,点一下“细分面”工具,看看发生了什么变化?哈哈,坐垫变“软”了,再点一次“细分面”工具,我们发现,它变得更“软”了。实质上,“细分面”工具只是让所选模型的面数增多而已,并使所增多的面能够自动平滑衔接,这样一来,我们的坐垫中所有的尖角部分亦都被变成了曲面,所以看起来就有了“软”的感觉。不过,大家不要疯狂地无数次按下“细分面”工具,否则你的机器会吃不消,因为过多的块面会增加硬件的负担,所以大家要注意了,如果你的电脑配置不是很好,那么我们以后所做的模型块面越少越好。

我们把做好的软坐垫适当缩放,再移动到座椅上,这样看起来就舒服多了,完成图如下:

嗯,好看多了,非常令人有成就感的作品完成了!

我们是否已经对Med模型编辑器感觉到厌倦了呢?那么我们将在下一节课学习Sed脚本编辑器,不过这并不代表我们对Med模型编辑器的学习仅此而已,我

们只不过是学会了最简单的模型构建,以后还会教大家做一些更复杂的模型,比如人物,花草树木等等,而且我们必须要学会如何运用贴图材质,即给我们做的3D模型上色。万事开头难,下一节课我们会从最简单的Lite-C语句学起,所以大家不要紧张,其实编程很简单。

本文由SYJ原创,如需转载,请注明作者

我们开始学习Lite-C语言编程

首先,我们来学习如何设置游戏运行的环境,比如,设定游戏画面的尺寸大小,即分辨率,运行时保持全屏模式还是窗口模式,以及背景色,帧率等等。我们先来学习动作函数。

打开Sed,在“选项”“参数设置”中,将“用来运行/发布的主脚本”设置到GS安装目录下的acknex.h文件,即X:……GStudio7includeacknex.h,设置好后点确定,准备工作完毕。

我们点一下工具栏上的黑三角形“测试运行”按钮,看看有什么效果。

屏幕上出现了Lite-C脚本读写向导,这时是读写脚本的步骤,如果该向导检查到脚本有错误,就会停止加载或者自动退出。等待读写完毕后,就执行预览。

我们看到预览框里什么也没有,背景是黑色的。这里,我们可以得出结论,默认情况下背景颜色是黑色的。

我们来输入一下代码:

function main()

{

screen_ = 200;

}

这是一条极为短小的代码,但同时它也是一个完整的Lite-C程序。我们先来看看function main(),function表示定义一个动作函数,后面紧跟的main表示这个函数的名字,我们发现这两个词的颜色是蓝的,而不是通常的黑色。这表示function和main是特殊字符,即Lite-C事先定义好的字符。我们尝试把main改成其它字符,比如screen_setting,这时我们发现它变成了灰色。我们又得出结论,main是一个特殊的函数,它用于执行主要、重要命令。我们可以把main看做主函数,而其它如screen_setting等在Lite-C中非预先定义的一切字符看做副函数,用于执行次要命令。

那么,在Lite-C中,函数是什么呢?函数后面紧跟的中括号{}里面代表该函数所包括的内容,即程序执行的动作。

我们再来看screen_ = 200;这句话,意思就是说设置画面背景色为红色,200可以看做颜色的纯度。如果我们把它设为50,再运行,那么我们会发现红色的亮度会减小,设为250则看起来更鲜艳。当我们选定这句话时,会看到Sed下面会有个命令帮助,大家可以看一下。关于背景颜色,我们还可以设置为绿色green,蓝色blue,大家可以实践一下。颜色后面紧跟的数字呢,范围在0至255,如果数值不在这个范围以内,则指令无效。另外,如果我们想把背景颜色设为除红、绿、蓝以外的颜色,我们该怎么办呢?

把源代码替换为:

function main()//定义主函数

{

vec_set(screen_color,vector(200,0,200));//设置背景颜色为淡紫色

}

运行一下,我们发现,背景颜色变成了淡紫色。

我们来看代码。vec_set(screen_color,vector(200,0,200));这一句,vec_set是一个设置的命令,vector表示向量,括号里面的三个数值分别表示蓝,绿,红的纯度,大家可以尝试不同的组合得到不同的颜色。

另外,我们发现,在一些指令的后面加入了双斜杠//,这是注释的意思,后面可

以接上对此命令的解释,不过只能以单行来写。如果要写多行的注释,则可用/*在这里注释*/来表示。

好了,我们下一节课学习如何更改屏幕尺寸大小。

第三节教程到此结束。

本文由SYJ原创,如需转载,请注明作者

这节课我们学习窗口属性的设置。

打开我们上次学习的文件,在主函数中添加以下一段代码:

screen_size.x = 800;

screen_size.y = 600;

这句代码的意思相信大家如果英语水平不错的话应该能很快理解,即设置屏幕尺寸的宽度为800像素,高度为600像素。我们运行一下,是不是感觉预览窗口的大小变化了?

我们将这段代码替换为:

video_mode = 7;//800*600

在运行脚本,我们发现,窗口的大小没有改变。这句video_mode表示窗口尺寸模式,后紧跟的数字表示各种屏幕分辨率,大家可以参考帮助文件获得相关取值规则如下:

1 320x200 (window only)

2 320x240 (window only)

3 320x400 (window only)

4 400x300 (window only)

5 512x384 (window only)

6 640x480, 640x400, 640x352

7 800x600, 720x480, 848x480 (default)

8 1024x768, 1024x600

9 1280x1024, 1280x800, 1280x720

10 1400x1050, 1440x900

11 1600x1200, 1680x1050

12 1920x1200, 1920x1080

我们在主函数中再添加一句代码:

video_screen = 2;

这段代码即窗口模式命令,后面的数字如果是1,则表示全屏模式,数字为2,则表示窗口模式(默认),大家可以尝试一下。

现在,我们来学习一个更简便的代码,它同时包括video_mode,video_screen这两个命令,而且还提供设置颜色质量。将源代码:

video_mode = 7;

video_screen = 2;

替换为:

video_switch(7,32,2);

其中,括号内的三个数字分别表示我们刚刚学习的video_modo的值,颜色质量(16位色或32位色等),video_screen的值。一句代码就全都概括了,是不是很简便?

在主函数中添加以下代码:

fps_max = 20;

fps即每秒播放的帧数,最大值不可超过20。大家可以设定10至400的值,默认是240。现在,如果测试运行脚本的话大家不会看得到变化的效果,以后当我们引用三维场景进行测试的时候大家可以把它设为15或是100看看操作手感有什么变化。

好了,关于预览窗口的基本属性设置大概就是这些了。我们学习这些今后可以用到游戏中屏幕分辨率的设置,帧率的限制设置等等。

下一节课我们继续回到Med的学习,并研究如何给我们的3D模型上材质

第四节教程到此结束。

本文由SYJ原创,如需转载,请注明作者

这节课我们用Med来制作一个简单的正方体,并给它加上材质,也就是上色。

打开Med,创建一个立方体,使其居中于三维坐标。

下面,我们来考虑如何绘制材质。首先,我们要了解贴图的使用规则。在3D

gstudio中,我们只可以使用BMP,PCX,TGA和DDS格式的图像文件作为材

质,而且,这些图像的大小也有一定限制,即长和宽的像素数值一定是2的二次方,如64,128,256,512,1024等,也就是说我们所绘制的材质大小必须为128*256或者512*512等等,而不能是400*300或者100*250。

我们知道,正方体有六个面,所以我们再绘制材质时,要绘制的内容即六个正方形。如图,这是我绘制的两张正方体材质:

(图片:材质A)

(图片:材质B)

这两张图片的分辨率分别是64*256,以及256*256,这些数字都是2的二次方,也就是说符合要求了,而且用到材质的话效果是一样的。但是,这两张图片有什么区别呢?

我们不得不来研究一下电脑的硬件,虽然这与3D gstudio的学习貌似无关。我们首先要明白,电脑中是靠什么进行3D加速的。

在电脑硬件中,3D加速的硬件是显示卡。而显示卡又由GPU核心,显存颗粒等等组成于PCB集成电路板中。我们来了解一下显存颗粒的作用。显存就是即时存放3D材质等的地方,显卡的显存大小可以在didxag诊断工具里查看,显存越大,则可以存放的3D材质越多,或者分辨率越大、质量越高,那么3D质量就会越好,当显存相对太小,不足以存放太多3D材质时,则就会造成3D处

理拖延,也就是我们平常说的“卡机”。

所以,我们在做3D材质时,要充分考虑当前显卡显存大小与材质的关系。

由此,我们看上图,材质A的分辨率明显比材质B的分辨率要低得多,而且效果没什么两样,所以我们绘制材质时要充分节约显存资源,避免材质B中空余部分过多。

我们开始将材质用于我们的立方体模型中。

在Med中,点“对象”“管理皮肤”“新建皮肤”在皮肤设置中点“纹理”的勾,并在“纹理文件”选择好材质A,关掉“皮肤设置”,这时我们看到在列表中多了一个皮肤1,选中它,点“皮肤编辑器”

这时,我们看到皮肤编辑器窗口的左边是一张我们的材质A贴图,右边是我们创建的立方体模型。

我们现在给立方体的其中一面上色,比如说,选“三角型模式”,并在左下角的平视图中选择正方形的最上面一条边,使其变成红色,点“对象”“生成贴图”“六面”,由于我们之前所选的立方体的面是位于上顶的面,因此我们选中“顶”,并点“确定”。回到皮肤编辑器,这时我们发现在皮肤编辑器左方的皮肤映射设置中出现了一个平面,这里的操作方式是2D的,大家可以使用顶点操作模式或

是块面操作模式使用选择、移动等工具把平面缩小至能容纳每一个面的程度,并放置于相应位置,操作方法相对简单,这里我就不详细说明了。至于其它的面,在创建六面贴图的方位选择中,大家可以参考下图解说:

(它们位于四个视图的左方,上面的是俯视图,下面的是平视图)

最终完成图如下:

嗯,看起来不错,现在关闭皮肤编辑器。大家同样可以在3D视图中看到已经上材质的效果,选中所有面,点“文件”“引擎预览”,等待建造以及渲染模型过程完毕后,即可看到预览窗口中所呈现的模型,大家可以按住鼠标右键并移动旋转视图,并按方向键或W、S、A、D移动视角。

下一节课我们继续回到Sed的学习,并开始研究如何插入文字、图片等各种基本元素。

第五节教程到此结束。

本文由SYJ原创,如需转载,请注明作者

现在,我们开始来学习如何在引擎(3D gstudio默认使用Acknex引擎)中插入图片,或者文字。

我们先来了解一下预览窗口的一些基本属性,大家请看下图:

在图中,我标注了一个平面坐标,大家可以分析看看,这很像我们学数学的坐标系的第四象限,只不过y轴是反向的。

我们在第三、第四节课已经学习了如何设置预览窗口的一些基本属性,并对窗口分辨率设为了800*600像素。那么我们准备插入的图片大小也要在屏幕分辨率的范围以内,否则便不能全部显示。在这里我准备好了一张bmp格式的风景图片,命名为“”,分辨率是400*300。这张图片的长和宽都小于窗口长和宽,也就是说这张图片符合引擎的要求了。这张图片如下:

在Sed中打开我们第三、第四节课所学习的脚本文件。为了方便管理,我们把这个脚本文件命名为“”,并新建一个名为“game”的文件夹,把“”和“”均放到里面去,使它们处于同一根路径下。

我们有几种引用图片的方式,先来看第一种。

在中的主函数以外添加以下一段代码:

PANEL* img_picture =

{

bmap = "";

}

我们来看代码,PANEL*表示定义一个面板元件。面板元件包括文字、图片、交互按钮等2D元素。后面紧跟的是所定义的面板元件名称,这里我把它命名为img_picture,大括号内即面板内容。bmap = "";一句表示在面板中引用同一文件路径下的“”图像文件,我们测试运行一下看看有什么效果。

噢!我的天!预览窗口什么也没有。是我代码写错了吗?确实,我们虽然正确引用了图像文件,但是我们忘了告诉引擎让这张图片显示出来。我们在引用图像代码后再添加一句代码:

flags = OVERLAY | VISIBLE;

这句代码的意思是让面板中调用的元素显示出来,这下应该没问题了吧。我们运行看看,虽然我有点紧张,不过我们确实看到了预览窗口的左上角呈现出了我们所引用的图片。我们成功了!不过,请别高兴得太早。如果我要求让这张图片显示在屏幕中央或者别的位置,而不是左上角,该怎么办呢?我们在引用图像文件前再添加以下两句代码:

pos_x = 200;

pos_y = 150;

相信大家能从x和y这两个字母很快理解这两行代码的意思。理所当然是给我们引用的图像定一个显示位置,后面的数字所表示的东西请看下图:

相信大家会很快看懂。那么我们该怎么样才能知道使这张图片居中于窗口的坐标各是多少呢?很简单,看这个公式:元素的横或纵坐标位置=(窗口的横或纵尺寸-元素的横或纵尺寸)/2。有点像小学数学,我们把数字带入公式,得:pos_x

=(800-400)/2=200;pos_y=(600-300)/2=150。虽然我承认我数学不怎么样,不过我应该没有算错吧?我们运行一下,哈哈!又成功了!我们又学会了新东西!

现在我又有了一个新的想法,我想在窗口重复插入一张“”,并使它的横纵坐标分别是300和100,且使它覆盖于原图之上。我们该如何做呢?如果前面的内容学得不错的话,相信大家能自己动手把代码写出来。同时,我也保证大家肯定会遇到问题,即如何表达图片之间覆盖与被覆盖的关系。现在我们再来认识一个重要的概念:图层。什么是图层?我举一个简单的例子:假设有三张图片,分别是a、b、c。其中a的图层为2;b的图层为1;c的图层为3,则c覆盖于a之上且a和c又覆盖于b之上。明白了吧,那么图层数值该怎么表达呢?答案是:

layer = 图层的数值;

好了,接下来聪明的你就自己写代码吧!差点忘了说,我们把另一个面板图像元素名称定义为img_picture2。另外,再补充一下,我们在定义命名时要注意一下几点:一、在Lite-C中,所定义的名字是区分大小写的,大家以后在学习调用文件时要注意。二、所定义的名字第一个字不能以数字开头,也不可以是斜杠/开头,可以是短横线_。

写好之后我们的全部代码是这样的:

function main()

{

vec_set(screen_color,vector(200,0,200));

video_switch(7,32,2);

fps_max = 20;

}

PANEL* img_picture =

{

pos_x = 200;

pos_y = 150;

layer = 1;

bmap = "";

flags = OVERLAY | VISIBLE;

}

PANEL* img_picture2 =

{

pos_x = 300;

pos_y = 100;

layer = 2;

bmap = "";

flags = OVERLAY | VISIBLE;

}

嗯,看起来长了很多,显得更深奥了。当然,聪明的你不会忘记该如何添加注释。最后,我们保存,并测试运行看看成效如何。

第六节教程到此结束

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论