当前位置:文档之家› Virtools 开发3D游戏

Virtools 开发3D游戏

Virtools 开发3D游戏
Virtools 开发3D游戏

Virtools 开发3D游戏

一、制作一个追踪目标的摄影机

这一课将会教您如何在Schematic view里自由地组合「行为模块」,以便在您的组件上加入进阶的「行为模块」的互动控制。在本课的例子里,我们将会创造出一个会自动锁定角色头部的camera,而当我们移动该角色时,该camera 也会跟着角色在场景中四处移动,并保持动态的锁定状态。由于这是您第一次在Schematic View里以图像化方式撰写Virtools程序的经验,这是Virtools非常核心与重要的部分,我们建议您最好一步一步地跟随课程的指示循序渐进,并且仔细地看过所有的解释与说明,如此我们保证您将会事半功倍,马上进入状况。这一课里包含了许多关于Virtools如何运作的重要概念基础,请用心学习哦!

步骤1:新增一个镜头(Creating a new camera)

· 在「3D Layout」工具列里点选「Create Camera」(新增镜头)。此时,在场景中会出现一个新的镜头,取代了原先的Perspective View.

恭喜您,您刚刚创造了一个名为New Camera的新camera。这个新的camera 会出现在与原来所在Perspective View camera(透视视角镜头)相同的位置上。现在,一个新的面版将出现在Level Manager的右边:Camera Setup view。这个面版让您能够检视与编辑所有关于这个camera的设定参数(包括位置、方向、视线范围……等等)。这个新增的camera可以从几个地方呼叫出来:您能够从Manager 里的Camera资料夹里开启;也可以在3D Layout view中的Available Cameras下拉选单里找到它。为了能在3D Layout里看见这个新的camera,您将需要切回先前窗口的状态(Perspective View)

· 从「Available Cameras」(镜头类型)下拉选单里选取「Perspective View」(透视视角)使镜头回复标准透视视角。

· 点选「Dolly Camera」(推移镜头)图标,这时候使用Dolly camera(推移镜头)向后移动一点点。

· 在3D Layout窗口中按下滑属左键,并慢慢地向3D Layout窗口下方拉动鼠标,这时候,我们可以从比较远的距离观察我们的场景(相当于镜头拉离我们所建构的实验室)。这个动作让我们能够看到我们之前所创造出来的新camera,这个新camera目前以一个白色摄影机状的盒子来表示。

· 按下Orbit Camera 按钮以环视整个场景。如果没有意外的话,您将会看见您所设定的camera跟它所锁定的目标,两者间透过一条黄色的线连结起来。

步骤2:对镜头指定「行为模块」(Applying behaviors to the camera)

我们想要让New Camera达成的任务如下:首先,我们希望能够在一进入这个场景的同时,就以New Camera来作为我们的观察视点(这件事情只要透过『行为模块』SetAsActiveCamera就可以达成了)。然后,我们想要使New Camera 能够持续地锁定角色,再说清楚一点,也就是在Virtools开始算运算其它图形资料之前,就先将镜头所定在角色上面(使用『行为模块』CameraOrbit)。

· 选取「Building Blocks」卷标。

· 打开「Cameras」资料夹。

· 打开「Montage」资料夹。

· 将「行为模块」「SetAsActiveCamera」拖放到指定的镜头上。

· 选取「Schematic」卷标,从Schematic可以检视摄影机互动模块的组合状态(New Camera script)。

一个代表SetAsActiveCamera的方块出现,方块的左边有一个输入端(input),而右边则有一输出端(output)。

· 从「Building Blocks」面版中打开「Cameras/Movement」资料夹。

· 将「行为模块」CameraOrbit拖放到Schematic view里,摆在「行为模块」SetAsActiveCamera之右,如图所示。

· 在Schematic view里将鼠标移到CameraOrbit「行为模块」方块上按下右键,这时会出现一个选单,然后在选单里选择 Edit parameters。这个动作将会开启一个对话框,这个对话框能让您指定该camera所要锁定的目标。

· 点选按键(Eyedropper button),并从 3D Layout视角中选取角色Scientist。

· 点取OK。

步骤3:设计一套「行为模块流程」(Designing a behavior flowchart.)

现在,我们的New Camera已经拥有两个「行为模块」了。注意:在Virtools 里所有的「行为模式」实时处理与绘制,每执行一个Frame(画格)都依循下列的执行程序运作:

- 处理「行为模块」

- 运算绘制场景

- 处理「行为模块」

- 运算绘制场景

- 依此类推

在Virtools中,一个基本处理周期(basic cycle)(包括一次的『行为模块』处理与场景算图)被称为一个Frame(画格)。举例来说,frame rate(画格更新率)为30 fps代表了上述的基本处理周期在一秒钟里需要被连续执行30

次。在这一课里,我们将会以Frame的概念来描述所有的「行为模块」是如何地被连续组合起来的。

注意:Frame这个字在Virtools也指在3D环境里被用来标示一个位置或是有方向性的虚拟对象,小心别混淆了(其实在其它的软件里如3DMAX,这样的对象通常被叫做Dummy)。

以下就是我们所希望在camera上所执行之「行为模块」的顺序:

1. 激活演出场景。

2. 切换到New Camera(执行SetAsActiveCamera)。

3. 运算绘制场景。

4. 让New Camera锁定在角色(执行CameraOrbit)。

5. 运算绘制场景(Render the scene)。

6. 回到第3步(以便在每一个新的Frame绘制之前都能重新执行CameraOrbit)。

步骤4:观察所设定的「行为模块」如何运作(Understanding how behaviors basically work)

在学习如何创造「行为模块流程」之前,我们得花点时间搞清楚「行为模块」是如何运作的。

基本上,所谓的「行为模块」就是一些执行程序中的组件,当其被触发激活时,就会展开特定的作业与效果。这就是它们「输入端」(inputs)(位于每个『行为模块』的左侧)的作用:「输入端」(inputs)接收以事件为基础的讯号(event-based signals),并负责触发该「行为模块」激活之后一连串的处理程序。

某些「行为模块」或许需要设定一些参数以执行它的工作。这些参数能够藉由一群称为「参数输入插脚」(input parameter pins)的小点来输入与控制,您可以在「行为模块」方块的上方找到这些「参数输入插脚」。

