纳金网

标题: virtool三大基本要素:元素、类和面向对象设计 [打印本页]

作者: yeu1233    时间: 2012-9-13 14:40
标题: virtool三大基本要素:元素、类和面向对象设计
(一)概述

Virtools Dev 组织元素进入类。元素包括你进入 Virtools Dev 后带来的媒体 (模型,声音,纹理等),也包括你在 Virtools Dev中产生的物体(例如曲线、场景、现场等)和数据(例如参数、属性和脚本)。

这章的主题是, 专注於 Virtools 对交互对象的科学分类,包括:

        Virtools Dev 如何分类媒体。(举例来说,在Virtools中有灯光类,它包含所有灯光的属性,每个灯光是灯光的一个例证,而且有它自己的特性,例如它的颜色和它的范围)。

        某些操作为什麽只可能出现在某个元素上(类)。(举例来说,为什么字符才能使用字符动画)。

        某些操作为什麽可以出现在所有元素上。(举例来说,所有的元素都能被激活或解除激活)。

这章介绍的Virtools交互对象类的层次,对大多数使用者足够了。然而,你能在Virtools的SDK中找到类层级结构完整的描述。





(二)面向对象设计

Virtools Dev 采用面向对象的方法建立一个作品(一个 CMO 文件)。即,每个元件有一个唯一的特性,各种特性由类来描述。元件受控于交互行为模块(BB)中的方法以及参数操作符(paramOps)。Virtools Dev中的类被称为 CKClass 。
例如,有一个Virtools Dev中的类叫做CKCharacter,只有CKCharacter能用于角色的特定行为设计。(例如角色控制器BB)

Virtools Dev的面向对象的特性意味着你导入到Virtools Dev中的任何事物(以模型、声音等形式出现的元件)都是一个CKClass的实例。同样,你在Virtools Dev中创建的任何事物(从一个摄象机到一个阵列)也都是一个CKClass的实例。图1-1说明了Virtools类层次结构中的交互对象分支。





(三)继承

使用类层次结构的优势是可以使用继承。也就是说,任何元素都有它自己独特的特性,并且继承了它父类的特性。



例如,类CKLight继承自 CK3Dentity,CK3Dentity继承自 CKRenderObject,CKRenderObject继承自 CKBeObject。

所以,一个灯光竟然有了CKLight类对象的特性,就像:

        灯光类型(点、方向等)

        灯光颜色(白色、红色等)和

        灯光的照射范围



这些特性能够在建立灯光(在创造模式)或者在进行交互行为时(实时运行,例如播放模式)进行改变。

其次,一个灯光是一个三维实体,意味它继承了三维实体在3D空间内的位置、方位等特性。就因为灯光是一个三维实体,所以能够应用到三维实体上的任何行为也能应用到灯光上。

第三,一个灯光是一个渲染对象,意味着它能够被渲染(能够在重放中被看到)。就因为灯光是一个渲染对象,所有能应用到渲染对象上的任何行为也能应用到一个灯光上。

最后,灯光还是一个交互对象,也就意味着它能被附着一个交互动作(有些Virtools类,例如存储内部数据的类,不能附着动作给它)。就因为灯光是一个交互对象,所以任何能应用到交互对象的行为也能应用到一个灯光上。



(四)特化

Virtools Dev对行为提供了特化,因此,对于完成某些特定任务(也就是多态性),其行为进行了优化处理。例如,移动一个3D帧比移动一个角色更容易,这是因为移动3D帧的行为被优化了。

优化行为减少了计算时间,在可接受的渲染质量下,使作品更小、对用户的输入反应更快。



(五)集合

Virtools Dev支持集合,在具有逻辑关系的二个元素之间,一个元素是另一个元素的一部分,但他们分别都具有自己的特性。

例如,图1-2所示的 3D对象,可以看到有一个Object Meshes栏。虽然在同一时刻只有一个网格能被激活,但是一个3D对象可以拥有好几个网格。
所以说,3D实体元素(不管它是一个物体还是一个角色等)之间有关联,但每个元素都保持相对的独立性。在上述的例子中,纹理是材质的一部分,材质是网格的一部分,网格是3D物体的一部分。

因为每个元素都保持相对的独立性,所以每个元素的特性(例子中的物体网格、材质、纹理)都能够被快速简单地改变。事实上,全部的元素都能被另一个兼容元素所交换。

例如,你可以改变一个3D物体的网格、材质或者纹理—或者它们的任意组合,而不改变3D物体存在的现实。

注意:如果改变一个角色的网格,那么很可能你的动画就不会象预期那样工作了。

运行时集合、场景层次

一个场景由元素组成,通常被运行时激活。场景内的元素被组织到一个场景层次中。

Virtools Dev在场景层次内提供了一个特殊的集合形态。在运行时,元素之间的关系通过Set Parent和Add Child(两者都在3D Transformations/Basic中)被确定。运行时集合允许你在任意3D实体集之间建立关联,典型的是,通过建立3D实体集,产生单一化的应用程序。

例如,利用建模软件,使用Set Parent 和Add Child,你可以建立一部汽车的3D实体层级:一个有门、车身、轮子的汽车。一旦层级关系被确定,就能自动的变化汽车的子物体:门、车身、轮子。

注意:Set Parent 和 Add Child只在场景层级中建立关联而不能在CKClass层级中建立。在Set Parent 或者 Add Child被激活之前,如果要使元素恢复到初始状态,通过按Reset IC键,关系被删除。

共享元素

Virtools Dev由于支持集合,所以允许你能共享例如像声音、动画、网格、材质和纹理等这样的元素,并且贯穿在你的作品中。

例如两个椅子能共享相同的网格、材质和纹理,所以二把椅子看起来一样,但有不同的名字。然而,二把椅子也可以有相同的网格、不同的材质和纹理,那样二把椅子将会有相同的形状,但看起来不一样。

共享元素能够极大地减少文件尺寸,减轻CPU和显卡的工作量。在作品中减少元素的数量也能使开发作品更容易。





(六)联合

联合允许Virtools Dev在CKClass层级内,在两个没有被直接指定父--子关系的元素之间建立一个逻辑关系。通过联合,一个对象可以和另一个明显不一样的对象建立沟通渠道。

例如一个角色经常用一组3D物体联合实现碰撞检查、管理和阻碍的目的。




欢迎光临 纳金网 (http://old.narkii.com/club/) Powered by Discuz! X2.5