第11章 VRML(虚拟现实建模语音)交互与动画效果实现_第1页
第11章 VRML(虚拟现实建模语音)交互与动画效果实现_第2页
第11章 VRML(虚拟现实建模语音)交互与动画效果实现_第3页
第11章 VRML(虚拟现实建模语音)交互与动画效果实现_第4页
第11章 VRML(虚拟现实建模语音)交互与动画效果实现_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第十一章第十一章 交互与动画效果的实现交互与动画效果的实现 到目前为止,我们主要还停留在静态的虚拟场到目前为止,我们主要还停留在静态的虚拟场景的构建上,在现实世界中,万物都是在变化着的,景的构建上,在现实世界中,万物都是在变化着的,如太阳的升落,树叶由绿变黄等等,这些都是动态如太阳的升落,树叶由绿变黄等等,这些都是动态的,可以称之为动画。同样,作为主体与虚拟世界的,可以称之为动画。同样,作为主体与虚拟世界进行交互的人类化身,其在虚拟世界中的活动也必进行交互的人类化身,其在虚拟世界中的活动也必将带来信息的交互和场景等的变化。因此,必要得将带来信息的交互和场景等的变化。因此,必要得动画措施和交互手

2、段也是虚拟世界的重要组成部分。动画措施和交互手段也是虚拟世界的重要组成部分。本章将重点介绍本章将重点介绍VRML中这些效果的实现。中这些效果的实现。 11.1 动画效果动画效果 v VRML中提供了多个用来控制动画的插补器,以及控制时间的时间传感器。 v 11.1.1 TimeSensor节点节点时间传感器时间传感器 v 在现实世界中,世界万物的变化往往是自动的,而且是有一定规律的,即不是随人的改变而改变的,这就需要在VRML虚拟世界中,创建出能自动变化不需要认为改变的造型。可以通过设定时间规律变化来控制造型变化。而控制时间按规律变化最常见的就是时间传感器。时间传感器TimeSensor节点的

3、作用就是创建一个虚拟时钟,并对其他节点发送时间值。 11.1 动画效果动画效果v 其节点语法定义如下: TimeSensorEventOutSFBoolisActiveEventOutSFTimetimeEvetnOutSFTimecycleTimeEventOutSFFloatfraction_changedExposedFieldSFTimecycleInterval1.0ExposedFieldSFBoolenabledTRUEExposedFieldSFTimestartTime0ExposedFieldSFTimestopTime0 ExposedFieldSFBoolloopFAL

4、SE 11.1 动画效果动画效果v cycleInterval域的值指定了一个时间长度,用来说明这个时间传感器从0.0时刻到1.0时刻之间的周期间隔,单位为秒。该域值必须大于0.0,其缺省值为1.0秒。v Enabled域的值指定了时间传感器的打开和关闭。如果该域值为TRUE,时间传感器被打开;域值为FALSE时,时间传感器被关闭。其缺省值为TRUE。v Loop域的值指定了时间传感器是否循环输出。如果该域值为TRUE,则时间传感器将从0.0到1.0这段时间间隔内输出浮点时刻。而在时间间隔的结尾,返回到0.0,开始新的循环。如果该域值为FALSE,时间传感器不循环,只从0.0到1.0输出一次。

5、 11.1 动画效果动画效果v StartTime域的值指定了时间传感器开始输出事件的绝对时间。该域值的缺省值为0.0秒。v StopTime域的值指定了时间传感器停止输出事件的绝对时间。该域值的缺省值为0.0秒。v 同AudioClip节点中的域一样,startTime,stopTime,cycleInterval和loop域值共同控制着时间传感器的事件输出。当这4个域同时使用时,根据这4个域值之间的关系,决定时间传感器的工作状态。v 事件出口isActive在时间传感器开始运行的同时向外输出TRUE值,在时间传感器停止运行时向外输出FALSE值。 11.1 动画效果动画效果v 事件出口ti

6、me在时间传感器运行时,不断输出一个绝对时间值。v 事件出口cycleTime在时间传感器每次循环的开始时输出一个当前的时间绝对值。v 事件出口fraction_changed在时间传感器运行时,输出0.0和1.0之间的浮点时刻。v TimeSensor节点在VRML中并不产生任何造型和可视效果。该节点可以包含在任何组节点中作为子节点,但独立于所选用的坐标系。 11.1.2 控制动画的插补器控制动画的插补器v 插补器(Interpolator)节点是为线性关键帧动画而设计的。其采用一组关键数值,且每个关键值对应一种状态。这个状态允许以各种形式表示,如SFVec3f或SFVecColor。浏览器