一旦某个「行为模块」完成它所负责的任务,它将会传送一些事件基础讯号出去,透过位于盒子右方的「输出端」(outputs),然后接着触发连结到这些「输出端」的其它「行为模块」,继续执行它们的任务。一个「行为模块」的执行结果或许还会输出一些「计算参数」(computing parameters),而这些「计算参数」则是透过盒子下方一些称为「参数输出插脚」(output parameter pins)传送出去的。

步骤5:在Schematic view 里新增「行为模块流程」(Creating the behavior flowchart in the Schematic view)

现在,让我们试试看以一些基本的规则来建立属于自己的「行为模块」流程。我们可以看到在最左边的箭头状的Start尖端与「行为模块」SetAsActiveCamera 之间的连结,这连结所代表的意义是:当您按下Play 按键开始播放您的作品时,「行为模块」SetAsActiveCamera将第一个被触发激活。

一旦该「行为模块」的工作完成(切换到New Camera),SetAsActiveCamera 将藉由它盒子上的「输出端」送出一个讯号。若是我们希望接下来要执行CameraOrbit,我们得在SetAsActiveCamera的「输出端」与CameraOrbit的「输入端」之间建立起连结才行。

· 点选Schematic view工具列中的Link选项。

· 在SetAsActiveCamera里选择output。

· 在CameraOrbit里选择input。

到这里,我们已经建立起下列的简单「行为模块」流程了:

1. 激活演出场景。

2. 执行SetAsActiveCamera。

3. 运算绘制场景。

4. 执行CameraOrbit。

注意我们刚刚所建立的连结上头显现的指示0/0:这代表该连结所会延续(delay)的时间。它告诉我们从SetAsActiveCamera的「输出端」传送到CameraOrbit的「输入端」需要花费0个Frame的时间。换句话说,SetAsActiveCamera与CameraOrbit两个动作在以Frame为执行单位里已经被串

成一个执行程序。

· 按下状态区里的Play按钮,以激活演出场景。

如您所见,现在New Camera变成了active camera(Virtools以此camera 为最起始的视点,算出整个场景),目前此camera正锁定在角色上。要是您使用数字键盘上的方向键让该角色在场景里四处移动一下,您会发现New Camera 并没有跟着角色而动。别担心,看看我们刚建立的流程:原因出在于我们只要求该camera在开始演出场景时锁定角色一次而已。

· 按「Restore Initial Condition」(回复初始条件)按钮停止演出。

· 按下状态区里的Play 按键,再次激活演出场景。

正如您所看到的,现在camera再一次地对准了目标角色。当然啦,要是您现在将角色移开的话,camera是还不会跟着走的。

· 按「Restore Initial Condition」(回复初始条件)按钮停止演出。

步骤6:在「CameraOrbit」里加入一个循环(Creating a feedback loop on the behavior CameraOrbit)

要想让camera持续锁定追踪该角色,我们必须在每个frame运算前都执行一次CameraOrbit才行。要达到这个效果,我们得在它的「输出端」和「输入端」间建立起一道延续值为1个Frame的连结。如此,「行为模块」CameraOrbit将会在每个新的Frame开始执行时,重复执行一次。

· 在Schematic view工具列里点选Link指令。

· 先在CameraOrbit里选择output。

· 再将鼠标移向右边,并轻击一下以创造一个连结控制点(link control point)。

· 如下页所示般,轻击鼠标,继续创造另外两个连结控制点。

· 按下CameraOrbit的「输入端」。

· 按下Restore Initial Condition 按钮以停止演出播放。

· 现在,按下Status Bar上的Play 按钮,重新播放一次演出场景。

我们发现camera已经会追踪锁定移动中的角色了,因为「行为模块」CameraOrbit在每个frame绘制之前都会被重新执行一次。按下Schematic工具列上的Trace按钮以激活Trace模式,并实时地观察执行中的「行为模块」:您会看到以红色的高亮度显示着的「行为模块」CameraOrbit正一次又一次不断地执行着。

恭喜啦!您已经在Schematic view里创作了自己的第一个「行为模块」流程了。在下一课中,我们将让您知道,当您能将Schematic view运用自如的时候,Virtools能够展示多么强大的威力!记得要储存您辛苦完成的作品哦,因为您将会于下一课里在上头继续增添新的东西。只要用第2课里所学到的Virtools Player就可以随时观赏您的得意作品了!

[NextPage]

二、障碍物回避的处理

这一课里,我们将教您如何为您的角色附加上基本的障碍物回避功能,使用到的是「碰撞侦测行为模块」与「属性设定」。

在Virtools里要处理障碍物回避的方式,其中之一就是利用Virtools所提供的「碰撞总管」(Collision Manager),「碰撞总管」会自动替您计算所给定的3D对象间会产生碰撞与否,是个很方便的工具。

要达到这个效果,我们需赋予角色叫做Prevent Collision的「行为模块」。一旦激活,这个「行为模块」会询问「碰撞总管」相关的信息,以决定该角色会跟哪些3D对象产生碰撞行为。若有任何碰撞被侦测到,这个「行为模块」将会让角色稍稍后退,以避免直接撞击。

要执行碰撞侦测测试,您的「碰撞总管」得要有一张会发生碰撞的障碍物清单才行。我们必须指定出场景中会发生碰撞的3D对象,并将其列入障碍物清单里头。要这样做,我们得将这些对象一一挑出来,并且在个别对象上头贴上「障碍物」(obstacle)的属性。所谓的属性(Attributes),其实还是一些特定的参数,您可以将它们贴到场景里的个别组件上,用来给它们一些指定的特性。在这一课里,我们只会用到「障碍物」(obstacle)属性(可被碰撞侦测引擎所解

读),其它还有许多不同的属性能够被贴在组件上头(像是角色的『生命值』、物体的『重量』等等),我们有机会再做介绍。

步骤1:将计算机设定为潜在障碍物属性(Declaring the computer as a potential obstacle using attributes.)

· 轻击Level Manager卷标。

· 从Global资料夹里打开3D Objects子资料夹。

· 从3D Layout工具列上点取Select tool 图标。

· 从3D Layout view中点取计算机,以选择它。

一个「外切框」(bounding box)会出现在3D Layout中,这表示该桌子已经成功地被选取了。计算机(New computer)同时也在Level Manager里以高亮度显示,就如一般被选取的组件一样。

· 在Level Manager里的New computer上按下滑属右键,并从选单里选取Add Attributes。

