Director 3D 基础(4)
Director 3D 基础
本教程的例子是用 Macromedia 的教程例子。
一、关于 3D 演员与精灵
在 Director8.0 或更早的版本中,一个演员都是存在影片中并完成特定的任务:一个数码声音、一个图片、一篇文字、一个按钮、一个图标、甚至是一个程序或行为。
这些各式各样的 2D 演员仍在 Director8.5 中完成重要的任务,但 Director8.5 有了新的不同的 3D 演员了。一个 3D 演员包含一个完整的 3D 世界,包括一些模型们以及它们给赋予的行为等。
在 Director8.0 或更早的版本中,一个精灵是一个演员的实例 &;#8212;&;#8212; 在分镜表中占有特定一段(即是角色)。如果你改变一个精灵,你不会改变这个演员的;但如果你改变了这个演员,你就改变了所有使用这个演员的精灵(角色)。(十年特注:这句话可以这样理解,一个演员可以做多个角色。)
这些各式各样的精灵仍然以 2D 演员的实例的形式存在于 Director8.5 中。然而,一个 3D 演员却是不同的了,因为每个 3D 演员的 3D 精灵在该演员中通过使用摄像机的方法可以有不同的外观。每个摄像机能看到一个 3D (世界)演员的外观:一个摄像机可以从前面来看一个模型,而另一个摄像机可以从侧面来看这个模型。由于每个在用同一个 3D 演员的 3D 精灵可以设定为不同的摄像机,所以用同一个 3D 演员的各式各样的精灵可以有有同的外观的。
二、在一个 3D 世界
在 3D 世界中的各组成部分之间的关系有点类似于 2D 精灵们和演员们之间的关系:
1 、一个模型资源包含可以许多模型共同的一整套的几何数据,就象许多精灵可以用同一个演员。
2 、同一材质球( shader )可以为多个模型定义颜色,就象一个演员可以定义多个精灵的外观。
3 、材质球使用许多表面贴图 (textures) 象模型使用许多模型资源,改变一种表面贴图可以影响所有使用它的材质球。
4 、同一种运动可以应用于不只一个模型,就象一个演员可为多个精灵所共用。
三、关于样本影片(这篇教程的)
这篇教程的样本影片 3Dintro.dir 演示了一个 3D 演员里是各个组成元素是如何工作在一起的。这个影片包含了在 Director 中创建一个 3D 演员和联合使用 2D 和 3D 的技能。影片中用于解释发生了什么事的文本与图象精灵是与 Director8.0 或更早版本中一样受分镜表控制的。而 3D 演员与 3D 环境是受 Lingo 程序控制的。每个程序是通过单独的步骤加于运动的模型上的。
当你运行这个影片时,你可以点击各行文本以引发以下各步骤内容:
1 、创建一个空的 3D 演员
2 、添加一个模型(在这儿是一个球)进空的 3D 演员中
[color=#FFFFFF'][/color]
3 、为模型添加一个材质球( shader )
4 、为材质球添加表面贴图 (texture) ,在这里就是为球加了表面图案
5 、使模型动起来
6 、创建第二个模型(在这儿是一个正方体),并且为两个模型建立父代关系(即一个是主,另一个是从)
7 、使第二个模型环绕第一个模型运动起来
通过这些步骤,影片提供了你能利用 Director8.5 的 3D 功能来做一些事情的一个简单的例子。你可以利用整套的 3D 命令做更多的事情的。
本文剩下的部份就是介绍这个样本影片以及它所用到的行为等。
四、创建一个 3D 演员
样本影片 3Dintro.dir 已经包含了一个将要通过 Lingo 程序来添加模型们的 3D 演员。如果你建立了你自己的新影片,你就必须从创建一个空的 3D 演员开始。
创建空的 3D 演员的步骤:
1 、在 Director 中,选取 Insert > Media Element > Shockwave 3D 。
2 、为这个新的 3D 演员命名。
一个新的空的 3D 演员就被加进了演员表中了。
五、加一个球进 3D 世界中
样本影片使用了创建球体的行为,被附加于 Create Sphere 文本演员上,点击文本演员就加了一个球体进 3D 世界。
创建球体的行为的 Lingo 脚本如下:
on mouseUp(me)
if voidP( sprite(1).member.model(‘‘newSphere‘‘)) then
tSprite = sprite(1)
tMember = tSprite.member
tTempModel = tMember.newModel(‘‘newSphere‘‘)
tSphereResource = tMember.newModelResource \
(‘‘newSphereResource‘‘, #sphere)
tSphereResource.radius = 60
tTempModel.resource = tSphereResource
tTempModel.parent = tMember.group(‘‘world‘‘)
tTempModel.addToWorld()
tCenterPoint = point(sprite(1).width/2, sprite(1).height/2)
tPointToVector = tSprite.camera.spriteSpaceToWorldSpace \
(tCenterPoint - point(tSprite.left,tSprite.top))
tMember.model (tTempModel.name).transform.position = \
tPointToVector
go next
end if
end
这个脚本是这样工作的:
1 、脚本创建一个新的模型,叫 “tTempModel” 。
2 、然后创建一个新的球体模型的资源叫 “tSphereResource” 。由于球体是原始的基本的形状,所以可以在空的 3D 世界凭空创建它。
3 、然后脚本添加一个定义半径长度的尺寸给模形资源。
4 、这个新创建的球体模型被指定用于叫 “tTempModel” 的球体模型。
5 、这个模型被指定为这个 3D 世界的子对象。
6 、把模型加进世界中。
7 、脚本给模型一个在 3D 世界里的位置。
留意,脚本并没有创建灯光。然而, 3D 世界里的灯光已被属性检查员打开了。
六、添加一个材质球 shader
一旦创建了球体,就可以点击第二行文本 “Create Shader” ,利用添加材质球行为为球体添加材质球。添加材质球行为的脚本如下:
on mouseUp(me)
if voidP( sprite(1).member.shader(‘‘newShader‘‘)) then
tSprite = sprite(1)
tMember = tSprite.member
tTempShader = tMember.newShader(‘‘newShader‘‘, #standard)
tMember.model(‘‘newSphere‘‘).shader = tTempShader
go next
end if
end
脚本简介:
1 、确定是否有材质球加在球体上了。
2 、如果没有,用 newShader() 命令创建一个材质球。
3 、应用材质球于球体。
注意到在这个步骤中没有做任何可见到的东西 —— 球体看起来毫无变化。添加材质球是为了使球体能给添加上可以改变外观的贴图( texture )。