7、会根据这些关键状态生成连续的动画。一般来说,浏览器在两个相邻关键帧之间生成的连续帧是线性的。v 插补器节点根据其所插值的类型不同而分为6种:颜色插补器(ColorInterpolator)、坐标插补器(CoordinateInterpolator)、法线插补器(NorMalInterpolator)、朝向插补器(OrientationInterpolator)、位置插补器(PositionInterpolator)、标量插补器(ScalarInterpolator)。 11.1.2 控制动画的插补器控制动画的插补器v 11.1.2.1 ColorInterpolator节点节点v ColorI

8、nterpolator节点是用来表示颜色间插值的节点。该节点并不创建造型,在VRML场景中是看不见的,该节点可以作为任何编组节点的子节点,但又独立于所使用的坐标系,即不受坐标系的限制。v 其节点语法定义如下:ColorInterpolatorExposedFieldMFFloatkeyExposedFieldMFColorkeyValueEventInSFFloatset_fractionEventOutSFColorvalue_changed 11.1.2 控制动画的插补器控制动画的插补器v key域的值表示一系列的关键的、浮点时刻值,与接收到的set_fraction对应。时刻值一般在0.

9、0至1.0区间内取值,关键时刻值可以是任何形式的正或负浮点值,但其值必须以非递减的方式表示。其默认值为空格。v KeyValue域的域值表示一系列的关键RGB色彩值。当接收到set_fraction eventIn时,用它来插值value_change输出。每个RGB色彩都是由在0.0至1.0区间内的三个浮点数所表示的,它们分别表示混合色中红、绿、蓝的数值。其默认值为一个空的列表。v 事件入口set_fraction收到一个时刻值时,ColorInterpolator节点就在关键色彩值和它们相应的关键时间值的基础上计算出一个RGB色彩值,并通过value_changed事件出口输出该RGB色彩

10、值。v 事件出口value_changed用来输出计算后的RGB色彩值。 11.1.2 控制动画的插补器控制动画的插补器v 11.1.2.2 CoordinateInterpolator节点节点 v CoordinateInterpolator节点是表示坐标插值的节点,该节点在一组MFVec3f值之间进行线性插值,通过使用该节点,一个造型的组成坐标可以变化。同ColorInterpolator节点一样,CoordinateInterpolator节点也不创建任何造型,在VRML场景中也是不可见的。v 其节点语法定义如下:CoordinateInterpolatorExposedFieldMFF

11、loatkeyExposedFieldMFVec3fkeyValueEventInSFFloatset_fractionEventOutMFVec3fvalue_changed 11.1.2 控制动画的插补器控制动画的插补器v key域提供了一张关键时间、时刻和浮点时间的列表,与接收到的set_fraction对应。时刻值在0.0和1.0之间取值,然而关键时刻值可以是任意大小的正值或负值,不过必须以递增的顺序排列,其默认值是一张空列表。v KeyValue域提供了一张关键三维坐标的列表。每一个坐标都包含三个浮点数值,分别为此向量的X、Y和Z分量。KeyValue域可提供两个或更多的关键坐标点,

12、如果有N个时刻值和每个时刻值对应了的M个关键坐标点,那么该域就包含了NM个坐标点。其默认值为一张空列表。 11.1.2 控制动画的插补器控制动画的插补器v 当事件入口set_fraction接收到一个时刻值时,CoordinateInterpolator节点就根据关键时刻列表和它们相对应的关键坐标子列表计算出一张坐标的子列表,并通过value_changed事件出口输出新的坐标列表。v 坐标插补器实现的是坐标点的移动动画,通过CoordinateInterpolator节点,可使VRML中的物体造型上的各个坐标点有独自的运动轨迹,即可使物体造型改变。 11.1.2 控制动画的插补器控制动画的插

13、补器v 11.1.2.3 NormalInterpolator节点节点 v NormalInterpolator节点是表示法向量的节点但不创建任何造型。该节点在Normal节点中的法向量矢量中进行插值,以产生动画效果。v 其语法定义如下:NormalInterpolatorExposedFieldMFFloatkeyExposedFieldMFVec3fkeyValueEventInSFFloatset_fractionEventOutMFVec3fvalue_changed 11.1.2 控制动画的插补器控制动画的插补器v key域的值指定了一个关键浮点时刻列表。与接收到的set_fract

