📄 第二十章 动画效果.txt
字号:
value_changed
}
key(同上)(可以使用事件接口,set_key和key_changed)
keyValue域值给出的是一个关键的RGB颜色列表,其中的颜色值和前面的key域值中给出的关键时刻列表中的关键时刻点相对应。(可以使用事件接口,此输入接口为keyValue_loop,输出接口为key_changed)
key域值和keyValue域值中给出的各个时刻关键值和关键颜色值依次一一对应,可见两个域中所给出的关键值数目必须是完全相同的,但是其中所包含关键值的个数是不受限制的。
输入接口set_fraction通常是接受到TimeSensor节点中的输出接口fraction_changed中传送出来的时刻,当然也可以通过其他产生浮点值的方法输入到set_fraction输入接口中。
2.ScalarInterpolator节点
作用是给出一个关键浮点数值的列表。语法如下
ScalarInterpolator {
key [] #域值类型 MFFloat
keyValue [] #域值类型 MFVec3f
set_fration #输入接口 SFFloat
value_changed #输出接口 SFVec3f
}
key(同上)(可以使用事件接口,set_key和key_changed)
keyValue域值给出的是一个关键浮点数值的列表,其中的浮点数值和前面的key域值中给出的关键时刻列表中的关键时刻点相对应。(可以使用事件接口,此输入接口为keyValue_loop,输出接口为key_changed)
key域值和keyValue域值中给出的各个时刻关键值和关键浮点数值依次一一对应,可见两个域中所给出的关键值数目必须是完全相同的,但是其中所包含关键值的个数是不受限制的。
输入接口set_fraction通常是接受到TimeSensor节点中的输出接口fraction_changed中传送出来的时刻,当然也可以通过其他产生浮点值的方法输入到set_fraction输入接口中。
[颜色动画的空间造型.wrl] 一个简单的空间造型颜色变换动画的例子,其中的圆柱体在红、绿、蓝3种颜色之间依次变换。
[闪烁的动画球体.wrl] 通过ColorInterpolator节点对Material节点中emissiveColor域值的控制使一个球体产生了闪烁的动画效果。
[红绿灯的动画效果.wrl] 两个球体表示处在灭和亮两个不同状态下的球体。当然也可以在同一个VRML文件中加入不止一个的内插节点,用来控制数个空间造型的外观颜色。这个例子所示的红绿灯不断变换的交通灯造型是如此。
[动画空间造型的透明度.wrl] 通过ScalarInterpolator内插节点来控制空间造型的透明度。
4、CoordinateInterpolator节点描述了一系列在动画中可以使用的关键空间点参数。用来控制空间坐标点的动画效果,通常被输出到Coordinate节点的输入接口set_point中。
`CoordinateInterpolator节点语法
CoordinateInterpolator {
key [] #域值类型 MFFloat
keyValue [] #域值类型 MFVec3f
set_fraction #输入接口 SFFloat
value_changed #输出接口 MFVec3f
}
key可见域的值提供了一个关键时间、时刻和浮点时间的列表。通常,时刻从0.0到1.0之间取值,类似于时间感应节点的输出接口fraction_changed的输出。然而关键时刻可以是任意大小的正值,必须以递增的顺序排列。
keyValue可见域的值提供了一个关键三维坐标的列表。每一个坐标都包含3个浮点数值,其中每一个都分别表示坐标点在X,Y和Z方向上与原点之间的距离。
关键时刻和关键坐标点被同时用来指定坐标的子列表,在两个子列表间,节点产生并插入了一个坐标列表输出。在这种单一的形式中,一个列子对于每一个时刻仅仅含有一个对应的坐标。举例来说,如果有N个时刻值,那么在keyValue域中就一定有N个关键坐标点。第1个时刻值指定了第1个关键坐标点的时刻,第2个时刻值指定了第2个关键坐标点的时刻,如此类推。在这种内插器的单一形式中,每一个被输出的坐标列表都仅仅包含一个坐标。
在一种更为复杂的情况下,对于每一个时刻值,keyValue可见域都提供两个或更多的关键坐标点。举例来说,如果有N个时刻值和每个时刻值对应的M个关键坐标点,那么keyValue域就包含了N×M个坐标点,并且节点的输出包含M个坐标点。
当一个时刻值被输入接口set_fraction事件接收时,CoordinateInterpolator节点就基于关键时刻表和它们相对应的关键坐标子列表计算出一个坐标的列表。被计算出的新的坐标列表由输出接口value_changed来输出。
一个基于输入的时刻t的坐标列表输出由CoordinateInterpolator节点通过以下方式计算:
1)搜寻关键时刻列表,找到一对相邻的时刻值t1和t2,t1和t2必须满足:t1≤t≤t2。
2)取出相应的一对关键坐标子列表。
3)根据两个关键坐标子列表之间的线性插入,计算出一个中间的坐标子列表。
两个相邻的关键时刻t1和t2也许会具有相同的值,以便创建一段非连续的或是跳跃的动画路径。在这种情况下,当线性内插时间小于t1时,关键坐标子列表相应于t1(两个时间的第1个)被CoordinateInterpolator节点使用,当线性内插时间大于t2时,关键坐标子列表相应于t2(两个时间的第2个)就被使用。
[空间坐标动画.wrl] 这个例子就表现了对空间中坐标的动画控制。
5、NormalInterpolator节点描述了可用于动画的一系列关键空间面法向量。
语法如下
NormalInterpolator {
key [] #域值类型 MFFloat
keyValue [] #域值类型 MFVec3f
set_fraction #输入接口 SFFloat
value_changed #输出接口 MFVec3f
}
key可见域的值指定了一个关键浮点时刻列表。通常,时刻从0.0到1.0之间取值,如TimeSensor节点的输出接口fraction_changed的输出。然而关键时刻可以是任意大小的正、负浮点数,必须以递增的顺序排列。(可以使用事件接口)
keyValue可见域的值提供了一个关键法向量矢量列表。每一个法向量都被说明为3个浮点数值,分别为此向量的X,Y和Z分量。(可以使用事件接口)
关键时刻和关键法向量矢量一起使用来说明法向量矢量的子列表,在其中插入一个节点产生一个输出法向量矢量列表。在节点最简单的形式中,一个子列表只包含每个时刻的一个法向量。例如,如果有N个时刻值,那么在那么keyValue域中恰好有N个关键法向量矢量。第1个关键时刻给出第1个关键法向量矢量的时间,第2个时刻给出了第2个关键法向量矢量的时间,依此类推。在这种简单的插入节点形式中,每个输出法向量矢量列表只包含一个法向量矢量。
在复杂一些的插入节点形式中,keyValue可见域都提供两个或更多的关键法向量矢量。举例来说,如果有N个关键时刻,每个时刻有M个关键法向量矢量,那么keyValue域就包含了N×M个法向量矢量,并且节点的输出包含M个法向量矢量。
当输入接口set_fraction收到一个时刻,NormalInterpolator节点根据关键时刻列表和与其对应的关键法向量矢量子列表,计算出一个法向量为单位矢量。
用输出接口value_changed输出的法向量矢量被被逐点插入,就像在半径1.0的球体表面上。单位向量对P和Q用三维坐标,以表示单位球体表面上的位置。输入时,P和Q的中间值沿P和Q所在球表面的最短圆弧路径计算。
一个输入时刻t的输出法向量矢量列表由NormalInterpolator节点用以下方法计算:
1)扫描关键时刻找出一对相邻时间t1和t2,要求t1≤t≤t2。
2)取得相应的关键法向量矢量列表对。
3)在关键法向量矢量子列表中线性插入,计算出中间法向量矢量子列表。
两个相邻的关键时刻t1和t2可能有相同的值,以便在动画轨迹中产生一个中断或跳跃。在这种情况下,当对比t1小的时间进行线性插入时,对应于t1(两个相同的关键时刻中第1个)的关键法向量矢量子列表用于NormalInterpolator节点。当对比t2大的时间进行线性插入时,对应于t2(两个时间中的第2个)的关键法向量矢量子列表被使用。
一般情况下,通过一路由绑定到TimeSensor节点的输出接口fraction_changed上,时刻被发送到输入接口set_fraction。
NormalInterpolator节点不生成造型,在虚拟世界中没有视觉效果。NormalInterpolator节点可以作为任何成组节点的子节点被包含进去,但它独立于使用中的坐标系统。一般来说插入节点被放置在VRML的文件最外层组的尾部。
[明暗控制效果.wrl] 本例是通过法向量的动画控制,在一个平面上形成了明暗的动画效果。(是通过将变换的法向量指定在空间点的4个角上形成的。)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -