




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十一章交互与动画效果的实现 到目前为止 我们主要还停留在静态的虚拟场景的构建上 在现实世界中 万物都是在变化着的 如太阳的升落 树叶由绿变黄等等 这些都是动态的 可以称之为动画 同样 作为主体与虚拟世界进行交互的人类化身 其在虚拟世界中的活动也必将带来信息的交互和场景等的变化 因此 必要得动画措施和交互手段也是虚拟世界的重要组成部分 本章将重点介绍VRML中这些效果的实现 11 1动画效果 VRML中提供了多个用来控制动画的插补器 以及控制时间的时间传感器 11 1 1TimeSensor节点 时间传感器在现实世界中 世界万物的变化往往是自动的 而且是有一定规律的 即不是随人的改变而改变的 这就需要在VRML虚拟世界中 创建出能自动变化不需要认为改变的造型 可以通过设定时间规律变化来控制造型变化 而控制时间按规律变化最常见的就是时间传感器 时间传感器TimeSensor节点的作用就是创建一个虚拟时钟 并对其他节点发送时间值 11 1动画效果 其节点语法定义如下 TimeSensor EventOutSFBoolisActiveEventOutSFTimetimeEvetnOutSFTimecycleTimeEventOutSFFloatfraction changedExposedFieldSFTimecycleInterval1 0ExposedFieldSFBoolenabledTRUEExposedFieldSFTimestartTime0ExposedFieldSFTimestopTime0ExposedFieldSFBoolloopFALSE 11 1动画效果 cycleInterval域的值指定了一个时间长度 用来说明这个时间传感器从0 0时刻到1 0时刻之间的周期间隔 单位为秒 该域值必须大于0 0 其缺省值为1 0秒 Enabled域的值指定了时间传感器的打开和关闭 如果该域值为TRUE 时间传感器被打开 域值为FALSE时 时间传感器被关闭 其缺省值为TRUE Loop域的值指定了时间传感器是否循环输出 如果该域值为TRUE 则时间传感器将从0 0到1 0这段时间间隔内输出浮点时刻 而在时间间隔的结尾 返回到0 0 开始新的循环 如果该域值为FALSE 时间传感器不循环 只从0 0到1 0输出一次 11 1动画效果 StartTime域的值指定了时间传感器开始输出事件的绝对时间 该域值的缺省值为0 0秒 StopTime域的值指定了时间传感器停止输出事件的绝对时间 该域值的缺省值为0 0秒 同AudioClip节点中的域一样 startTime stopTime cycleInterval和loop域值共同控制着时间传感器的事件输出 当这4个域同时使用时 根据这4个域值之间的关系 决定时间传感器的工作状态 事件出口isActive在时间传感器开始运行的同时向外输出TRUE值 在时间传感器停止运行时向外输出FALSE值 11 1动画效果 事件出口time在时间传感器运行时 不断输出一个绝对时间值 事件出口cycleTime在时间传感器每次循环的开始时输出一个当前的时间绝对值 事件出口fraction changed在时间传感器运行时 输出0 0和1 0之间的浮点时刻 TimeSensor节点在VRML中并不产生任何造型和可视效果 该节点可以包含在任何组节点中作为子节点 但独立于所选用的坐标系 11 1 2控制动画的插补器 插补器 Interpolator 节点是为线性关键帧动画而设计的 其采用一组关键数值 且每个关键值对应一种状态 这个状态允许以各种形式表示 如SFVec3f或SFVecColor 浏览器会根据这些关键状态生成连续的动画 一般来说 浏览器在两个相邻关键帧之间生成的连续帧是线性的 插补器节点根据其所插值的类型不同而分为6种 颜色插补器 ColorInterpolator 坐标插补器 CoordinateInterpolator 法线插补器 NorMalInterpolator 朝向插补器 OrientationInterpolator 位置插补器 PositionInterpolator 标量插补器 ScalarInterpolator 11 1 2控制动画的插补器 11 1 2 1ColorInterpolator节点ColorInterpolator节点是用来表示颜色间插值的节点 该节点并不创建造型 在VRML场景中是看不见的 该节点可以作为任何编组节点的子节点 但又独立于所使用的坐标系 即不受坐标系的限制 其节点语法定义如下 ColorInterpolator ExposedFieldMFFloatkey ExposedFieldMFColorkeyValue EventInSFFloatset fractionEventOutSFColorvalue changed 11 1 2控制动画的插补器 key域的值表示一系列的关键的 浮点时刻值 与接收到的set fraction对应 时刻值一般在0 0至1 0区间内取值 关键时刻值可以是任何形式的正或负浮点值 但其值必须以非递减的方式表示 其默认值为空格 KeyValue域的域值表示一系列的关键RGB色彩值 当接收到set fractioneventIn时 用它来插值value change输出 每个RGB色彩都是由在0 0至1 0区间内的三个浮点数所表示的 它们分别表示混合色中红 绿 蓝的数值 其默认值为一个空的列表 事件入口set fraction收到一个时刻值时 ColorInterpolator节点就在关键色彩值和它们相应的关键时间值的基础上计算出一个RGB色彩值 并通过value changed事件出口输出该RGB色彩值 事件出口value changed用来输出计算后的RGB色彩值 11 1 2控制动画的插补器 11 1 2 2CoordinateInterpolator节点CoordinateInterpolator节点是表示坐标插值的节点 该节点在一组MFVec3f值之间进行线性插值 通过使用该节点 一个造型的组成坐标可以变化 同ColorInterpolator节点一样 CoordinateInterpolator节点也不创建任何造型 在VRML场景中也是不可见的 其节点语法定义如下 CoordinateInterpolator ExposedFieldMFFloatkey ExposedFieldMFVec3fkeyValue EventInSFFloatset fractionEventOutMFVec3fvalue changed 11 1 2控制动画的插补器 key域提供了一张关键时间 时刻和浮点时间的列表 与接收到的set fraction对应 时刻值在0 0和1 0之间取值 然而关键时刻值可以是任意大小的正值或负值 不过必须以递增的顺序排列 其默认值是一张空列表 KeyValue域提供了一张关键三维坐标的列表 每一个坐标都包含三个浮点数值 分别为此向量的X Y和Z分量 KeyValue域可提供两个或更多的关键坐标点 如果有N个时刻值和每个时刻值对应了的M个关键坐标点 那么该域就包含了NM个坐标点 其默认值为一张空列表 11 1 2控制动画的插补器 当事件入口set fraction接收到一个时刻值时 CoordinateInterpolator节点就根据关键时刻列表和它们相对应的关键坐标子列表计算出一张坐标的子列表 并通过value changed事件出口输出新的坐标列表 坐标插补器实现的是坐标点的移动动画 通过CoordinateInterpolator节点 可使VRML中的物体造型上的各个坐标点有独自的运动轨迹 即可使物体造型改变 11 1 2控制动画的插补器 11 1 2 3NormalInterpolator节点NormalInterpolator节点是表示法向量的节点但不创建任何造型 该节点在Normal节点中的法向量矢量中进行插值 以产生动画效果 其语法定义如下 NormalInterpolator ExposedFieldMFFloatkey ExposedFieldMFVec3fkeyValue EventInSFFloatset fractionEventOutMFVec3fvalue changed 11 1 2控制动画的插补器 key域的值指定了一个关键浮点时刻列表 与接收到的set fraction对应 该浮点值一般在0 0和1 0之间取值 其也可以是任意大小的正 负浮点数 关键时刻必须以非递减的顺序排列 其默认值为一张空列表 KeyValue域的值指定了一个关键法向量矢量列表 每个法向量矢量都包含三个浮点数 分别为此向量的X Y和Z分量 同CoordinateInterpolator节点中keyValue域一样可提供两个或更多的法向量矢量 其默认值为一空列表 当事件入口set fraction接收到一个时刻值时 NormalInterpolator节点根据关键时刻列表和其对应的关键法向量矢量列表 计算出一个法向量矢量子列表 并通过value changed事件出口输出新算出的法向量矢量列表 11 1 2控制动画的插补器 11 1 2 4PositionInterpolator节点PositionInterpolator节点用来描述一系列用于动画的关键值 该节点不创建任何造型 在一组SFVec3f值之间进行线性插值 适合于对平移进行插值 其语法结构定义如下 PositionInterpolator ExposedFieldMFFloatkey ExposedFieldMFVec3fkeyValue EventInSFFloatset fractionEventOutSFVec3fvalue changed 11 1 2控制动画的插补器 key域的值指定了一张浮点时刻关键值列表 与接收到的set fraction对应 时刻值一般在0 0和1 0之间取值 然而关键时刻值可以是任意大小的正值或负值 不过必须以递增的顺序排列 其默认值是一张空列表 KeyValue域的值指定了一个关键位置的列表 每一个关键位置都是一组由X Y和Z浮点值组成的三维坐标或平移距离 在一些运用中 关键值也可以是X Y和Z的比例要素或其他三个浮点值的组 其默认值是一张空列表 当事件入口set fraction接收到一个时刻值时 PositionInterpolator节点计算出基于关键位置表和相关的关键时刻的一个位置 并通过value changed事件出口输出新的位置列表 11 1 2控制动画的插补器 11 1 2 5ScalarInterpolator节点ScalarInterpolator节点描述的是在动画中使用的一些列关键色彩值 该节点不创建任何造型 在一组SFFloat值之间进行线性插值 这个插值适合于用简单的浮点值定义的任何参数 使用该节点 能够动画他的透明度 其语法定义如下 ScalarInterpolator ExposedFieldMFFloatkey ExposedFieldMFFloatkeyValue EventInSFFloatset fractionEventOutSFFloatvalue changed 11 1 2控制动画的插补器 key域的值提供了一张浮点时刻关键值列表 与接收到的set fraction对应 时刻值一般在0 0和1 0之间取值 然而关键时刻值可以是任意大小的正值或负值 不过必须以递增的顺序排列 其默认值是一张空列表 KeyValue域的值指定了一系列关键浮点值 其默认值为一个空的序列 当事件入口set fraction接收到一个时刻值时 ScalarInterpolator节点根据关键值的序列和它们对应的关键时刻值 计算一个浮点值 并通过value changed事件出口输出计算后的浮点值 ScalarInterpolator节点还可以用来控制VRML造型的透明度 通过控制Material节点的transparency域值 是造型的透明度改变 11 1 2控制动画的插补器 11 1 2 6OrientationInterpolator节点OrientationInterpolator节点用来描述一系列在动画中使用的旋转值 该节点不创建任何造型 在一组SFRotation值之间进行插值 通过使用该节点 可以使造型旋转 其语法定义如下 OrientationInterpolator ExposedFieldMFFloatkey ExposedFieldMFVec3fkeyValue EventInSFFloatset fractionEventOutMFVec3fvalue changed 11 1 2控制动画的插补器 key域的值指定了一张浮点时刻关键值列表 与接收到的set fraction对应 时刻值一般在0 0和1 0之间取值 然而关键时刻值可以是任意大小的正值或负值 不过必须以递增的顺序排列 其默认值是一张空列表 KeyValue域的值指定了一个旋转关键值的列表 每一个旋转关键值是一个4个值的组 前三个值指定了一个旋转轴的X Y和Z分量 第4个值指定了旋转轴的一个旋转角度 其默认值是一张空列表 当事件入口set fraction接收到一个时刻值时 OrientationInterpolator节点根据关键时刻列表和与其对应的关键旋转值列表 计算出一个关键旋转值子列表 并通过value changed事件出口输出新算出的旋转列表 11 2交互功能 交互功能是VRML的一个重要特点 没有交互功能的VRML场景是不能吸引人的 因为能使人有身临其境的感觉的主要功能就是交互 虽然利用前面介绍的不同节点能创建出相当逼真的VRML场景 但这只是静态的 即使是动画也是固定的 即在该VRML文件一运行就已确定 浏览者无法进行任何选择 更谈不上身临其境了 通过VRML特有的交互功能 浏览者可以根据需要随时改变VRML场景 比如搬动一个椅子等 11 2 1接触检测器 在VRML中虚拟世界和用户之间的交互是通过一系列检测器来实现的 通过这些检测器节点 使浏览器感知用户的各种操作 比如开门等 这样用户就可以和VRML虚拟世界中的三维对象进行直接交互 触动检测器是用来检测用户的触动动作的 其中包括TouchSensor节点 PlaneSensor节点 CylinderSensor节点和SphereSensor节点 11 2 1 1TouchSensor节点TouchSensor节点创建了一个检测用户动作并将其转化后输出 以触发一个动画的检测器 它是用来测试用户触摸事件的检测器 该节点可以为任何成组节点的子节点 并感知用户对该组节点的动作 11 2 1接触检测器 其节点语法定义如下 TouchSensor EventOutSFBoolisOverEventOutSFVec3fhitPoint changedEventOutSFVec3fhitNormal changedEventOutSFVec3fhitTexCoord changedEventOutSFBoolisActiveEventOutSFTimetouchTimeExposedFieldSFBoolenabledTRUE 11 2 1接触检测器 isOver事件出口是用来当用户的鼠标位于被感应的三维对象上方时 将引发isOver事件 且该事件值为TRUE 反之 当用户的鼠标不在被感应的三维对象上方时 该事件值为FALSE HitPoint changed事件出口用来当用户在被感应的几何图形上点击鼠标时发送该值 其值表示对象上点的坐标 HitNormal changed事件出口用来当用户在被感应的几何图形上点击鼠标时发送该值 其值表示对象上点的表面法向量 Enabled域的值指定了是否激活该检测器 当该域值为TRUE时 该检测器允许被用户激活 并产生输出 而当该域值为FALSE时 用户无法激活该检测器 该域值的缺省值为TRUE 11 2 1接触检测器 HitTexCoord changed事件出口用于当用户位于被感应的几何图形上点击鼠标时 发送该值 其值表示对象上点的纹理坐标 纹理坐标功能是VRML中很重要的一个功能 我们可以使用这一功能实现像HTML网页一样 在一幅贴图上面划分多个区域 然后将每个区域设置各自的交互 IsActive事件出口用来当用户点击对象时 检测器被激活 该域值由FALSE变为TRUE 反之当检测器失效时 该域值将由TRUE变为FALSE TouchTime事件出口用来当isOver为TRUE 而isActive为FALSE时发送该事件 所发送的值时系统当前的时间 11 2 1接触检测器 11 2 1 2PlaneSensor节点PlaneSensor节点创建了一个可将浏览者的动作转换成适于造型的输出的检测器 该节点可以为任何成组节点的子节点 用以感知用户对该组节点的动作 使造型按用户的动作平移 其节点语法定义如下 PlaneSensor EventOutSFBoolisActiveEventOutSFVec3ftrackPoint changedEventOutSFVec3ftranslation changed 11 2 1接触检测器 ExposedFieldenabledTRUEExposedFieldSFVec3foffset000ExposedFieldSFBoolautoOffsetTRUEExposedFieldSFVec2fmaxPosition 1 1ExposedFieldSFVec2fminPosition00 trackPoint changed事件出口用来当检测器被激活并且用户单击鼠标时 发送该值 其值代表的是虚拟平面上的当前单击点 11 2 1接触检测器 Translation changed事件出口用来当检测器被激活并且用户单击鼠标时发送该值 其值代表的是虚拟平面上的平移坐标值 Offset域的值用于设置偏移量 即每一次输出位置时的偏移量 当autoOffset字段的值为TRUE时 人为设置的偏移量被忽略 AutoOffset域的值为TRUE时 VRML程序会根据用户实际拖拉鼠标的情况 计算出每一次平移的偏移量 MaxPosition域的值用来设置检测器的最大位置值 MinPosition域的值用来设置检测器的最小位置值 11 2 1接触检测器 11 2 1 3CylinderSensor节点CylinderSensor节点用来创建一个将用户动作转换成造型围绕Y轴旋转动画的检测器 该节点可作为任何组节点的子节点 其节点语法定义如下 CylinderSensor EventOutSFBoolisActiveEventOutSFVec3ftrackPoint changedEventOutSFRotationrotation changedExposedFieldSFBoolenabledTRUEExposedFieldSFFloatoffset0 11 2 1接触检测器 ExposedFieldSFBoolautoOffsetTRUEExposedFieldSFFloatmaxAngle 1ExposedFieldSFFloatminAngle0ExposedFieldSFFloatdiskAngle0 262 isActive事件出口用来当检测器被激活时 设置该值为TRUE 表示当前用户正在进行拖拉操作 否则为FALSE TrackPoint changed事件出口用于当前用户激活检测器并进行拖拉操作时 将引发该事件值 其值代表圆柱体表面的坐标 11 2 1接触检测器 Rotation changed事件出口用于当用户激活检测器并进行拖拉操作时 将引发该事件值 该值时虚拟的圆柱体的旋转值 Enable域的值为TRUE时 检测器才允许被用户激活 Offset域的值指定了物体旋转的偏移量 即每一次增加的角度值 当autoOffset字段的值为TRUE时 人为设置的偏移量将被忽略 AutoOffset域的值为TRUE时 VRML程序会根据用户实际拖拉鼠标的情况 计算出每一次旋转的偏移量 MaxAngle域的值定义检测器输出的最大角度 MinAngle域的值定义检测器输出的最小角度 DiskAngle域的值定义检测器在圆盘行为之间切换角度 11 2 1接触检测器 11 2 1 4SphereSensor节点SphereSensor节点创建了一个将用户动作转换为造型绕某一点旋转的动画的检测器 该节点可作为其他组节点的子节点 其节点语法定义如下 SphereSensor EventOuttrackPoint changedEventOutrotation changedExposedFieldSFBoolenabledTRUEExposedFieldSFRotationoffset0100ExposedFieldSFBoolautoOffsetTRUE 11 2 1接触检测器 trackPoint changed事件出口用于当检测器被激活并且用户单击鼠标时 发送该值 其值代表的是虚拟球体表面上的当前单击点 Rotation changed事件出口用户当检测器被激活并且用户单击鼠标时 发送该值 其值代表的是虚拟球体的旋转值 Offset域的值指定了检测器每一次输出的旋转量 当autoOffset字段设置为TRUE时 本字段的设置值将被忽略 AutoOffset域的值指定该旋转值是否发生偏移 11 2 2感知检测器 除了触动检测器外 能产生交互功能的节点还有感知检测器 与触动检测器不同的是 感知检测器是感知用户与造型的接近程度 感知检测器包括VisibilitySensor节点 ProximtitySensor节点和Collision节点 11 2 2 1VisibilitySensor节点VisibilitySensor节点用来从观察者的方向和位置感知一个长方体区域在当前坐标系中何时才是可视的 该节点可作为任意组节点的子节点 11 2 2感知检测器 其语法定义如下 VisibilitySensor ExposedFieldSFBoolenabledTRUEExposedFieldSFVec3fcenter0 00 00 0ExposedFieldSFVec3fsize0 00 00 0EventOutSFBoolisActiveEventOutSFTimeenterTimeEventOutSFTimeexitTime 11 2 2感知检测器 center域的值指定了当前三维坐标
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年智慧社区绿色屋顶施工项目合同模板
- 2025年度特色小吃食材电商销售合作框架协议
- 机械公务员面试题及答案
- 护理中医操作试题及答案
- 公务员变形面试题目及答案
- 肺病病症中医试题及答案
- 中外来料加工来件装配合同范文
- 部属公务员面试题及答案
- 2025年环境影响评价公众参与机制在环境咨询中的应用报告
- 装饰装修培训课件模板
- GB/T 5907.4-2015消防词汇第4部分:火灾调查
- 社情民意写作基本知识要点课件
- 医疗器械生产企业GMP培训专家讲座
- 2023年中远海运船员管理有限公司招聘笔试题库及答案解析
- 辐射及其安全防护(共38张PPT)
- 金风15兆瓦机组变流部分培训课件
- 膀胱镜检查记录
- 沈阳终止解除劳动合同证明书(三联)
- 化工装置静设备基本知识
- 电脑节能环保证书
- 美国共同基金SmartBeta布局及借鉴
评论
0/150
提交评论