14、ion对应。该浮点值一般在0.0和1.0之间取值,其也可以是任意大小的正、负浮点数。关键时刻必须以非递减的顺序排列。其默认值为一张空列表。v KeyValue域的值指定了一个关键法向量矢量列表。每个法向量矢量都包含三个浮点数,分别为此向量的X、Y和Z分量。同CoordinateInterpolator节点中keyValue域一样可提供两个或更多的法向量矢量。其默认值为一空列表。v 当事件入口set_fraction接收到一个时刻值时,NormalInterpolator节点根据关键时刻列表和其对应的关键法向量矢量列表,计算出一个法向量矢量子列表,并通过value_changed事件出口输出新算

15、出的法向量矢量列表。 11.1.2 控制动画的插补器控制动画的插补器v 11.1.2.4 PositionInterpolator节点节点 v PositionInterpolator节点用来描述一系列用于动画的关键值。该节点不创建任何造型,在一组SFVec3f值之间进行线性插值。适合于对平移进行插值。v 其语法结构定义如下:PositionInterpolatorExposedFieldMFFloatkeyExposedFieldMFVec3fkeyValueEventInSFFloatset_fractionEventOutSFVec3fvalue_changed 11.1.2 控制动画的

16、插补器控制动画的插补器v key域的值指定了一张浮点时刻关键值列表,与接收到的set_fraction对应,时刻值一般在0.0和1.0之间取值,然而关键时刻值可以是任意大小的正值或负值,不过必须以递增的顺序排列,其默认值是一张空列表。v KeyValue域的值指定了一个关键位置的列表。每一个关键位置都是一组由X、Y和Z浮点值组成的三维坐标或平移距离。在一些运用中,关键值也可以是X、Y和Z的比例要素或其他三个浮点值的组。其默认值是一张空列表。v 当事件入口set_fraction接收到一个时刻值时,PositionInterpolator节点计算出基于关键位置表和相关的关键时刻的一个位置,并通过

17、value_changed事件出口输出新的位置列表。 11.1.2 控制动画的插补器控制动画的插补器v 11.1.2.5 ScalarInterpolator节点节点v ScalarInterpolator节点描述的是在动画中使用的一些列关键色彩值。该节点不创建任何造型,在一组SFFloat值之间进行线性插值,这个插值适合于用简单的浮点值定义的任何参数。使用该节点,能够动画他的透明度。v 其语法定义如下:ScalarInterpolatorExposedFieldMFFloatkeyExposedFieldMFFloatkeyValueEventInSFFloatset_fractionEve

18、ntOutSFFloatvalue_changed 11.1.2 控制动画的插补器控制动画的插补器v key域的值提供了一张浮点时刻关键值列表,与接收到的set_fraction对应。时刻值一般在0.0和1.0之间取值,然而关键时刻值可以是任意大小的正值或负值,不过必须以递增的顺序排列,其默认值是一张空列表。v KeyValue域的值指定了一系列关键浮点值。其默认值为一个空的序列。v 当事件入口set_fraction接收到一个时刻值时,ScalarInterpolator节点根据关键值的序列和它们对应的关键时刻值,计算一个浮点值,并通过value_changed事件出口输出计算后的浮点值。v

19、 ScalarInterpolator节点还可以用来控制VRML造型的透明度,通过控制Material节点的transparency域值,是造型的透明度改变。 11.1.2 控制动画的插补器控制动画的插补器v 11.1.2.6 OrientationInterpolator节点节点 v OrientationInterpolator节点用来描述一系列在动画中使用的旋转值。该节点不创建任何造型,在一组SFRotation值之间进行插值,通过使用该节点,可以使造型旋转。v 其语法定义如下:OrientationInterpolatorExposedFieldMFFloatkeyExposedFie

20、ldMFVec3fkeyValueEventInSFFloatset_fractionEventOutMFVec3fvalue_changed 11.1.2 控制动画的插补器控制动画的插补器v key域的值指定了一张浮点时刻关键值列表,与接收到的set_fraction对应。时刻值一般在0.0和1.0之间取值,然而关键时刻值可以是任意大小的正值或负值,不过必须以递增的顺序排列。其默认值是一张空列表。v KeyValue域的值指定了一个旋转关键值的列表。每一个旋转关键值是一个4个值的组。前三个值指定了一个旋转轴的X、Y和Z分量,第4个值指定了旋转轴的一个旋转角度。其默认值是一张空列表。v 当事件