· 这个动作开启了Add Attribute对话盒。

· 「碰撞总管」Collision Manager上单击鼠标,以开启对应的属性目录。· 选取Fixed Obstacle。

· 点取Add Selected。

· 点取Close。

您刚已经成功地将Fixed Obstacle的属性给附加在计算机上了。这台计算机目前已经被「碰撞侦测引擎」登录为一个潜在的障碍物了。

步骤2:应用Prevent Collision(Applying the Prevent Collision.)

· 在开始将该「行为模块」应用到角色上面之前,先按下status bar上的Play 按钮,激活场景演出。

· 以方向键让角色在场景中四处游走一番,然后让角色停在书桌前面(注意不要让角色和书桌接触)。

· 再一次按下Play 按钮,暂停演出的进行(注意不要按到Restore Initial Condition 按钮,因为您只是想暂停,而不是想倒带!)。

· 选取Building Blocks。

· 开启Collisions资料夹。

· 开启3D Entity资料夹。

· 将「行为模块」PreventCollision拖曳到角色上。

在重新测试场景之前,让我们从Schematic view里先检视一遍角色所有行为模块的script吧。

· 选取Schematic卷标以开始检视scripts。

· 使用垂直滚动条来检视角色的script。顺利的话,您将会看到下列的script。

· 在Schematic view里,您将可以很轻松且可视化地辨识所有script里的「行为模块」,只要轻轻地点选代表该「行为模块」的盒子就行了,甚至是要任意拖动它们都不是问题。正如您所能看到的,「行为模块」PreventCollision并不像script里的其它两个「行为模块」般以亮灰色显示。这告诉您在您点取Restore Initial Condition 按钮之前,这个「行为模块」是还不算数的。

· 此时点取Play 按钮,再次激活场景的演出,跳过「行为模块」PreventCollision的执行:您将会发现角色仍然无视于障碍物的存在,轻松地穿过面前的书桌,如入无人之境。

· 点取RestoreInitialCondition 按钮。

· 「行为模块」PreventCollision现在就正式算数了(如下图里的Schematic view所示一般)。

· 按下Play 按钮,让场景再次激活。这一回角色就不再会穿过桌子,而是乖乖地停在桌前过不去了。

步骤3:为您角色的script来张快照!(Attach a snapshot to the characters script.)

如您所见,Schematic view显示了我们场景中所有组件上的scripts(在这个例子里,指的是角色与camera)。为了让您的scripts能更便于阅读与日后检索,Virtools让您能为您所写的script加上一张从场景理撷取的快照插图。

· 从3D Layout工具列中点取SnapShot 按钮。

· 这个动作开启了SnapShot窗口。

· 从SnapShot窗口里点选Capture按钮。

· 在3D Layout里任意移动鼠标调整视线,然后在满意时按下滑属左键。此时,您拍下了一张场景快照并出现在SnapShot里。

· 将这张快照从SnapShot里拖放到角色的script中,并将其放置在snapshot space里,如下图一般。

步骤4:为您的script加上批注(Add comments in the script)

· 在Schematic view里的角色script背景任意处按下鼠标右键,开启选单。

· 从选单里选取Add Comments。· 这个动作在您的script里开启了一个批注栏,在里面,您可以任意地写下您对特定script所做的批注,也可以打上中文批注喔!

· 在刚刚所新增的批注栏上轻击鼠标左键以选择它。现在,它应该会变成灰色,且Comment字样应该会出现在Schematic view的工具列中。

· 在Schematic view的工具列里Comment字样上双击鼠标左键,以编辑您所想下的脚注文本。

· 键入「This script contains the main behaviors for our character.」并按下Enter键。

步骤5:让角色能「脚踏实地」!(Forcing the character to keep walking on the floor.)

在存盘之前,让我们先回顾一下刚刚学到的几个基本步骤。您或许已经注意,在场景中您的角色并没有「脚踏实地」老老实实地站在地面上:您的角色居然漂浮在半空中,仿佛像有超能力一般。事实上,由于角色和实验室基本上是分别被创造出来的(甚至或许来自完全不同的3D modeling工具),因此,没有人告诉

过您的角色说实验室里的某个3D对象代表「地面」。

要是我们想让角色真的能「脚踏实地」,我们就需要将场景中的特定3D对象宣告为「地面」才行(使用Floor属性),然后再「教导」您的角色如何把脚踏在地上(使用『行为模块』Character Keep On Floor)。在这个例子里,实验室里代表「地面」的3D object被我们命名为Floor Office。

· 从Level Manager里开启3D Object资料夹。

· 在Level Manager里选取对象Ground01(或直接在3D Layout里以选取工具选择实验室的地板)。

· 在Level Manager里的selection上右击鼠标,并从选单里选择Add Attributes。

· 在Create Attribute对话盒里,开启Floor Manager数据夹,并选取Floor。· 点选Add Selected。

· 点选Close。

好了,现在我们已经将「地面」宣告完成了。

· 选取Building Blocks卷标。

· 开启Characters资料夹。

· 开启Constraint资料夹。

· 将「行为模式」Character Keep On Floor拖放到角色身上。

让我们再检视一次角色的script。如您所见,有些「行为模块」盒子的左方拥有两个「输入端」(Character Controller, Keyboard Controller, PreventCollision)但Character Keep On Floor则只有一个。

举例来说,「行为模式」Keyboard Controller就有两个分别被称为「On」跟「Off」的「输入端」(在Schematic view里,将鼠标移动到这两个『输入端』上,就可以看它们的名称)

在这个script里,「On」与起始点连结,这意味着在场景激活的同时,「行为模式」Keyboard Controller在整个场景演出里会持续地发生作用(使用Trace 模式来做检查)。而「行为模式」Character Keep On Floor就只有一个单一的「输入端」称为「In」。

一旦被触发,这个「行为模式」变会在垂直方向上重新调整该角色的位置(以确保角色能站立在我们之前所宣告过的『地面』上),并且藉由它的「Out」输出端传送出一个讯号。因此,它只会被执行一次,就在场景刚开始被执行第一个Frame时。因为我们实在想让角色能持续地保持在地面上走动,所以我们就必须在每个Frame激活之前都要先执行这个贴地的指示,于是我们只要在它的「Out」输出端与「In」输入端间加上连结就可以了:

· 在Schematic view里选取Link按钮制作一个循环(feedback link)。· 按下Restore Initial Condition 按钮。

