下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 VirTools教程

VirTools教程.doc

VirTools教程

huagang
2011-11-30 0人阅读 举报 0 0 暂无简介

简介:本文档为《VirTools教程doc》,可适用于IT/计算机领域

第一章基本概念这部分内容让你理解什么是Virtools的本质、它是如何工作的。如果在你阅读本章内容之前就进行脚本设计那是你自己的损失。       什么是Virtools?       元素、类和面向对象设计       作品的组成元素       Virtools进程循环       行为引擎行为和脚本参数参数操作(运算)属性Virtools脚本语言(VSL)       渲染引擎       初始状态一、什么是Virtools(一)概述Virtools是D虚拟和互动技术的集成。Virtools由以下部分构成:       创作应用程序       行为引擎       渲染引擎       Web播放器       SDK(二)创作应用程序VirtoolsDev是一个创作应用程序允许你快速容易的生成丰富、对话式的D作品。通过Virtools的行为技术给符合工业标准的模型、动画、图像和声音等媒体带来活力。VirtoolsDev不能产生模型。VirtoolsDev不是一个建模工具然而简单媒体如摄像机灯光曲线接口元件和D帧(在大多数D应用中被叫做哑元和补间)能简单的通过点击图标创建。(三)交互引擎Virtools是一个交互引擎即Virtools对行为进行处理。行为是某个元件如何在环境中行动的描述。Virtools提供了许多可再用的行为模块图解式的介面几乎可以产生任何类型交互内容而不用写一行程序代码。对于习惯编程者提供VSL语言它通过存取SDK作为对图形编辑器的补充。Virtools也有许多管理器它帮助交互引擎完成它的任务。某些管理器(例如SoundManager)对于动作引擎是外部的一些管理器(例如TimeManager)对于动作引擎是内部的。(四)渲染引擎Virtools有一渲染引擎在VirtoolsDev的三维观察窗口中可以所见即所得的查看图像。Virtools的渲染引擎通过SDK可以由你自己或者订制的渲染引擎来取代。注意存取Virtools渲染引擎的源码受制於一个附加的授权协议书。(五)Web播放器在成为一种伟大的技术之前,好的技术一定要能被容易地理解和接近。Virtools提供一个能自由下载的Web播放器而且下载量少於MB!Web播放器包含回放交互引擎和完全渲染引擎。更一步的关於VirtoolsWeb播放器的资讯可在在线参考中得到。(六)SDKVirtoolsDev包括一个SDK提供对行为和渲染的处理。藉由SDK,你可以:       产生新的交互行为(动态链接库DLL方式)       修改已存在交互行为的操作       写新的文件导入或导出插件支持你选择的建模文件格式       替换,修改或扩充VirtoolsDev渲染引擎(需要服从授权协议)VSL在Dev内具有和SDK的接口因此可以在不用运行自定义动态连接库(DLLs)下能容易快速地测试新的概念执行自定义编码。这些只不过是一些例子没有做不到只有想不到! 二、元素、类和面向对象设计(一)概述VirtoolsDev组织元素进入类。元素包括你进入VirtoolsDev后带来的媒体(模型声音,纹理等)也包括你在VirtoolsDev中产生的物体(例如曲线、场景、现场等)和数据(例如参数、属性和脚本)。这章的主题是,专注於Virtools对交互对象的科学分类包括:       VirtoolsDev如何分类媒体。(举例来说在Virtools中有灯光类它包含所有灯光的属性每个灯光是灯光的一个例证而且有它自己的特性例如它的颜色和它的范围)。       某些操作为什麽只可能出现在某个元素上(类)。(举例来说为什么字符才能使用字符动画)。       某些操作为什麽可以出现在所有元素上。(举例来说所有的元素都能被激活或解除激活)。这章介绍的Virtools交互对象类的层次对大多数使用者足够了。然而你能在Virtools的SDK中找到类层级结构完整的描述。(二)面向对象设计VirtoolsDev采用面向对象的方法建立一个作品(一个CMO文件)。即,每个元件有一个唯一的特性各种特性由类来描述。元件受控于交互行为模块(BB)中的方法以及参数操作符(paramOps)。VirtoolsDev中的类被称为CKClass。图Virtools类层次结构中的交互对象分支例如有一个VirtoolsDev中的类叫做CKCharacter只有CKCharacter能用于角色的特定行为设计。(例如角色控制器BB)Virtools Dev的面向对象的特性意味着你导入到Virtools Dev中的任何事物(以模型、声音等形式出现的元件)都是一个CKClass的实例。同样你在Virtools Dev中创建的任何事物(从一个摄象机到一个阵列)也都是一个CKClass的实例。图说明了Virtools类层次结构中的交互对象分支。(三)继承使用类层次结构的优势是可以使用继承。也就是说任何元素都有它自己独特的特性并且继承了它父类的特性。例如类CKLight继承自 CKDentityCKDentity继承自 CKRenderObjectCKRenderObject继承自 CKBeObject。所以一个灯光竟然有了CKLight类对象的特性就像:       灯光类型(点、方向等)       灯光颜色(白色、红色等)和       灯光的照射范围这些特性能够在建立灯光(在创造模式)或者在进行交互行为时(实时运行例如播放模式)进行改变。其次一个灯光是一个三维实体意味它继承了三维实体在D空间内的位置、方位等特性。就因为灯光是一个三维实体所以能够应用到三维实体上的任何行为也能应用到灯光上。第三一个灯光是一个渲染对象意味着它能够被渲染(能够在重放中被看到)。就因为灯光是一个渲染对象所有能应用到渲染对象上的任何行为也能应用到一个灯光上。最后灯光还是一个交互对象也就意味着它能被附着一个交互动作(有些Virtools类例如存储内部数据的类不能附着动作给它)。就因为灯光是一个交互对象所以任何能应用到交互对象的行为也能应用到一个灯光上。(四)特化Virtools Dev对行为提供了特化因此对于完成某些特定任务(也就是多态性)其行为进行了优化处理。例如移动一个D帧比移动一个角色更容易这是因为移动D帧的行为被优化了。优化行为减少了计算时间在可接受的渲染质量下使作品更小、对用户的输入反应更快。(五)集合Virtools Dev支持集合在具有逻辑关系的二个元素之间一个元素是另一个元素的一部分但他们分别都具有自己的特性。例如图所示的 D对象可以看到有一个Object Meshes栏。虽然在同一时刻只有一个网格能被激活但是一个D对象可以拥有好几个网格。图D对象的网格设置栏图是网格设置可以看到有一个Materials Used栏。一个网格可以有几个材质它们中的几个能够在同一时刻被激活。图网格设置的材质栏图是材质设置你会看到一个Texture标签。一个材质只能有一种纹理。图材质设置的纹理栏所以说D实体元素(不管它是一个物体还是一个角色等)之间有关联但每个元素都保持相对的独立性。在上述的例子中纹理是材质的一部分材质是网格的一部分网格是D物体的一部分。因为每个元素都保持相对的独立性所以每个元素的特性(例子中的物体网格、材质、纹理)都能够被快速简单地改变。事实上全部的元素都能被另一个兼容元素所交换。例如你可以改变一个D物体的网格、材质或者纹理或者它们的任意组合而不改变D物体存在的现实。注意:如果改变一个角色的网格那么很可能你的动画就不会象预期那样工作了。运行时集合、场景层次一个场景由元素组成通常被运行时激活。场景内的元素被组织到一个场景层次中。Virtools Dev在场景层次内提供了一个特殊的集合形态。在运行时元素之间的关系通过Set Parent和Add Child(两者都在DTransformationsBasic中)被确定。运行时集合允许你在任意D实体集之间建立关联典型的是通过建立D实体集产生单一化的应用程序。例如利用建模软件使用Set Parent 和Add Child你可以建立一部汽车的D实体层级:一个有门、车身、轮子的汽车。一旦层级关系被确定就能自动的变化汽车的子物体:门、车身、轮子。注意:Set Parent 和 Add Child只在场景层级中建立关联而不能在CKClass层级中建立。在Set Parent 或者 Add Child被激活之前如果要使元素恢复到初始状态通过按Reset IC键关系被删除。共享元素Virtools Dev由于支持集合所以允许你能共享例如像声音、动画、网格、材质和纹理等这样的元素并且贯穿在你的作品中。例如两个椅子能共享相同的网格、材质和纹理所以二把椅子看起来一样但有不同的名字。然而二把椅子也可以有相同的网格、不同的材质和纹理那样二把椅子将会有相同的形状但看起来不一样。共享元素能够极大地减少文件尺寸减轻CPU和显卡的工作量。在作品中减少元素的数量也能使开发作品更容易。(六)联合联合允许Virtools Dev在CKClass层级内在两个没有被直接指定父子关系的元素之间建立一个逻辑关系。通过联合一个对象可以和另一个明显不一样的对象建立沟通渠道。例如一个角色经常用一组D物体联合实现碰撞检查、管理和阻碍的目的。三、作品的元素(一)概述以下你能看到组成一个Virtools作品的一些元素。缩进表示了它们的依附关系。Virtools类层次结构的交互对象分支主要由元素、类和面向对象设计引入。例如一个D实体和一个D实体都是渲染对象的子对象。一个D帧不是一个渲染对象的子对象但是它却是由渲染对象派生出来的。作品中的元素依照类型和字母顺序排列BeObject具有行为能力的对象RenderObject当渲染时能够可见的对象D Entity有长度、宽度但是没有深度的对象       D Frame  具有可见部分的D实体D Entity具有长宽高的对象Character一种具有智能的D实体可以由用户或者软件控制。它可见但通常是隐藏的。       Camera定义一个视点的对象       Curve 一个D实体装置它在D空间中定义一条曲线       Grid 一种D数据装置值与D物体相配       Light一种提供照明的对象是不可见的(抽象、数据装置、联合)       Array表达为一个表格的数据装置       Group一组没有类型限制的任意组合对象       Level 作品的父系对象       Material一个网格的表面特征       Mesh 定义一个对象形状的顶点集       Place关于对象位置的集合       Scene关于对象时间的集合       Sound一种以数字格式存储的声音       Texture 用来提供对象表面更好细节的图象(二)具有行为能力的对象在Virtools Dev中行为是主要概念但是如果不把它们附加给元素则不起作用。注意从行为对象类能反映出所有 Virtools Dev类层级结构。实例化的对象是附加了行为的对象。BeObjects能够有行为但不是必需的。当一个BeObjects附加了行为时它就是这些行为的主人。所有的行为只能附加一个BeObject。 注意一个行为的所有者不总是行为的目标。附加到BeObject上的行为可以改变所有者或者改变到其它的对象(目标)。(三)Level 层级可以被描述为:       一个作品中所有对象的全局容器       一个作品中所有元素的根       一个作品中所有元素的父类一个CMO中只能有一个层级。层级能够包括不只一个场景并有零或更多的场所(图层)来组织你的作品更易于管理。一个层级是一个BeObject因此行为和属性能够被附加到层级上。层级脚本通常用于管理场景、位置和需要横贯几个场景的元素(比如阵列)。注意:附加给层级上的脚本能够自动附加给所有场景。(四)场景Virtools Dev里的场景就象是电影中的场景一样。       在同一时间内只有一个场景能被激活。       只有在场景中的元素才能被激活。       只有激活的元素才能被摄影机捕获。(被Virtools中的交互引擎处理)不是激活场景里的的元素不起作用。它们不能被渲染并且它们的脚本不能被处理。因此场景是把大作品进行分片处理的完美方法。当和其它人协作工作时场景很重要:每个人都可以工作在自己的场景里最后可以保存和合并成一个CMO文件里。层级场景(包括了所有层级对象)在启动时生成一个激活场景。当另一个新的场景开启时以前激活的场景自动无效。一个场景就是一个BeObject因此行为和属性可以附加到场景上。场景包括参考元素、没有副本的元素或元素本身。(五)场所和入口就象场景在层级内分片处理作品一样场所在空间上分片处理作品到场景或层级。在一个层级中可以有零到许多个场所。在场景和场所之间没有什么特殊的连接。场所是D实体层级的一部分能够包括零到许多个D实体。每个场所都可以看作是在场所内的所有D实体的父系。场所和入口用来优化渲染过程显示与否取决摄影机的开启。当入口系统(以入口管理器为例)被激活时规则如下:在进行每个渲染进程之前包含摄影机的场所列表通过场所限制盒被确定这些场所和所有带有入口的场所有可能可见被考虑进行渲染处理。如果一个元素不是这个场所的成员这个元素不被渲染。这个元素立即被确定为不可见(即使这个元素被激活并且它正执行交互行为)。如果入口系统不被激活不对场所和入口进行渲染优化(每个D实体被认为具有潜在可见性并只有一个层级)但是场所仍然会被用来分类组织D实体给其它的用途。场所在多人合作工作时很有用每个人都能工作在自己的场所下然后保存和合并到一个CMO文件中。场所也是一个BeObject。因此行为和属性也能加到场所上。(六) 抽象元素抽象元素在Virtools Dev中是一种数据结构用来存储信息和描述两个元素之间的关系。组组是组织Virtools Dev D实体最简单最有效的方法。组有规律的排列行为对象执行也许是必须的或者不受限制的包括相同的CKClass元素或者类型的任何逻辑交联。组能够在创作模式或在运行时通过BBs建立。组能够被重新安排、覆盖等。许多标准的BBs提供对组的管理。一个组是一个BeObject。因此行为和属性也能附加到组上。组能够是其它组的一部分。阵列阵列是由行、列构成单元的简单表格。阵列是纵向排列(所有纵向元素必须有相同的类型)。阵列提供种数据类型。整数浮点数字符串CKObject参数阵列组能够在创作模式或在运行时通过BBs建立。阵列能够被分类、过滤、搜索、重复等。许多标准的BBs都提供阵列管理。阵列是它自己的行为对象所以可以有行为附加给它。四、Virtools进程循环(一)概述Virtools进程循环在你(或用户)运行一个作品时是一个重复性的过程常常涉及到帧或者渲染帧。理解进程循环可以帮你在合适的帧频下建立高效的脚本和运行流畅的作品一个满意的帧频通常定义为能提供高效实时的播放画面。实时播放最少需要每秒个图片全沉浸式需要每秒帧。因此对创作者来说你应当维持最少每秒帧的帧频(近似与电视的帧频)目标是每秒帧的帧频或者更大。Virtools是一个实时引擎:允许所有的行为在它的环境中连续不断地起反应包括使用者。当作品播放时Virtools重复执行进程循环总是以相同的次序执行同样步骤直到作品被停止或复位。图Virtools的进程循环一个进程循环的持续时间一般叫做一帧。帧频是每秒钟完成进程循环的次数用每秒多少帧(FPS)来度量。帧频在Virtools Dev的界面上显示位置在屏幕右下角靠近播放暂停键处。图Virtools面界的右下脚。显示FPS进程循环应当尽可能快地执行:       高的帧频要对用户的输入做出快速的响应增加用户对作品品质的感知。       渲染图片可以提高动画质量和视觉效应。注意如果渲染图象快于显示刷新速率将不能提高显示质量在有些情况下还会降低显示质量。加大帧频必须在每一帧里减少可执行行为的数量。在满足最低浸入感的条件下不要试图在一个给定帧里做得更多。当制作脚本时你应当试着:       划分任务成子任务并在每帧里只运行最小数量的子任务。       建立你的脚本使帧频保持相对的不变。       大的脚本在给定帧必须全部被处理在这种场合要避免响应用户的输入。帧频很可能显著降低并且用户将很难再次提供相同的输入。一些BBs例如角色曲线跟随BB被设计成递增工作方式。胜于在一个单帧内曲线从开始点到终止点的方式。角色曲线跟随BB让角色在帧内沿着曲线只移动一小部分分布工作在多个帧内提高沉浸质量。图是进程循环的两个部分: 处理行为和 渲染场景。(二)行为处理行为处理在作品中建立交互。行为几乎能够施加给Virtools中的每一个元素。在行为处理过程中按照一个优先级计划一个接着一个地所有被激活的行为都能被执行。每个行为当被执行时通过行为链能够激活其它的行为。行为链有一个能在帧(进程循环)中被量度的连接延迟。连接延迟能够: 在当前帧传播激活 在下一帧传播激活n在当前帧后的第n帧传播激活在叙述这些之前不同的管理器在它的运行中帮助行为引擎。管理器运行他们的任务不是在动作处理的开始就是在行为处理的结束恰好在渲染之前。通常不需要知道这些管理器怎样或者什么时候工作但有一个例外:消息管理器。消息在行为处理结束时发送、并在下一帧开始时被接收。因此交互驱动消息始终存在于消息被发送和接收帧之间的帧延迟中。Virtools管理器的完全描述在Virtools SDK中可以找到。(三)渲染渲染用来显示作品并由离散的渲染引擎运行。引擎可以由用户选择取决于显卡和操作系统的性能然而你能强制使用某种渲染引擎或丢弃某些功能。在Virtools Dev中选项(Options)菜单的通用选择(GeneralPreferences)里面能够选择创作模式和播放模式的渲染引擎。渲染在进程循环中最耗时极度依赖硬件的性能。五、行为引擎(CK)(一)概述行为引擎执行行为处理是Virtools的中心构件。也叫做CK(此后你会在界面上经常CK如CKID, CKClass等等)行为引擎使Virtools如此的灵活。CK做什么的?CK执行你的作品处理场景和管理所有在用户和作品元素之间的交互。CK也处理作品的元素使它们附加上一个行为即行为对象。给定帧内一旦所有的行为被处理CK提供适当的信息给渲染引擎(CKD)所以交互作用的结果能被显示给用户。当一个作品被播放时连续执行下面的任务。注意:为了适当地解释下述一系列任务(算法)你必须注意陈述中的数字标号。优先序列任务中必须执行的子任务在一个同样的主数字标号下。例如任务陈述了“每个被附加到开始的BB还没有被激活激活的BB具有最高的优先权。”这意味着所有的子任务(和他们的子任务)必须先运行来完成任务。任务的"For each"意思是那个任务(或者所有子任务)被重复的执行直到必需的条件所有附加到开始的BBs已经被激活出现。对于层级中的每个活性元素以优先权顺序分类来建立元素的处理顺序。对于附加了脚本的元素以优先权顺序分类来建立元素的脚本处理顺序。对于每个元素从最高优先权到最低优先权保持处理最高优先权的元素。对于每个附加上当前运行元素的脚本保持处理最高优先权的脚本。对于每个没有被激活但附加上开始的 BB优先权最高的BB被激活。处理BB计算pOuts激活所有的bOuts和发送消息。 对于每个bOut激活一个行为链接。如果行为链接延迟为激活并运行下一个BB。以这种方式直到所有在脚本中的BBs被处理或者行为动作链接延迟比大。如果行为链接延迟大于在帧内增加BB到堆栈用于处理。例如如果链接延迟是BB在下一帧被处理。如果链接延迟是n脚本激活BB在当前帧后的第n帧执行。注意:层级总是激活状态最高优先权的元素存在于每一帧中。在余下任务中忽视所有未激活的元素。当前帧连续处理直到所有的BB被运行或者链接延迟大于。当所有的行为处理完成CK提供信息给渲染引擎在屏幕上渲染图象图象被渲染所有大于的链接延迟减行为处理再次开始。通过激活脚本流程图中的轨迹模式你能够观察到行为处理起作用。当作品被播放时激活顺序和BB运行在脚本流程图中以红色高亮显示。要点:BB内部循环(例如等待消息BB或者停止启动BB)BB的执行顺序不遵循上述的算法大纲。代之的是执行顺序受分派给BB的优先权控制。如果作者没有指定优先权执行顺序是不确定的。所以例如如果有两个可能激活的流程并在BB上没有优先权预知那个流程先激活是不可能的。当下一个流程被处理激活的流程继续运行直到完成。因此为了保证在一个脚本内连续执行指定BB内部循环的优先权关系非常重要。(二)行为循环当一系列BB通过blinks链接(某种意义以重复方式激活或者触发了BBs)形成了一个行为循环。换句话说行为循环是重复操作的直观表示。重复操作也可以被认为是反复和重复处理一个操作。在重复操作执行中重要的是要保证限制重复的次数。换句话说需要一个机制来保证一个操作不被不确定地重复。Virtools Dev在脚本流程图中通过“最大行为重复”定义在一个单独帧内完成的最大操作数量。注意:最大的行为重复缺省值是。这个最大的行为重复缺省值被存储在作品中。只要循环不经常激活或者在一帧内的重复次数不超过行为重复的最大数值那么行为循环的累计延迟有可能是。如果在一个帧内的重复次数超过了最大的行为重复数比如发生了无限循环那么行为引擎马上停止工作。例如阵列和组通常循环延迟为所以在阵列和组内的所有元素工作在一个单帧内。然而要切记要划分进程处理每帧所需的最小值(维持合适的帧速率)。因此除非必需一个行为循环在至少一个帧中应当有一个积累延迟。实际的行为循环延迟值在到范围内都是可能的。注意:循环BB(例如Timer)是基于时间的需要每帧内有一个积累循环延迟或者BB自动改变为基于帧的处理。(三)优先级一旦CK已经分类哪些元素激活CK怎样知道哪个元素最先处理。答案是元素的优先权:最高优先权最先处理。你能给行为对象、脚本和BB设置优先级。行为对象和脚本的优先级在层级管理器中建立BB的优先级在脚本流程图中建立。如果一个或者更多的元素有相同的优先级那么处理的顺序是随机的。图优先级看图注意Counters和Priority都连接到开始并且帧延迟为。因此行为引擎决定哪个BB首先被激活取决于每个BB的优先级。BB名字进程优先级AllButOneCounter(顶部)Counter(底部)第一帧的处理顺序如下:AllButOne优先级为:随着开始顶部的bIn(In)被激活然后下面的二个bOuts(Out和Out)被激活。顶部的Counter(优先级为):计数次以后触发AllButOne(沿着帧链路延迟路径)。AllButOne(优先级为):中间的bIn(In)随着开始被激活然后外面的二个bOuts(Out和Out)被激活。低部的Counter(优先级为):计数次以后触发AllButOne(沿着帧链路延迟路径)。AllButOne(优先级为):最低处的的bIn(In)随着开始被激活然后最上面的二个bOuts(Out和Out)被激活。在第一帧结束时AllButOne已经被启动了三次也许不是预期的结果。注意:通常规则是当多样性的BBs激活同样的BB时接受BB比能激活的BBs有较低的优先级确保优先的BBs能被首先处理。也可以参考关于内部循环BBs和进程循环。六、行为和脚本(一)概述行为由脚本来表达脚本是一个行为的直观表示行为施加给一个元素表现在脚本流程图里。一个脚本由二部分组成标题和主体。脚本的标题显示脚本的名字和脚本的所有者。脚本的主体由开始和一个或者更多的BBs, BGs, paramOps参数bLinks, pLinks注解等组成。图一个简单的脚本图举例说明一个包含一个BG和BB的简单脚本。注意BG和BB之间字体颜色和字体宽度的区别。(二)交互行为模块(BB)执行行为的基本构件是BB。BB是一个直观表示功能的软件元素一个对已知的任务迅速解决方案。BB符号解释BB有一个不同的矩形尺寸在下图你能看到一些不同类型的BB。图不同类型的BB行为输入 bIn一个典型的BB至少要有一个行为动作输入(bIn)尽管有几个例外(在创作模式中运行的BB如创建混合动画)。bIns经常被定位在BB的左边。当BB在bIn接收到一个触发时开始运行。图行为输入行为输出bOutBB通常至少有一个行为输出(bOut)尽管有几个例外。bOut通常定位在BB右面。输出在当前帧运行结束时被激活。激活流程遵照所有附加在其上面的行为链路。  图行为输出行为链路bLinkBBs通过行为链路(bLink)连接bLink定义了BBs运行的顺序。BB的运行顺序被叫做激活流程。每个bLink都有一个链路延迟告诉CK在什么时候处理连接在bLink端点上的BB。链路延迟可以是(意味着BB在当前帧被处理)或者是n(意味着BB在当前帧后的第n帧被处理)。图二个链路左边链路的链路延迟是另外一个是参数输入和参数输出BB一般带有参数在BB上方的是参数输入(pIn)用来接收数据在BB下方的是参数输出(pOuts)用来发送数据见图。在以后几章里会详细讨论参数。图pIn和pOut目标参数目标参数是一种特殊类型的pIn用来明确指出受BB影响的元素。当一个BB附加给一个元素时这个元素变成了这个行为的所有者。典型地附加了BB的元素把脚本的所有者作为目标。例如转换(Translate)经常修改它所有者的位置。然而你可能想让一个BB去影响不是所有者范围内的另外一个元素在这样的情况下你必须明确地把BB做为另一个不同元素的目标。作为选择你可以附上一个行为给一个不同于受行为支持的元素(例如你可以附上一个旋转动作给一个材质)。目标参数由Virtools Dev自动地建立在一个不相干类的情况下。在交互行为模块窗口如果有“T”表示该BB是一个可命中目标的BB。图交互行为模块窗口可命中目标列如果一个目标参数没有可命中目标行为可以通过下拉菜单中选择“附加目标参数”附加目标参数。一个新的pIn在最左边被创建使用一对小方框来标示(区别其他的小三角型标示)。图有和没有目标参数BB的比较七、参数(一)概述参数由名字(pName)、类型(pType)和数值(pValue)组成。参数在传统程序设计中是Virtools Dev的等价变量。参数通过参数链接(pLinks)来传递数据:       行为之间从参数输出(pOuts)到参数输入(pIns)。       在参数操作(paramOps)之间。       在paramOps 和 pIns之间。       在paramOps和本地参数之间。参数也用来给元素的属性分配数值。(二)参数类型参数类型定义数据的种类通过参数类型一个参数能够被完全掌控。参数能被广泛地成组: 参考或者指针参数确定一个对象例如CKClass层级(例如一个D实体一个动画一个脚本等。)数值参数包含一个数值。(例如一种颜色、一个键、一个整数等。)枚举参数的数值不拘泥于预先给定的范围。(例如通过Mini Calculator操作者被强加为,  , *)特例参数与预设种类不匹配只有这种参数类型:反射对象、障碍和地板。对于参数类型更详细的描述请看SDK文件。(三)参数输入pIn参数输入是行为和paramOps的主题它的值控制它们如何工作。如图输入参数通过BB、BG或者paramOp顶部的小三角来表示。参数输入特别是本地参数有一个源点作为它的pValue。pIns在激活之间不存储它的数值。图BB和paramOp的pIn(三)参数输出pOut当行为和参数操作完成他们的处理时一般它们都产生参数输出。参数输出通过BB, BG, 或一个 paramOp底部的小三角来表示。参数输出能够有一个或者更多个目的地(借助pLinks)目的地在参数值改变时立即被更新(pValue被压入目的地)。pOut在激活之间不存储它的数值。BB和paramOp的pOut(四)参数链路pLink参数链路是传播一个pvalue从pOut或者本地参数到pIn的路径。不像行为链路参数链路没有链路延迟。参数链路在脚本流程图中通过虚线表示。(五)本地参数本地参数由一个小矩形来表示通常位于pIn上面。本地参数是一个数据缓存器它存储数值直到数值被要求穿越参数链路。通过pLink链接到pIns的本地参数一般有但不是都有。通过参数链路附加到BB上的本地参数注意:两个唯一的本地参数允许有相同的名字。然而不推荐这样做容易引起混淆。例如当你拷贝和粘贴一个本地参数时你拷贝的参数名字、参数类型和参数数值给一个新的本地参数:这两个参数是不同的即使他们有相同的名字(由于拷贝和粘贴操作)。对你创建的每个参数鼓励使用唯一的名字。ThisThis是一个特殊的本地参数涉及到脚本自身。当你在脚本中创建了一个This参数时它自动设置它的数值给一致的脚本自身。(六)参数捷径参数捷径用在:       通过减少pLinks的数量来简化脚本。       通过脚本边界共享参数参数捷径一个箭头图标表示如图所见。参数捷径通过拷贝一个pOut建立(通过下拉菜单)然后运行一个Paste as Shortcut(通过下拉菜单)。拷贝并粘贴捷径创建的第二个捷径和初始捷径具有相同的起源。因此在全部时间里(CKID)所有被拷贝的捷径指向相同的源并有相同的名字、类型、数值和标识符。图参数捷径源和目地符号八、参数操作(paramOps) (一)概述参数操作(paramOps)在单独或一对参数之间执行简单的操作。paramOps在脚本流程图中显示为带有名字的方块带有两个参数输入和一个参数输出(如图)图三个不同的paramOps数据检索在行为引擎中检索信息(如鼠标位置)。数学操作例如乘法和正弦等。类型转化转换一个参数的数据类型为另一个希望的数据类型。例如一个浮动数能被转换成一个字符串用于在DLayout中展示。当在脚本流程图中建立脚本时paramOps就像BB一样有用。某些操作特别是某些要求通过执行paramOp能够被实现。注意:类型转换能是参数操作链接的形式。缺省的paramOp图标不被显示参数操作链接相对于标准pLink变成一个不同的颜色,并且字符变成沿着连线显示。(二)参数记法(Parameter Notation)Virtools Dev在书面形式中使用下面的记法来描述paramOps。对于二元操作(两个输入的操作)语法是:结果或者输出操作类型输入输入。对于一元操作(一个输入的操作)语法是:结果或者输出  操作类型  输入 。在普遍情况下语法是被严格定义为:<ptype> paramOp <ptype> <ptype>。例如:<Vector> Multiply <Float> <Vector>表现为一个乘法操作使用<Float>和<Vector>输入产生出一个参数类型为<Vector>的输出结果。数值也能被输入和输出关联。       <Float=> Multiply <Float=> <Int=>参数操作能够用于:       执行二元操作C=A*B V = Angle(V, V)V=f*V       完成一元操作C=sin(A) C= ABS(A)取得A的绝对值       转换参数类型<Float> Set value <Integer> <D Entity> Set value <D Object>       检索对象信息<Float> Get Radius <D Object> <Float> Magnitude <Vector> <Vector> Get Position <D Entity> <D Entity> <CharacterBodyPart> Get BodyPart <Character> <String>(三)参数操作和行为参数操作(paramOps)和交互行为模块(BB)的处理以不同的方式发生。paramOps如果和BB如果是相同的样式将不起作用。paramOps没有一个bLink结构来支持激活。代之paramOps只在需要时计算也就是当一个BB或者另一个paramOps需要这个paramOps的结果时。如果需要paramOps的输出数值:paramOps被触发。pOut的值被计算或者更新。pOut的值送给请求的pIn或者其他需要的目的地。如下所述paramOps不同于BB:       paramOps没有任何设置。       paramOps能够被建立在任何脚本里附加给任何类型的对象不像在BB里只能在CKClass范围内将几种行为附加给对象。然而参数操作(paramOps)通过使用Op 或 Identity能直接与激动的流程同步。(四)Advanced paramOps  高级参数操作参数输入顺序输入顺序遵循通常的数学约定即:<Float=>Multiply<Float=><Int=>等价于<Float=>Multiply<Int=><Float=>但是<Float=>Divide<Float=><Float=>不等价于<Float=>Divide<Float=><Float=>在特殊时刻计算数值脚本中如果希望在特殊时刻计算一个paramOp你能用:       Identity请求pOut因此对当前pIns触发了paramOps执行操作。       当由另外一个BB(在BB的设置上选择了操作类型以后)被激活Op执行被请求的paramOps。因为Identity的输入是可变的的Identity同时可以计算多个值。pTypes <Angle>, <Float>,和 <Percentage> paramOps常常包括<Percentage>或<Angle>pType。这些pType在VirtoolsDev里一种独特表示法其实是浮点数:       <Angle>描述了转动的度数       <Percentage>描述了在到之间的一个值因此如果一个角度类型的pIn有一个:(度)的值那么这个值其实等于(PI)。当执行计算时VirtoolsDev使用弧度而不使用度。注释:*PI弧度等于度。同样的<Percentage>用于计算的值是。因此如果你有一个<Float>的输入或输出为方便你可以改变它们的类型为<Percentage>或<Angle>。举例如果你建立一个paramOps       <Float>Multiply<Percentage><Float>withthevalues<Float>Multiply<Percentage=><Float=>结果是而不是。对于这样的运算必须指定输出类型为<Percentage>便于理解。九、属性(一)概述属性是一种增加元素信息的方法。由于它们存储信息属性很象本地参数不同的是属性属于元素而不属于脚本。Virtools Dev包括很多预定的属性。你也可以自定义你自己的属性。只有行为对象才有属性。一个层级是一个行为对象所以能有属性。层级属性是有效的全局属性。(二)属性结构一个属性可以有名字也有范畴。一个属性通常包括可编辑的一个或多个参数。然而某些属性(只有ZBuffer)不能够被编辑。例如一个带地板属性的元素被确定给一个行为引擎这个元素被当做地板处理过所以角色能够在元素上行走而不穿过元素。在创作模式下属性在层级管理器中通过一个下拉菜单被附加到元素上也可以通过元素设置或者属性管理器附加。(三)属性管理器属性管理器允许你检查和管理哪些元素具有什么属性。(图)图属性管理器在运行时属性能够:       通过设置属性增加       通过移除属性移除       借助已有属性检索(如果属性存在于元素中。)所有的BB属性都存在于LogicsAttribute中。(四)属性捷径属性经常被用来存储与一个元素关联的数值。属性典型用在一个玩家的得分、生命值等等对象特征上。如果脚本需要属性的值原有的属性能被用来找回属性的值。作为选择属性的捷径也能被使用。属性捷径在元素属性设置(下拉菜单)通过拷贝一个属性来建立然后执行一个粘贴(下拉菜单)粘贴到脚本流程图中希望到达的位置。十、VSL介绍(一)概述VSL( Virtools脚本语言)是一种强劲的脚本语言通过对VirtoolsSDK脚本级的存取补足 VirtoolsDev的脚本流程图。VSL编辑器提供智能的语境敏感高亮(彩色)显示语境敏感自动显示焦点函数。VSL包括提供断点的全调试模式、具有值编辑功能的变量观察器、步进调试(步进步出)。对于编程者和脚本设计者VSL有许多先进功能被用于编程者和脚本设计者:       对于编程者VSL是一个和SDK的接口。由于不需要建立C项目所以可以容易快速的测试新的想法在不需要执行订制动态链接库的情况下执行自定义编码。       对于脚本设计者VSL可以完美的替换重复参数操作(例如数学运算、串操作)和创建高级的行为脚本。VSL也是一个使工作流自动化的非常有效的方法(例如媒体定案、所以很少几行就可以执行批操作等等)实现视觉效果的创新等等。必备条件要点是在你使用VSL之前你已经有编程和教本设计的经验(如JavaScript)。另外你必须适当的熟悉VirtoolsSDK。(二)脚本流程图、VSL、SDK选谁?要想做VirtoolsDev里不存在的BB或者BG什么是最好的方法?使用脚本流程图?或者是VSL或者通过SDK写一个自定义行为?这取决于你的能力和你要实现的目的。脚本流程图通常如果你想容易的通过脚本只和存在的BBs或者BGs打交道你选择脚本流程图编辑器。VSL如果你发现你建立的复杂脚本有许多循环或者通过参数运算树构建森林可以考虑使用VSL脚本代替。你可能想使用VSL建立原型、测试概念、检验是否可行你可能通过SDK来实现。或者你通过VSL自定义功能这种情况你不用担心分发自定义动态链接库。注释:尽管VSL可以创建新的数据类型(结构)但他们只能在VSL范围内通过VSL脚本使用。SDK有某些事情只能通过SDK来做(VSL功能和办法都用完了)或者为了工作的更好使用订制插件(即除了定义新的BBs以外也可以定义新的数据类型使用管理器运行任何事)。看“局限性”章中的“理解VSL”页。选择最适合你的开发方法不过记住难易程度随着脚本流程图、VSL、SDK增加。十一、渲染引擎(一)概述渲染引擎是Virtools应用程序的一部分它渲染你在屏幕上看见的图象。Virtools的渲染引擎实际上由两个构件组成任一个都能通过SDK订制和替换当然你要被授权。渲染引擎CKDVirtools的Rasterizers提供对DirectX、DirectX、DirectX、DirectX和OpenGL的支持。(二)渲染引擎CKDVirtools的渲染引擎是一个D抽象引擎它的API不依赖特定的硬件和软件。抽象使它不依赖VirtoolsDev(除Rasterizers以外。)特别是行为引擎提供了D执行的细节。渲染引擎决定什么需要被渲染但实际上它自己并不画图象通过行为引擎立足于信息提供渲染引擎展开所有条目的列表可以被观察到。可见的条目列表然后提供给Rasterizers在屏幕上画出。(三)Virtools的RasterizersRasterizers定义了应用程序接口抽象了渲染硬件和相应的APIs。使用Rasterizers取决于你的图形卡的能力。Rasterizers分配多边形、纹理和渲染设置给D元素Rasterizers在屏幕上画D图象。因此Rasterizers相当于执行渲染临界维持状态。Rasterizers支持不同的DAPI:DirectX、DirectX、DirectX、DirectX和OpenGL。INCLUDEPICTURE"http:internazionalbloghexuncomimgdagif"*MERGEFORMATINET十二、初始状态(IC)(一)概述Virtools允许保存、移动、恢复一个CMO文件中几个或者所有元素的初始状态。初始状态是一个元素的快照什么被保存取决于元素的类型。除了BeObjects外你能设置脚本的初始状态。如果元素有初始状态在层级管理器、BeObjects设置和脚本头中可以被看到(在IC行有x)。设置(保存)IC在开发环境界面可以通过右键弹出的选择菜单设置一个元素的初始状态。编辑器的号码也有设置IC按钮。你可以同时对多个元素设置初始状态。在运行时你能用来保存初始状态BB。移除初始状态在开发环境界面可以通过右键弹出的选择菜单移除一个元素的初始状态。编辑器的号码也有移除IC按钮。你可以同时对多个元素移除初始状态。在运行时你能用来移除初始状态BB。恢复初始状态在开发环境界面可以通过右键弹出的选择菜单移除一个元素的初始状态。编辑器的号码也有移除IC按钮。使用全局恢复初始状态按钮可以恢复一个CMO文件中所有元素的初始状态。没有特别的恢复BB初始状态然而在theNarrativescategory中的几个BBs有一个输入管脚允许恢复元素的初始状态。举例激活的BB可以复位吗?当激活时如果选择恢复对象的初始状态输入管脚可以。(二)初始状态信息存储下面列出了保存在一个特别的CKClass里的参数详情。“List”意思是条目列表不是每个条目都有数据例如用于D对象的“MeshList”在列表中有一个初始状态保存轨迹的名字只用于网孔它不存储网孔更进一步的信息。然而当你看“ICforall”意思是IC用于所有的条目例如在所有角色下的“ICforallbodypart”意思是所有子物体的IC状态通过角色存储(在这种情况下如果你设置角色的初始状态那么设置任何子物体的初始状态就没意义了。)脚本:所有本地参数值。行为对象:属性(设置初始状态后如果元素有了新的属性当你恢复初始状态属性步能被移除。)D实体(包括D帧和入口):网孔列表、当前网孔、动画列表、自身位置、Z序、世界距阵(位置方向比例)、父系实体可用的外皮数据。D对象:无(除了保存D实体的参数外没有另外的数据)。人体部分:IK信息人体部分属于角色。光目标光:所有数据(看光设置。)摄像机目标摄像机:所有数据(看摄像机设置。)角色:所有人体部分的数据、激活动画、地板反射和根源。D精灵:类型、尺寸、偏移、映射、当前材质。栅格:尺寸、每层的内容。曲线:曲线端点列表、合适系数、曲线级、开关曲线。D实体(包括D帧):位置、屏幕尺寸、Z序。层级:烟雾、背景纹理色彩、启动摄像机。场景:烟雾、背景纹理色彩、启动摄像机。组:对象列表。阵:阵数据、关键列信息。声音:所有数据(看声设置。)网孔:纹理约束、光模型、网孔布局、通道、材质使用。修补网孔:所有修补和控制的顶点数据、方格要素。材质:所有数据(看材质设置。)纹理:所有位图踪迹、色彩值、当前踪迹、保存选项、希望的视频格式。也参考“InitialConditionsinLevelManager”�HYPERLINK"http:

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/37

VirTools教程

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利