- 最后登录
- 2013-6-5
- 注册时间
- 2011-12-5
- 阅读权限
- 90
- 积分
- 17782
- 纳金币
- 17782
- 精华
- 0
|
掌握X3D 第四节
主要内容:基本动画
ViewPoint
视点
orientation 方向坐标
position 位置
set_bind 为true时启用这个视点,为false时关闭
原来
<X3D>
<Scene>
<Shape>
<Appearance>
<Material diffuseColor="0 1 1"/>
</Appearance>
<Box/>
</Shape>
</Scene>
</X3D>
设置视点
<Viewpoint orientation="0.5 0 0 -0.5" position="0 15 15"/>
<Viewpoint orientation="0.5 0 0 -0.5" position="4 2 10"/>
动画流程
DEF名字
DEF属性可指定名字
<Transform DEF="thebox">
<Shape><Box /></Shape>
</Transform>
<Transform>
<Shape><Box DEF="thebox /></Shape>
</Transform>
TimeSensor
cycleInterval 循环周期
fraction_changed 若TimeSensor启用, 它会不断传出0-1之间的小数,表示在循环周期中的位置。
startTime 起始时间
stopTime 结束时间
Loop循环或者只有一个周期
<TimeSensor DEF="Clock" cycleInterval="5.0" loop="true"/>
动画流程
Interpolation元件
ColorInterpolator
CoordinateInterpolator
CoordinateInterpolator2D
NormalInterpolator
OrientationInterpolator
PositionInterpolator
PositionInterpolator2D
ScalarInterpolator
这个元件的所有节点都必须配合节点才能使用
随时间改变它的值
Key属性表示时间点,keyValue表示某个时间点对应的值
时间可由TimeSensor 的fraction_changed决定
Eg坐标改变
<XXX key=" 0.0 0.25 0.5 0.75 1.0" keyValue=" -4.0 0.0 0.0 -2.0 0.0 0.0 0.0 0.0 0.0 2.0 0.0 0.0 4.0 0.0 0.0"/>
当Interpolation 的set_fraction接收到TimeSensor的fraction_changed事件时会知道现处的时间点,再根据key和keyValue输出相应的值,这时value_changed会触发并传出这个对应的值。
PositionInterpolator改变位置
<ositionInterpolator DEF="TreePath" key=" 0.0 0.25 0.5 0.75 1.0" keyValue=" -4.0 0.0 0.0 -2.0 0.0 0.0 0.0 0.0 0.0 2.0 0.0 0.0 4.0 0.0 0.0"/>
动画流程
事件传递ROUTE
从某一节点的属性传递到另外某一节点的属性中
语法
<ROUTE fromNode="NodeA" fromField="fieldA1" toNode="NodeB" toField="fieldB1"/> <ROUTE fromField="fraction_changed" fromNode="Clock" toField="set_fraction" toNode="TreePath"/>
动画流程
<ROUTE fromField="value_changed" fromNode="TreePath" toField="translation" toNode="thebox"/>
set_translation 事件为Transform设置位置的属性
动画流程
插入图片
这样就能动了
例子
<Viewpoint position="0 3 10"/>
<Transform DEF="T">
<Shape>
<Box/>
</Shape>
</Transform>
<TimeSensor DEF="time" loop="true"/>
<ositionInterpolator DEF="" key="0 0.3 0.7" keyValue="0 0 0, 1 0 0, 0 1 0"/>
<ROUTE fromField="fraction_changed" fromNode="time" toField="set_fraction" toNode=""/>
<ROUTE fromField="value_changed" fromNode="" toField="translation" toNode="T"/>
CoordinateInterpolator
改变坐标值
例:改变三角形形状
<Shape>
<IndexedFaceSet coordIndex="0 1 2 " solid="false">
<Coordinate DEF="coord" point="-1 0 0, 1 0 0, -1 1 0"/>
</IndexedFaceSet>
</Shape> <TimeSensor DEF="time" cycleInterval="3" loop="true"/>
<CoordinateInterpolator DEF="C" key="0 0.5 1" keyValue="-1 0 0, 1 0 0, -1 1 0, -1 0 0, 1 0 0, 0 1 0, -1 0 0, 1 0 0, 1 1 0"/>
<ROUTE fromField="fraction_changed" fromNode="time" toField="set_fraction" toNode="C"/>
<ROUTE fromField="value_changed" fromNode="C" toField="point" toNode="coord"/>
OrientationInterpolator
旋转
<Transform DEF="transform">
<Shape>
<Box/>
<Appearance>
<Material diffuseColor="0 0 1"/>
</Appearance>
</Shape>
</Transform>
<TimeSensor DEF="time" loop="true"/>
<OrientationInterpolator DEF="Or" key="0 0.3 0.7" keyValue="0 0 1 0, 1 0 0 2, 0.5 0 1 0.4"/>
<ROUTE fromField="fraction_changed" fromNode="time" toField="set_fraction" toNode="Or"/>
<ROUTE fromField="value_changed" fromNode="Or" toField="rotation" toNode="transform"/>
例:月球围绕地球转
制作地球
<Transform DEF="transform">
<Shape>
<Appearance>
<ImageTexture url="2.jpg" />
</Appearance>
<Sphere />
</Shape>
</Transform>
地球自转 OrientationInterpolato
<TimeSensor DEF="time" loop="true" cycleInterval="5.0" />
<OrientationInterpolator DEF="Or" key="0 0.5 1" keyValue="0 0 1 0, 0 1 0 3.14,0 1 0 6.28"/>
<ROUTE fromField="fraction_changed" fromNode="time" toField="set_fraction" toNode="Or"/>
<ROUTE fromField="value_changed" fromNode="Or" toField="rotation" toNode="transform"/>
保存为earth.x3d
同样的方法制作月球
<Transform DEF="transform">
<Shape>
<Appearance>
<ImageTexture url="3.jpg" />
</Appearance>
<Sphere radius="0.4" />
</Shape>
</Transform>
月球自转 OrientationInterpolato
<TimeSensor DEF="time" loop="true" cycleInterval="5.0" />
<OrientationInterpolator DEF="Or" key="0 0.5 1" keyValue="0 0 1 0, 0 1 0 3.14,0 1 0 6.28"/>
<ROUTE fromField="fraction_changed" fromNode="time" toField="set_fraction" toNode="Or"/>
<ROUTE fromField="value_changed" fromNode="Or" toField="rotation" toNode="transform"/>
保存为moon.x3d
引用地球也月球
<Transform>
<Inline url="earth.x3d"/>
</Transform>
<Transform DEF="moon">
<Inline url="moon.x3d"/>
</Transform>
TimeSensor
<TimeSensor DEF="time" loop="true" cycleInterval="15"/>
位置设置
<ositionInterpolator DEF="" key="0 0.125 0.25 0.375 0.5 0.625 0.7 0.825 1" keyValue="5 0 0,3.5 0 3.5, 0 0 5,-3.5 0 3.5, -5 0 0,-3.5 0 -3.5,0 0 -5,3.5 0 -3.5,5 0 0 "/>
传递
<ROUTE fromField="fraction_changed" fromNode="time" toField="set_fraction" toNode=""/>
<ROUTE fromField="value_changed" fromNode="" toField="translation" toNode="moon"/>
|
|