· 按下Play 按钮。这时,您的角色已经可以精确且安稳地在地面上走动咯。

好啦,您现在可以将您的场景储存起来,然后用Virtools Player慢慢地欣赏喽。

[NextPage]

三、如何将「行为模块」组合成行为模块流程

这一课里,我们的目标是建造一道当玩家用鼠标点选就能开关自如的门。由于Virtools所提供的「行为模块」数据库里并没有这样的东西存在。因此,我们必须将使用现存的「行为模块」在Schematic view里整合起来,组成一个「行为模块」流程(或称为『行为模块图』),来达成我们所需要的功能。最后,我们还可以将把这个流程命名为「Open」,如此一来,我们就能将这个建好的「行为模块」流程Open应用在场景中其它的对象上,甚至于我们还可以把这个新的「行为模块」流程储存在数据库里,把它当成一个新的「行为模块」以供未来使用哦。首先,请重新加载您先前储存的作品。

以下就是我们需要为Open所编写的「行为模块流程」:

基于您在第3课与第4课里所学到的东西,您应该能够毫不费力地把这个「行为模块流程」建立起来吧?!您将需要用到下列的三个「建构区块」:

· Wait Message(在Logics / Message 里)

· Sequencer(在Logics / Streaming 里)

· Translate(在3D Transformations/Basics 里)

要得到这些「行为模块」如何运作及怎么使用等信息,只要在该Building Block里该「行为模块」的名字上头双击鼠标左键即可。这个动作将会开启位于Building Block面版上方的「线上说明」Online Reference,里面就会出现关于该「行为模块」的所有说明文件。举例来说,下一页所显示的,就是关于「行为模块」Translate的说明文件:我们建议您在使用「行为模块」前常常查询相关的线上说明,这样对您的进步是很有帮助的。

步骤1:新增「流程模块」(Creating the flowchart)

按照下列步骤:

· 将「行为模块」Wait Message 拖放到实验室的大门上(如图)。

· 将「行为模块」Translate拖放到Schematic view中门的script里,重复两次。

· 将「行为模块」Sequencer到Schematic view中门的script里。

· 您的script现在看起来应该像是这样:

· 从Wait Message的Out输出端到Sequencer的In输入端作一个连结。

· 从Sequencer的Out1输出端到上方的Translate的In输入端作一个连结。· 从Sequencer的Out2输出端到下方的Translate的In输入端作一个连结。· 从upper Translate的Out输出端回Wait Message的In输入端作一个循环。· 从lower Translate的Out输出端回Wait Message的In输入端作一个循环。

步骤2:了解您的流程表(Understanding the flowchart)

现在,这流程是被连接起来了。让我们进一步解释一下倒底发生了甚么事情!首先,Wait Message先被执行了。这个「行为模式」基本上等待着从「门」收到给定的讯息,而后藉由其「输出端」送出一个讯息(也因此触动了Sequencer 的动作)。而等待输入的Message则是由「行为模块」Wait Message的「参数输入插脚」(input parameter pin)处进来的。

· 按住在Wait Message之「参数输入插脚」上方的小方块,并将其向上拖曳到如图所示的位置,然后松开鼠标。这个小方块代表一个local parameter(Wait Message本身的参数设定钮),它是透过一道parameter link(参数连结,以一条虚线表示)传入「行为模块」Wait Message。

· 双击local parameter。一个local parameter有一个名字(name),包含了一个给定类型(type)(整数integer、串行string、向量vector……等)的值(value),并且会连结在一个script上头(在这个例子里,是连在『门』

三维程序、游戏制作的基本常识

三维程序、游戏制作的基本常识 很多游戏制作初学者都是从各行转行的。,对三维方面的常识的确理解甚少,即使是天天玩三维游戏的人。虽然这些信息对一些三维经验丰富的朋友是简单的不能再简单的东西,但本文对某一些新上手的朋友是很有必要的。 一、建模 建模至少包括两个步骤: 1 模型的建立,每个顶点的空间位置的确定。 2 确定模型每个顶点对应的贴图位置,以便能够正确的贴图 而这两个步骤,人类不靠建模max,maya,xsi等等建模工具是无法完成的。 理论上来说,只要知道一个模型的所有顶点和对应的贴图位置,就能不靠三维软件也能建模,但问题就是稍复杂点的模型至少都是几百个点到几万个点,人类不靠三维软件是根本无法知道这些顶点和对应贴图的位置的。 二、引擎 …引擎?的定义现在看来已经包括三种: 1) 图形引擎 最简单的理解就是一个成像的东西。把三维的数据变成图像,放映给观众。就像一个电视机一样,把接收到的数据信息变成图像。这是我们最早称作…引擎?的东西。它的目的就是减少游戏编程者的工作,因为图形编程的工作量很庞大的,避免每次重复开发,和让游戏编程者尽量把精力集中在游戏本身的逻辑和规则的开发,而不是怎么显示图形上。现在很经典的游戏图形引擎比如DOOM,虚幻等等。Pv3d,away3d等等都是ActionScript写的图形引擎。 2) 动力引擎 个人认为动力引擎最初的目的应该是“编程人员向动画人员发起的挑战”。以前的三维游戏,动态全是靠动画人员制作出来。有些简单游戏使用动画人员又有些不必要,简单动作希望能用程序模拟出来。 动力引擎的好处是每次模拟出来的动态随受力不同会有改变,这是动画师无法达到的,因为动画师做出什么动作就是什么,无法随机变化,头发,布料,高处下落,吹飞,拖扯都是动力引擎的强项。但弊端是无法制作出复杂的动态。 所以现在的大作,一般都是动画师和动力引擎共同实现,动力引擎处理一些随机的动态,动画师(和动态捕捉)处理人物的基本动作。 游戏界hover这个三维动力引擎是非常有名的。Box2d是一个可以说小巧完美的flash 的二维动力引擎,用它可以做一些非常有趣的小游戏。Wow则是我们flash3d的三维动力引擎,比起前两者还是非常不完善的。不知道以后会否有hover的支持,(shockwave是可以用hover的) 3) 游戏引擎 比如说我们现在说的…《上古卷轴》引擎?的意思就是说能够轻松做出自制任务的引擎,这种引擎制作者根本不用考虑游戏的规则,逻辑判断,或者图形效果等等,大部分精力完

