Director基础教程:Director 3D 基本的(8)
2024-09-08 19:27:13
供稿:网友
director 3d 基础
移动模型与摄像机
在 director 8.5 中,不止一种方法去移动模型与摄像机。模型与摄像机可以相对于它们自己、其它模型或整个身处的 3d 世界而移动。另外,这些物体可以利用两种不同的 lingo 程序来移动。无论你选择哪种方法,都会有明显的效果于你的 3d 演员的外观。
样版影片
本文的样版影片是 moving_model_and_camera.dir 。你可以打开来查看它的程序,如果你喜欢的话,你可以改动它。
看 scene 1
影片中的第一个 scene 说明了如何利用简单的 lingo 命令 rotate 和 translate 来移动模型和摄像机。
舞台上包含了一个 3d 精灵 ―― 一个含有四个字母的模型。还有一些精灵是显示模型与摄像机的当前位置与旋转角度的文本字段。当按下舞台左下角的说明文字中说明的键时,你可以移动和旋转摄像机和模型。(请注意,如果要旋转是要按住换档键的)
查看名叫 “interface 1” 的脚本演员,它是控制 3d 模型和摄像机的运动的。这个脚本一开始就检查 shift 键是否按住了,以决定是用 rotate 还是 translate 命令。
member(‘‘3d‘‘).model(‘‘a‘‘).rotate(-1, 0, 0, #world)
当使用 rotate 命令,事件会在一个键每次按下时轻微改变一个模型的方位角度。当使用 translate 命令,事件会在一个键每次按下时轻微改变一个模型的位置。每次键按下会在一个轴上改变模型的位置与旋转角度的一个单元值。你可以在舞台上的位置与旋转字段中看到每个轴上的数值是如何依赖于哪个键按下而改变的。
注意到 rotate 和 translate 命令包括了一个 “#world” 参数。这告诉 lingo 模型的运动是相对于整个 3d 世界的,而不是相对于 3d 世界中的其它物体的。
影片提供了一个代替程序, alternate interface ,可以代替 “interface 1” 程序。这个代替程序履行修改位置与旋转属性的数值的同样的任务,却不是使用 rotate 和 translate 命令。
看 scene 2
影片中的第二个 scene 说明了如何移动模型和摄像机相对于其它物体。在这个 scene 的 3d 世界中包括了三个模型而不是一个。每个有四个字母的模型都是大模型大写字母 “p” 的子对象。由于这种关系,小模型们可以相对于父对象大写字母 “p” 而运动,就象相对于 3d 世界或相对于它们自身一样。
现在的舞台看起来和 scene1 一样,只是多了三个按钮,是用来允许你选择小模型们相对于它们自己、它们的父对象或整个 3d 世界而运动。你可以通过选择标记是 “self” 的按钮来选择小模型们相对于它们自己运动,选择标记是 “parent” 的按钮来选择小模型们相对于它们的父对象运动,选择标记是 “world” 的按钮来选择小模型们相对于整个 3d 世界运动。
名叫 “selfbeh 、 parentbeh 和 worldbeh” 的脚本的作用是更新记录 “#self , #parent , 或 #world” 的全局变量 grelativeto 。举个例子:
on mouseup
grelativeto = #self
end
然后,全局变量 grelativeto 被用来传送相对参数给在 scene2interface 脚本中的 translate and rotate 命令。
member(‘‘3d2‘‘).model(‘‘a2‘‘).rotate(-1, 0, 0, grelativeto)
试验各种不同的相对运动并观察它们可见的不同效果。(记住要按 shift 键呀!:)(完)