21、入口set_fraction接收到一个时刻值时,OrientationInterpolator节点根据关键时刻列表和与其对应的关键旋转值列表,计算出一个关键旋转值子列表,并通过value_changed事件出口输出新算出的旋转列表。 11.2 交互功能交互功能 v 交互功能是VRML的一个重要特点,没有交互功能的VRML场景是不能吸引人的,因为能使人有身临其境的感觉的主要功能就是交互。虽然利用前面介绍的不同节点能创建出相当逼真的VRML场景,但这只是静态的,即使是动画也是固定的,即在该VRML文件一运行就已确定,浏览者无法进行任何选择,更谈不上身临其境了。v 通过VRML特有的交互功能,浏览者

22、可以根据需要随时改变VRML场景,比如搬动一个椅子等。 11.2.1 接触检测器接触检测器 v 在VRML中虚拟世界和用户之间的交互是通过一系列检测器来实现的,通过这些检测器节点,使浏览器感知用户的各种操作,比如开门等,这样用户就可以和VRML虚拟世界中的三维对象进行直接交互。触动检测器是用来检测用户的触动动作的,其中包括TouchSensor节点,PlaneSensor节点,CylinderSensor节点和SphereSensor节点。 v 11.2.1.1 TouchSensor节点节点 v TouchSensor节点创建了一个检测用户动作并将其转化后输出,以触发一个动画的检测器。它是用

23、来测试用户触摸事件的检测器。该节点可以为任何成组节点的子节点,并感知用户对该组节点的动作。 11.2.1 接触检测器接触检测器v 其节点语法定义如下:TouchSensorEventOutSFBoolisOverEventOutSFVec3fhitPoint_changedEventOutSFVec3fhitNormal_changedEventOutSFVec3fhitTexCoord_changedEventOutSFBoolisActiveEventOutSFTimetouchTimeExposedFieldSFBoolenabled TRUE 11.2.1 接触检测器接触检测器v is

24、Over事件出口是用来当用户的鼠标位于被感应的三维对象上方时,将引发isOver事件,且该事件值为TRUE。反之,当用户的鼠标不在被感应的三维对象上方时,该事件值为FALSE。 v HitPoint_changed事件出口用来当用户在被感应的几何图形上点击鼠标时发送该值。其值表示对象上点的坐标。v HitNormal_changed事件出口用来当用户在被感应的几何图形上点击鼠标时发送该值。其值表示对象上点的表面法向量。v Enabled域的值指定了是否激活该检测器。当该域值为TRUE时,该检测器允许被用户激活,并产生输出;而当该域值为FALSE时,用户无法激活该检测器。该域值的缺省值为TRUE

25、。 11.2.1 接触检测器接触检测器v HitTexCoord_changed事件出口用于当用户位于被感应的几何图形上点击鼠标时,发送该值。其值表示对象上点的纹理坐标。纹理坐标功能是VRML中很重要的一个功能。我们可以使用这一功能实现像HTML网页一样,在一幅贴图上面划分多个区域,然后将每个区域设置各自的交互。v IsActive事件出口用来当用户点击对象时,检测器被激活,该域值由FALSE变为TRUE;反之当检测器失效时,该域值将由TRUE变为FALSE。v TouchTime事件出口用来当isOver为TRUE,而isActive为FALSE时发送该事件,所发送的值时系统当前的时间。 1

26、1.2.1 接触检测器接触检测器v 11.2.1.2 PlaneSensor节点节点 v PlaneSensor节点创建了一个可将浏览者的动作转换成适于造型的输出的检测器。该节点可以为任何成组节点的子节点,用以感知用户对该组节点的动作,使造型按用户的动作平移。v 其节点语法定义如下: PlaneSensorEventOutSFBoolisActiveEventOutSFVec3ftrackPoint_changedEventOutSFVec3ftranslation_changed 11.2.1 接触检测器接触检测器ExposedFieldenabledTRUEExposedFieldSFVe

27、c3foffset0 0 0ExposedFieldSFBoolautoOffsetTRUEExposedFieldSFVec2fmaxPosition-1 1ExposedFieldSFVec2fminPosition0 0v trackPoint_changed事件出口用来当检测器被激活并且用户单击鼠标时,发送该值。其值代表的是虚拟平面上的当前单击点。 11.2.1 接触检测器接触检测器v Translation_changed事件出口用来当检测器被激活并且用户单击鼠标时发送该值。其值代表的是虚拟平面上的平移坐标值。v Offset域的值用于设置偏移量,即每一次输出位置时的偏移量。当aut