unity3d学习游戏开发心得

罗佳 小组排名:黄馨然,罗佳在这将近20天的游戏开发中,第一次一边学习,一边开发游戏,虽然最后做出来的游戏有点差强人意,但是在这整个过程中学到的东西让自己觉得这20天的努力让这一整个学期学到的知识一下子充盈好看了起来。首次开发自己的游戏,是一个较艰难的过程,有时候在一个问题上耗上五六个小时仍无半点进展,那感觉确实让人十分沮丧,同样的,耗上五六个小时解决一个问题时的喜悦之感也是无与伦比的。在这20天的开发过程中,个人感觉比较难的,就是摄像机的处理了,总是无法使场景中的游戏对象,显示在合理的位置,调整摄像机的位置以及角度都非常费时间。 一下是对自己在游戏开发过程中所领悟到的新知识做一个总结: 关于摄影机控制,如果场景中有多架摄影机,那么如何确定第一打开时间所显示的摄影机,就需要设置Camera属性中的Depth数值,数值越大的摄影机越优先显示。 关于材质数量的控制,如果一个物体给与一个材质球,那么Unity3D对于材质数量和贴图数量没有任何的限制。如果一个物体给与多个材质球,我们需要用 Multi/SubObject来实现,但是这种罗列的材质球的数量没有严格的控制,但尽量保持在10以内,过多的数量会导致一些错误。如果不使用Multi/SubObject材质球,也可以选择一些面,然后给与一个材质球。这样系统会自动将其转换成Multi/SubObject材质。综合而言Unity3D软件对于材质的兼容还是很好的。 关于物体的质感,“Diffuse”,“Diffuse Bumped”,“Bumped Specular” 这三种类型为常用类型,其中Bumped需要增加Normal法线贴图来实现凹凸。 Decal 这种材质为贴花材质,即相当于Mask类型,可以再Decal(RGBA)贴与一个带有Alpha 通道的图像,形成和原图像相叠加的效果。 Diffuse Detail 这种材质可以创造出污迹和划痕的效果,即相当于Blend混合材质。 Reflective 其中各种类型可以创造出金属反射效果,需要增加Cubmap贴图。 Transparent 其中各种类型可以创造出透明的效果,需要增加具有Alpha的通道贴图。

基于unity3d游戏设计开发

分类号论文选题类型 U D C 编号 本科毕业论文(设计) 题目基于Unity3D 的android 手机赛车游戏的设计与开发 院(系)信息与新闻传播学院 专业教育技术学 年级2009 学生姓名尹超凡 学号2009214026 指导教师赵刚 二○一三年五月

华中师范大学 学位论文原创性声明 本人郑重声明:所呈交的学位论文是本人在导师指导下独立进行研究工作所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。本人完全意识到本声明的法律后果由本人承担。 学位论文作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保障、使用学位论文的规定,同意学校保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权省级优秀学士学位论文评选机构将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 本学位论文属于 1、保密□,在_____年解密后适用本授权书。 2、不保密□。 (请在以上相应方框内打“√”) 学位论文作者签名:日期:年月日 导师签名:日期:年月日

目录 内容摘要 (1) 关键词 (1) Abstract (1) Key words (1) 1.引言 (2) 1.1研究背景 (2) 1.2研究意义 (2) 1.3本文结构 (3) 2. 研究主要内容 (3) 2.1 研究方法及手段 (3) 2.2 技术路线 (4) 2.3 开发环境 (4) 2.4运行环境 (6) 3. Unity3D简介 (6) 3.1总体概述 (6) 3.2软件特色 (6) 3.3Unity3D 包的使用 (8) 3.4.Unity3D 发布平台 (9) 4.游戏的总体设计 (9) 4.1游戏目标 (9) 4.2 游戏框架 (9) 4.3游戏界面设计 (10) 5.游戏功能的实现 (11) 5.1碰撞检测的实现 (11) 5.2 terrain 地形的创建 (12) 5.3 prefab 树的创建 (16) 5.4 赛车方向改变和加速减速的实现 (18) 6.总结 (19) 致谢 (23) 参考文献 (24)

3D游戏编程入门经典

注:讲述了3D游戏编程所需要的基本知识。利用和c#编写 成为游戏开发人员的条件 我所遇到的每一个开发人员都至少在某一段时间想成为一个游戏开发人员。对于很多人来说,视频游戏不只是空闲时的一种爱好,他们完全被游戏所吸引。人们沉浸在这些虚拟世界中,常常梦想由自己创建如此神奇的天地。 不要被美丽的图形、奇妙的故事情节和感人悦耳的音乐所愚弄,编写游戏是非常困难的工作,只有某些特定的开发人员才能够获得成功。除了所需要的技术天赋之外,一个优秀的游戏开发人员应当拥有其他一些技能,例如,您首先是一个游戏爱好者。如果不是游戏爱好者,则不可能编写出伟大的游戏,这一条件使得游戏开发工作更具有挑战性。 成为游戏开发人员确实不是一件容易的事情。如果没有经验,则不会被游戏开发公司聘用,并且当没有公司聘用时,将更难以获得经验。当前只有少量的课程以及某些学校专注于讲授游戏的开发。但是,入门的最好方式是制作一个样片(demo reel)。它能向您未来的老板展示您的能力和处理事情的方式。 通过本书,您将制作出一个引人注目的样片。 读者对象 我常常被问到:“为什么每个人都想使用.NET Framework编写游戏程序”。其他的问题包括:“.NET Framework不是只用于Web服务器应用程序的吗”,“它不是很慢吗”,等等。对于游戏开发人员(或者

