当前位置:软件学习 > Director >>

Director 3D 基础(3)

Director 3D 基础
    为模型加上 texture (材质、贴图)

这一节要说的是建立一个按钮为模型加上 texture (材质、贴图),以更改它的表面外观。
1 、停止影片,重置你的播放头,使它回到第一帧。
2 、象上面一样利用工具面板中的按钮工具在四个按钮之上建一个按钮。
3 、在按钮上输入 Add Texture 。
4 、在演员表中把这个按钮的名称改成: AddTexture
5 、在分镜表中右键这个按钮角色(在通道 6 ),在弹出的菜单中,选取 “Script…” ,打开 Script 窗口。
6 、在 Script 窗口中输入(此时是 on mouseUp 事件):
myTexture = member(3).newTexture(‘‘red square‘‘, #fromCastmember, member(1))
member(3).model(1).shader.texture = myTexture
第一句程序的意思是在演员表的第 3 个演员( “Orb”3D 演员)中用演员表中第一个演员的图案建立一个名字叫做 “red square” 的新的 texture (材质、贴图),并把它赋给变量 myTexture 来记住它。第二句的意思是把 “Orb” 角色中的模型 1 (即球)的 shader (材质球)中的 texture (材质、贴图)属性改变成变量 myTexture 所指定的值。
[ 特注:关于 shader :以 3DMax 为外部三维编辑器, director 中的一个 shader 就是 max 中的一个材质球,一个 shaderlist 就是一个 model 的 shader 如:一张桌子,桌面是一种材质(一个材质球),四个桌腿共用一个材质(另一个材质球),桌面桌腿都是分开的 model (共五个),所以导入 director 中,共有两个 shader ,五个 shaderlist 。摘自 zain 的文章《 shockwave3D 制作之随便说》 ]
7 、关闭 Script 窗口,保存你的影片。
8 、重置你的播放头,使它回到第一帧。播放影片,按 AddTexture 按钮,怎么样,看到球的表面变了吧。如果你按了按钮超过一次,会弹出一个 Lingo 出错的提示框。因为第一次按时已经在演员表的第 3 个演员( “Orb”3D 演员)中建立了名为 “red square” 的新的 texture (材质、贴图),当第二次按时, Lingo 程序会尝试再建一个一模一样的同名的 texture (材质、贴图),这是不允许的。

移去 texture (材质、贴图)

为了移去 texture (材质、贴图),可以再建一个按钮,并在按钮的程序中用 resetWorld() 命令实现。这个命令可以移去任何在 3D 演员中新建的项目,并返回其最初的状态。例如,上面所做的新的 texture (材质、贴图)就可以移去。
1 、停止影片,重置你的播放头,使它回到第一帧。
2 、象上面一样利用工具面板中的按钮工具在五个按钮之上建一个按钮。
3 、在按钮上输入 Reset World 。
4 、在演员表中把这个按钮的名称改成: ResetWorld
5 、在分镜表中右键这个按钮角色(在通道 7 ),在弹出的菜单中,选取 “Script…” ,打开 Script 窗口。
6 、在 Script 窗口中输入(此时是 on mouseUp 事件):
member(‘‘Orb‘‘).resetWorld()
意思是重置 3D 演员 “Orb” 为初始状态。
7 、关闭 Script 窗口,保存你的影片。
8 、重置你的播放头,使它回到第一帧。播放影片,随意按几下旋转或移摄像机的按钮。
9 、按按钮 ResetWorld 。
可以看到球又回到原位,且表面外观又复原了,这时你又可以按 AddTexture 按钮而不会引起 Lingo 报错了。

用帧程序(或叫帧脚本、帧行为)实现旋转模型

当你使用 3D 演员建立了你自己的影片时,有时候会希望你的 3D 模型在没人对它操控时也会自动旋转或移动,这时你就可以利用帧程序来实现,下面的例子是实现 “Orb” 演员中的球的自动旋转的。
1 、打开分镜表。
2 、双击程序通道(脚本通道)的第 28 帧,这时会打开 Script 窗口,显示原来在第 28 帧处的程序: go to the frame
3 、把插入点移到 “on exitFrame” 后,按下回车键,插入点会下移到新的一行。
4 、在这新的一行输入以下程序:
member(‘‘Orb‘‘).model(1).rotate(0,5,0)
这句程序和上面为旋转按钮建立的程序是基本上一样的。但在这儿的作用是:每当播放头插放一次第 28 帧时, rotate 命令就使球旋转 5 度。
5 、关闭程序窗口并播放你的影片,这时你一样可以使用前面建过的按钮。只是旋转按钮的效果就不太一样了,因为,这个球自己在不停地自动转。

利用 message 窗口进行测试

Director 包含了一批重要的命令来控制 3D 演员与它们内部的组件。你会发现在自己的程序中使用这些命令前先试验一下这些命令是十分有好处的。 Message 窗口在你决定是否在你的影片中使用一个命令时提供了一种简易的方法去测试这个命令。
这一段向你展示如何在 message 窗口测试 Lingo 。你可以只是单单输入一句 Lingo 程序,并立即看到运行结果。
如果你想查看一个变量或一个属性,可以使用 put 命令。这个简单的命令可让 Lingo 在 message 窗口显示你的 Lingo 程序的结果。
如果你想控制一个演员或角色的外观,你可以在 message 窗口输入必要的 Lingo 语句并马上看到改变的结果。这种改变是不论影片是不是正在播放都可以进行的。
现在,来试试我们已经熟悉了的命令: rotate 命令
1 、停止影片。
2 、打开 message 窗口。
3 、在 message 窗口中输入: member(‘‘Orb‘‘).model(1).rotate(0,50,0)
4 、按回车键。
5 、对于某些类型的演员,例如 3D 演员,当影片不播放时你必须点击舞台上的角色才能让 Lingo 的效果显示出来。这样才能强迫 Director 重新刷新舞台上的内容。因此,请点击舞台上的 3D 角色。
6 、现在再在 message 窗口中输入: member(‘‘Orb‘‘).model(1).rotate(50,0,0)
7 、按回车键。不要点击舞台上的 3D 角色,再输入命令: updateStage ,再按回车键。这个命令也能强迫 Director 重新刷新舞台上的内容。这一次,你可以看到球是绕 X 轴旋转的了。
现在你明白使用 message 窗口是一个好极了的测试 rotate 命令关于绕不同轴转不同数值的角度的方法了。现在,你可以尝试测试一些你还没见过的命令了。

在 message 窗口查看属性

当你不能确定一个演员里有些什么内容时, message 窗口的作用就显得很有用了。原因是你会时常遇到 3D 演员中有许多内部内容(组件)的时候。
在这里可以使用 message 窗口来查看 3D 模型的 textureList 。
1 、重置播放头,播放影片。
2 、如果你见到球表面是红色的,按 Reset World 按钮。
3 、在 message 窗口中输入以下语句,并按回车键:
put member(‘‘Orb‘‘).model(1).shader.textureList

[1] [2] 下一页  

[page_break]

Director 会马上在 message 窗口显示出 3D 模型的 textureList 中的值:
-- [, , , , , , , ]
你可以看到模型的八个 texture 内容都是空的。
4 、乘着影片还在播放,按一下 Add Texture 按钮,球变红了。
5 、在 message 窗口中把插入点移到第 3 步骤中输入的语句后再按回车键。
这次显示的 textureList 结果包括了附加在 Add Texture 按钮上的程序所建立的 red square texture 了。
-- [texture(‘‘red square‘‘), , , , , , , ]
6 、又乘着影片还在播放,按一下 Reset World 按钮。
7 、又在 message 窗口中把插入点移到第 3 步骤中输入的语句后再按回车键。
-- [, , , , , , , ]
显示的 textureList 结果又已经恢复初始状态的值了。

设定灯光(探照灯、照射灯)的颜色

现在来尝试调整 3D 世界中的灯光颜色。一个 3D 世界可以包含你想加进去的许多灯光。本例中的 “Orb”3D 演员包含了三种灯光,你可以查明它们并更改它们的颜色。
1 、首先,你可以让 Director 显示在 “Orb”3D 演员中存在几种灯光。在 message 窗口中输入以下语句,并按回车键:
put member(‘‘Orb‘‘).light.count
会出现结果数字 3
-- 3
count 属性可以用来检查一个 3D 演员中的许多项目内容,包括 cameras 、 models 、 model resources 和其它别的什么。
2 、然后,你可以查看 “Orb”3D 演员中第 3 种灯光的名字。在 message 窗口中输入以下语句,并按回车键:
put member(‘‘Orb‘‘).light(3).name
出现了第 3 种灯光的名字
-- ‘‘Ambient Light‘‘
3 、现在可以使用颜色属性来设置名字叫 “Ambient Light” 的灯光的颜色了。颜色是可以设成任何 RGB 色彩的。在这里,试把它设为蓝色。在 message 窗口中输入以下语句,并按回车键:
member(‘‘Orb‘‘).light(‘‘Ambient Light‘‘).color = rgb(0, 0, 255)
由于影片还在播放,你会马上看到球变蓝色了。这是因为在蓝色灯光的照射击下。
4 、尝试把灯光改为绿色。在 message 窗口中输入以下语句,并按回车键:
member(‘‘Orb‘‘).light(‘‘Ambient Light‘‘).color = rgb(0, 255, 0)
球变绿色了。
你可以尝试任何你喜欢的数值的 RGB 色彩。每一个 RGB 数值必须在 0 到 255 之间。
你可以使用 message 窗口来尝试所有 Lingo 命令与属性。当你养成这样的习惯时,你会发现当你要在你的影片中学习如何使用新的没用过的 Lingo 以实现新的 Director 功能时,它是非常有用的工具。

上一页  [1] [2] 

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,