28、oOffset字段的值为TRUE时,人为设置的偏移量被忽略。v AutoOffset域的值为TRUE时,VRML程序会根据用户实际拖拉鼠标的情况,计算出每一次平移的偏移量。v MaxPosition域的值用来设置检测器的最大位置值。v MinPosition域的值用来设置检测器的最小位置值。 11.2.1 接触检测器接触检测器v 11.2.1.3 CylinderSensor节点节点 v CylinderSensor节点用来创建一个将用户动作转换成造型围绕Y轴旋转动画的检测器,该节点可作为任何组节点的子节点。v 其节点语法定义如下:CylinderSensorEventOutSFBoolisA

29、ctiveEventOutSFVec3ftrackPoint_changedEventOutSFRotationrotation_changed ExposedFieldSFBoolenabledTRUEExposedFieldSFFloatoffset0 11.2.1 接触检测器接触检测器ExposedFieldSFBoolautoOffsetTRUEExposedFieldSFFloatmaxAngle-1ExposedFieldSFFloatminAngle0ExposedFieldSFFloatdiskAngle0.262 v isActive事件出口用来当检测器被激活时,设置该值为T

30、RUE,表示当前用户正在进行拖拉操作。否则为FALSE。v TrackPoint_changed事件出口用于当前用户激活检测器并进行拖拉操作时,将引发该事件值。其值代表圆柱体表面的坐标。 11.2.1 接触检测器接触检测器v Rotation_changed事件出口用于当用户激活检测器并进行拖拉操作时,将引发该事件值。该值时虚拟的圆柱体的旋转值。v Enable域的值为TRUE时,检测器才允许被用户激活。v Offset域的值指定了物体旋转的偏移量,即每一次增加的角度值。当autoOffset字段的值为TRUE时,人为设置的偏移量将被忽略。v AutoOffset域的值为TRUE时,VRML程

31、序会根据用户实际拖拉鼠标的情况,计算出每一次旋转的偏移量。v MaxAngle域的值定义检测器输出的最大角度。v MinAngle域的值定义检测器输出的最小角度。v DiskAngle域的值定义检测器在圆盘行为之间切换角度。 11.2.1 接触检测器接触检测器v 11.2.1.4 SphereSensor节点节点 v SphereSensor节点创建了一个将用户动作转换为造型绕某一点旋转的动画的检测器,该节点可作为其他组节点的子节点。v 其节点语法定义如下:SphereSensorEventOuttrackPoint_changedEventOutrotation_changedExposed

32、FieldSFBoolenabledTRUEExposedFieldSFRotationoffset0 1 0 0ExposedFieldSFBoolautoOffsetTRUE 11.2.1 接触检测器接触检测器v trackPoint_changed事件出口用于当检测器被激活并且用户单击鼠标时,发送该值。其值代表的是虚拟球体表面上的当前单击点。v Rotation_changed事件出口用户当检测器被激活并且用户单击鼠标时,发送该值。其值代表的是虚拟球体的旋转值。v Offset域的值指定了检测器每一次输出的旋转量。当autoOffset字段设置为TRUE时,本字段的设置值将被忽略。v A

33、utoOffset域的值指定该旋转值是否发生偏移。 11.2.2 感知检测器感知检测器 v 除了触动检测器外,能产生交互功能的节点还有感知检测器。与触动检测器不同的是,感知检测器是感知用户与造型的接近程度。感知检测器包括VisibilitySensor节点,ProximtitySensor节点和Collision节点。 v 11.2.2.1 VisibilitySensor节点节点 v VisibilitySensor节点用来从观察者的方向和位置感知一个长方体区域在当前坐标系中何时才是可视的。该节点可作为任意组节点的子节点。 11.2.2 感知检测器感知检测器v 其语法定义如下:VisibilitySensorExposedFieldSFBoolenabledTRUEExposedFieldSFVec3fcenter0.0 0.0 0.0ExposedFieldSFVec3fsize0.0 0.0 0.0EventOutSFBoolisActiveEventOutSFTimeenterTimeEventOutSFTimeexitTime 11.2.2 感知检测器感知检测器v center域

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论