未来的游戏开发人员)来说,这些都是很重要的问题,但他们误解了.NET Framework。 .NET Framework不是最新的Web服务器版本,也不是任何服务器组件的扩展。当然能够使用.NET Framework创建强大的Web服务器应用程序,但是,这并不是它们的全部功能。.NET Framework包括一种功能强大的客户端应用程序编程接口(API)以及Managed DirectX,实际上.NET开发人员需要掌握整个DirectX API。利用它能够编写很多新的应用程序,包括游戏。如果认为.NET Framework只能够编写服务器应用程序,则显得有一点单纯。您也可以利用它创建复杂的客户端应用程序。 关于.NET的性能问题仍然存在,这些问题也很难简单描述。当引入一门“新的”语言或者运行库时,开发人员在采用之前,通常比较犹豫。不久以前,很多游戏仍然是采用汇编语言编写的,因为游戏开发人员不相信C或者C++语言足够快。.NET Framework也遵循这个规则。在证明.NET Framework的性能之前,游戏开发人员都会以一种怀疑的眼光看待它。在本书中,大量的游戏是使用.NET运行库开发的。事实胜于雄辩,与其喋喋不休地讨论.NET运行库的性能有多好,还不如让本书中一些真实的游戏来证明这一点。 为什么使用.NET Framework 任何曾经编写过Windows程序的人都(无论是否使用.NET

unity 3D游戏开发

unity 3D游戏开发 毕业设计 题目 Unity3D游戏开发院系计算机科学与工程系专业计算机科学与技术年级 2011 学号 姓名 指导教师讲师 2015年 3 月 28 日 教务处制 毕业设计书原创性声明 本人郑重声明:所呈交的设计书是本人在指导教师的指导下独立进行研究所取得的研究成果。除了设计书中特别加以注明引用的内容外~本设计书不包含任何其他个人或集体已经发表或撰写的成果作品。本人完全意识到本声明的法律后果由本人承担。 毕业设计书作者签名 年月日 毕业设计书版权使用授权书 本毕业设计书作者完全了解学校有关保障、使用毕业设计书的规定~同意学校保留并向有关学位设计书管理部门或机构送交设计书的复印件和电子版~允许设计书被查阅和借阅。本人授权省级优秀学士学位设计书评选机构将本设计书全部或部分内容编入有关数据库进行检索~可以采用影印、缩印或扫描等复制手段保存和汇编本学位设计书。 本设计书属于: 保密?~在年解密后适用本授权书。

不保密?。 ,请在以上相应的方框内打“?”, 作者签名年月日 指导教师签名年月日 目录 1 绪论 ................................................ 7 1.1 论文研究背景...................................................................... ........................... 7 1.2论文研究目的...................................................................... ............................ 7 1.3论文研究内容...................................................................... ............................ 8 2 游戏开发工具及可行性分 析 ............................. 9 2.1 游戏主要开发引擎...................................................................... ................... 9 2.2 开发可行性分析...................................................................... ....................... 9 2.3本章小结...................................................................... .................................. 10 3游戏设 计 ............................................ 11 3.1 总体设计...................................................................... ................................. 11 3.1.1 游戏介

3D游戏开发需要学什么内容

随着技术的发展,游戏玩家已经纷纷从2D时代迈入了3D、VR时代,有人想要进入游戏开发行业,成为一名游戏开发工程师,这是一个不错的选择。因为目前游戏行业火热,从行业的发展和自身的提升来讲都是非常不错的。那么学习3D游戏开发需要学哪些课程呢? 据统计,目前中国动漫游戏人才缺口达30万左右,动漫游戏企业人才招聘难也逐渐显现出来,那么对于想要学习3D动漫设计的同学是很值得开心的一件事,那么3D游戏设计培训师内容有哪些你知道吗? 游戏程序制作课程包括:C++程序基础、算法与数据结构、Win32程序入门、游戏数学和智能应用。 3d游戏设计师主要学什么,用哪些软件?说完了3d游戏制作学什么,我们再来说说3d游戏制作用哪些软件。3d游戏制作最常用的软件是ps、Painter、3dmax、maya、UVLayout、Body paint。 Photoshop主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具,可以有效地进行图片编辑工作。ps有很多功能,在图像、图形、文字、视频、出版等各方面都有涉及。 Painter是数码素描与绘画工具的终极选择,是一款极其优秀的仿自然绘画软件,拥有全面和逼真的仿自然画笔。它是专门为渴望追求自由创意及需要数码工具来仿真传统绘画的数码艺术家、插画画家及摄影师而开发的。它能通过数码手段复制自然媒质(Natura lMedia)效果,是同级产品中的佼佼者,获得业界的一致推崇。 3D Studio Max,常简称为3ds Max或MAX,是Discreet公司开发的(后被Autodesk 公司合并)基于PC系统的3d动画渲染和制作软件。其前身是基于DOS操作系统的 3D?Studio系列软件。在Windows NT出现以前,工业级的CG制作被SGI图形工作站所垄断。3D Studio Max + Windows NT组合的出现一下子降低了CG制作的门槛,首先开

[图形学]3D数学基础 图形与游戏开发(习题答案)

Answers Chapter 2 1) Give the coordinates of the following points: a (-2.5, 3) b (1, 2) c (2.5, 2) d (-1, 1) e (0, 0) f (2, -0.5) g (-0.5, -1.5) h (0, -2) j (-3, -2)

2) List the 48 different possible ways that the 3D axes may be assigned to the directions “north,” “east” and “up.” Identify which of these combinations are left-handed, and which are right-handed. North East Up Hand North East Up Hand Right Left +x +z +y +x +y +z Left Right +x +z –y +x +y –z Right +x –z +y Left +x –y +z Right Left +x –z –y +x –y –z Right –x +z +y Left –x +y +z Left –x +z –y Right –x +y –z Right Left –x –z +y –x –y +z Right –x –z –y Left –x –y –z Left Right +y +z +x +y +x +z Right Left +y +z –x +y +x –z Right Left +y –z +x +y –x +z Right +y –z –x Left +y –x –z Left –y +z +x Right –y +x +z Left Right –y +z –x –y +x –z Right –y –z +x Left –y –x +z Right Left –y –z –x –y –x –z Right Left +z +y +x +z +x +y Left Right +z +y –x +z +x –y Left Right +z –y +x +z –x +y Left +z –y –x Right +z –x –y Left Right –z +y +x –z +x +y Left –z +y –x Right –z +x –y Right Left –z –y +x –z –x +y Left Right –z –y –x –z –x –y 3) In a popular modeling program 3D Studio Max, the default orientation of the axes is for +x to point right, +y to point forward, and +z to point up. Is this a left- or right-handed coordinate space? Right-handed.

3D游戏开发流程

3D游戏开发流程 1 队伍组成 开发团队 n 制作人 n 执行制作人 n 策划团队 n 程式团队 n 美术团队 销售团队 测试团队 游戏评论队伍 游戏制作人 n 开发组长(always) n 资源管理(Resource Management) n 行政管理(Administration) n 向上負責(Upward Management) n 专案管理(Project Management) 游戏执行制作人 n 专案管理执行(Project Management) n Daily 運作 n House Keeping n Not full-time job position 游戏策划 n 故事设计(Story Telling) n 脚本设计( script ing) n 玩法设计(Game Play Design) n 关卡设计(Level Design) n 游戏調適(Game Tuning) n 数值设定(Numerical Setup) n AI 设计(Game AI) n 音效设定(Sound FX Setup) n 场景设定(Scene Setup) 游戏美术 n 场景(Terrain) n 人物(Character) n 建模(Models) n 材質(Textures) n 动作(Motion / Animation) n 特效(FX) n 用户界面User Interface 游戏程序 n 游戏程序(Game Program) n 游戏开发工具(Game Tools)

n Level Editor n Scene Editor n FX Editor n script Editor n 游戏Data Exporters from 3D Software n 3dsMax / Maya / Softimage n 游戏引擎开发Game Engine Development n 网络游戏服务端开发Online Game Server Development 2 游戏开发流程 创意 提案 制作 整合 测试 除错 调试 赞成 雏形 Pre-alpha Alpha Beta 结束 n 创意(Idea) n 提案(Proposal) n 制作(Production) n 整合(Integration) n 测试(Testing) n 除錯(Debug) n 调试(Tuning) 游戏设计(Concept Design) n 游戏类型(Game Types) n 游戏世界观(Game World) n 故事(Story) n 游戏特色(Features) n 游戏玩法(Game Play) n 游戏定位(Game Product Positioning) n Target player n Marketing segmentation / positioning n 风险评估(Risk) n SWOT (优势Strength/缺点Weakness/机会Opportunity/威胁Threat) 游戏提案(Proposal) n 系統分析(System Analysis) n 游戏设计文件撰写(Game Design Document) n 传播媒介文件撰写(Media Design Document)

《3D游戏编程入门(C#)》讲解

3D游戏编程入门(C#) 目录 第I部分Microsoft .NET简介 第1章游戏开发和托管代码 (3) 1.1 什么是.NET? (3) 1.2 什么是托管代码 (5) 1.3 使用Microsoft Visual Studio .NET 2003 IDE编写代码 (5) 1.3.1 C#代码 (6) 1.3.2 VB .NET代码 (8) 1.4 在命令行中编译.NET代码 (9) 1.5 游戏开发简述 (10) 1.6 开发人员 (10) 1.7 游戏开发过程 (11) 1.8 工具 (12) 1.9 小结 (16) 第II部分图形和游戏1的介绍 第2章策划第一个游戏 (19) 2.1 提出游戏构想 (19) 2.2 理解一个3D游戏的需求 (21) 2.3 游戏规范 (24) 2.4 小结 (26) 第3章理解示例框架 (27) 3.1 创建项目 (27) 3.2 枚举所有设备选项 (32) 3.3 小结 (39) 第4章在屏幕上显示 (40)

4.1 创建设备 (40) 4.2 开始绘图 (47) 4.3 加载并绘制网格 (48) 4.4 在场景中添加照相机 (51) 4.5 小结 (54) 第5章完成代码 (55) 5.1 理解高分辨率计时器 (55) 5.2 处理丢失的设备 (60) 5.3 添加帧速率输出 (63) 5.4 设计UI界面 (65) 5.5 设计按钮 (72) 5.6 小结 (75) 第6章实现用户界面 (76) 6.1 设计主菜单 (76) 6.2 插入到游戏引擎中 (81) 6.3 选择人物(Loopy).. 84 6.4 利用新界面更新游戏引擎 (91) 6.5 小结 (95) 第7章实现玩家和块 (96) 7.1 编写Player对象 (96) 7.2 设计块 (104) 7.3 小结 (110) 第8章实现级别对象 (111) 8.1 实现级别 (111) 8.2 控制玩家的移动 (116) 8.3 处理级别的更新 (119)

3D论文3D游戏引擎论文

3D论文3D游戏引擎论文 摘要:游戏引擎是游戏开发的技术核心。为了更好地理解游戏引擎,根据游戏引擎的特点,介绍3d游戏引擎,并从实时渲染、交互性、多人参与、碰撞检测四个方面简要阐述了3d游戏引擎的特点。为理解3d游戏引擎技术提供了一个理论支持。下一步将对3d游戏引擎的关键技术进行研究。 关键词:3d;游戏引擎;特点;技术核心;理论支持 a brief introduction of 3d game engine xu lei1, fan liu-qing2 (1.engineering college of armed police force, xi'an 710086, china; https://www.doczj.com/doc/d89998990.html,mand college of armed police force, shijiazhuang 050061, china) abstract: game engine is the core technology of game development. in order to understand the game engine better, according to the characteristics of the game engine, this paper introduces 3d game engine, and has a brief introduction of characteristics of 3d game engine from real-time rendering, interactivity, multi-participants and collision detection. so it provides a theoretical supporting to understand the 3d game engine. the key technology of 3d game engine will

3D游戏发展史

3D游戏发展史(Ⅰ.Ⅱ) 类别:技术类 随着时代进步,从简单的色块堆砌而成的画面到数百万多边形组成的精细人物,游戏正展示给我们越来越真实且广阔的世界,对于近几年才接触游戏的玩家来说,玩着《魔兽世界》、《生化危机5》等游戏,或许想象不出十多年前的3D游戏是多么的简陋随着时代进步,从简单的色块堆砌而成的画面到数百万多边形组成的精细人物,游戏正展示给我们越来越真实且广阔的世界,对于近几年才接触游戏的玩家来说,玩着《魔兽世界》、《生化危机5》等游戏,或许想象不出十多年前的3D游戏是多么的简陋。而作为3D游戏制作的心脏,3D游戏引擎一直以来都是见证3D游戏发展的最核心部分。那么,下面不妨让我们打开时光之门,从最初的地方一起随小编一起慢慢走来: 引擎:星际恶棍/地下创世纪(Space Roger/Ultima Underworld) 发布时间:1990 代表游戏:星际恶棍/地下创世纪 星际恶棍 由起源系统公司(Origin Systems)开发的这两款游戏可以说是3D游戏的鼻祖,也开创了以游戏名命名游戏引擎的惯例。早在20年前,这些3D游戏的先驱者开始了史无前例的尝试,在当时无异与石器时代的PC平台上表现立体的画面,《星际恶棍》的系统要求是386(编:用一些简单的数据扫盲下,386的主流配置内存仅2mb,硬盘200mb算蛮大的了)

地下创世纪 而之后开发的《地下创世纪》即便在当时最高配置的486上运行也会显得慢慢吞吞。硬件的落后限制了3D技术的深入研究和发展,很快这两款游戏就无疾而终了。 引擎:三维像素(Voxel) 发布时间:1992 代表游戏:银翼杀手(Blade Runner)、卡曼奇系列(Comanche series)、命令与征服:泰伯利亚之日/红色警戒2(Command & Conquer: Tiberian Sun/Red Alert 2)、三角洲(Delta Force) 卡曼奇 这款由NovaLogic开发的3D引擎出现在卡曼奇系列游戏的每一作中,游戏制作者能够比较简单利用这款引擎勾勒出起伏的地形环境,在小物品的3D模型创建上也有独到之处,并被运用到许多伪3D即时战略游戏的车辆设计上。

小型3D游戏的开发与实现

第10卷第2期重庆科技学院学报(自然科学版)2008年4月 3D网络游戏中“3D”主要指三维的场景,“ 网络”即基于Internet,“游戏”即互动性和可玩性,“音乐”刺激玩家听觉,烘托场景氛围。游戏的每个模块都比较复杂,需要精心设计。 1设计中需要考虑的问题 要顺利完成一个较大型工程,关键是处理好它的组织结构。在这里采用现在最为流行的面向对象的程序设计方式[1]来开发这款游戏。下面就游戏的各个主要模块进行具体分析,如图1所示。 图13D网络游戏中的主要模块 在这个游戏里面3D场景的编程和图形图像联系最为密切。场景部分主要由NPC、OPC、静态物体、地面组成。其中地面由基本层、贴花层、路径层组成。场景中的静态物体都是通过场景编辑器(worldeditor)完成的,在游戏中只需把场景编辑器生成的scene.dat在初始化时加载到游戏中。 2设计的实现 2.1动态的物体 游戏中的动态物体主要有NPC(nonplayercon-trol)和OPC(otherplayercontrol)。 在CGameRole类中定义了NPC、OPC的公共函数[4]。为了使人物的动作变得更平滑,对人物的网格模型进行线性插值。人物还有一点不同于其它物体的地方就是他必须动态的把每一帧的顶点装入顶点缓冲。另一方面,玩家在互相攻击时应注意,要使两个玩家有一定距离才开始攻击,同时要调整玩家的攻击角度(对角度的控制可通过计算玩家坐标位置的正切来获得)。游戏中有使用飞镖进行远程攻击的功能,按下右键控制玩家行走(玩家在RUN状态下不能发射飞镖),按下左键发射飞镖攻击对方。 (1)Dart(飞镖--一个简单的三角形) 在Ctriangle类中,飞镖到达对方一定范围内才视为击中。在飞镖飞行时旋转飞镖,击中后,飞镖消失。如果发射飞镖频率过高,下一个飞镖就会替代前一个,前一个飞镖到达不了指定位置。所采取的解决方案是控制两次发射飞镖的时间,这样就可以让每个飞镖都到达目的地,不会导致后面发射的飞镖将前面的覆盖。 显示的优化:当飞镖碰到物体时碎裂成几个小的三角形消失。 (2)人物血量 在Cblood类中,人物血量用红白相间的贴图(红、白各占50%)显示。通过计算当前血量与总血量的比例来决定裁切贴图的多少。当前血量小于 50%就裁掉一部分红色贴图,反之裁掉白色贴图。 2.2对NPC的控制 NPC指的是由客户端控制的玩家。在这里定义一个CNPC_control类来实现对游戏中怪物、商店售 货员、传送员等的统一管理。主要函数和具体功能如下:Animate(float)--在NPC渲染之前重新把下一帧 小型3D游戏的开发与实现 王建刚1,2蒋玉明1龚燕1蒋永1 (1.四川大学,成都610065;2.中国人民解放军77221部队,昆明650000) 摘要:在原有结构体系的基础上,设计了独具风格的3D网络游戏,所采用的D3D和C++在WINDOWS系统中得以实现,具有较强的实用性。 关键词:实时渲染;Direct3D;在线网络游戏;游戏引擎中图分类号:TP311.51 文献标识码:A 文章编号:1673-1980(2008)02-0103-03 收稿日期:2007-12-06 作者简介:王建刚(1978-),男,四川威远人,四川大学计算机学院2006级硕士研究生,研究方向:计算机网络与信息系统。 engine 游戏 音乐 场景客户端NPC OPC 静态 地面 客 户端脚本 传送 OPC 血条飞镖房屋 … 桥 基本层贴花层路径层 … 103 ??

3D游戏开发

精心整理 3D游戏开发 三维计算机图形和二维计算机图形的不同之处在于计算机存储了几何数据的三维表示,其用于计算和绘制最终的二维图像。 除了游戏开发者之外,可能大部分的开发者所接触的开发过程都是2D应用的开发过程。与2D应用开发相比,3D应用拥有更炫的运行效果,更加真实和沉浸式的交互体验;除了在游戏开发中广泛使用之外也可以使用在地图、VR等领域。 在 其 制 WebGL(WebGraphicsLibrary)在GPU中运行。因此需要使用能够在GPU上运行的代码。这样的代码需要提供成对的方法(其中一个叫顶点着色器,另一个叫片段着色器),并且使用一种类C/C++的强类型语言GLSL(OpenGLShadingLanguage)。每一对方法组合起来称为一个program(着色程序)。

简而言之,WebGL是一种在任何可兼容的网页浏览器中渲染3D图形的JavaScriptAPI,但是直接使用WebGL来绘制图形需要很多额外的知识以及大量的开发成本,由此Three.js这一3D应用的开发框架应运而生。 WebGL在浏览器中的支持情况如下图所示: three.js three.js=three+js。 1. 2. 3. 二、形状(Geometry)、材质(Material)、模型(Mesh) 此三大组件是构建可供渲染的物体的关键组件。其中: 1.形状即是点的集合,代表在3D的坐标系下的各种几何形状,几何形状和具体的物体展示是无关的。常用的几何形状包好立方体、球体、圆柱体等。 2.材质与图形表示方法是相关的,比如我们下文中将要使用到的MeshLambertMaterial材质就是常用材质的一种,材质决定了最终模型对光照的反

相关主题
文本预览
相关文档 最新文档