370 likes | 577 Views
X3D 教程. 掌握 X3D 第四节. 主要内容:基本动画. 掌握 X3D 第四节. ViewPoint. 视点 orientation 方向坐标 position 位置 set_bind 为 true 时启用这个视点 , 为 false 时关闭. 掌握 X3D 第四节. 原来 <X3D> <Scene> <Shape> <Appearance> <Material diffuseColor="0 1 1"/> </Appearance> <Box/>
E N D
掌握X3D 第四节 主要内容:基本动画
掌握X3D 第四节 ViewPoint • 视点 • orientation 方向坐标 • position 位置 • set_bind 为true时启用这个视点,为false时关闭
掌握X3D 第四节 • 原来 • <X3D> • <Scene> • <Shape> • <Appearance> • <Material diffuseColor="0 1 1"/> • </Appearance> • <Box/> • </Shape> • </Scene> • </X3D>
掌握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"/>
掌握X3D 第四节 动画流程 ROUTE ROUTE TimeSensor Interpolation Transform……
掌握X3D 第四节 DEF名字 • DEF属性可指定名字 • <Transform DEF="thebox"> • <Shape><Box /></Shape> • </Transform> • <Transform> • <Shape><Box DEF="thebox /></Shape> • </Transform>
掌握X3D 第四节 TimeSensor • cycleInterval 循环周期 • fraction_changed 若TimeSensor启用,它会不断传出0-1之间的小数,表示在循环周期中的位置。 • startTime 起始时间 • stopTime 结束时间 • Loop循环或者只有一个周期
掌握X3D 第四节 TimeSensor • <TimeSensor DEF="Clock" cycleInterval="5.0" loop="true"/>
掌握X3D 第四节 动画流程 ROUTE ROUTE TimeSensor DEF="Clock" Interpolation Transform DEF="thebox"
掌握X3D 第四节 Interpolation元件 • ColorInterpolator • CoordinateInterpolator • CoordinateInterpolator2D • NormalInterpolator • OrientationInterpolator • PositionInterpolator • PositionInterpolator2D • ScalarInterpolator
掌握X3D 第四节 • 这个元件的所有节点都必须配合节点才能使用 • 随时间改变它的值 • 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"/>
掌握X3D 第四节 • 当Interpolation 的set_fraction接收到TimeSensor的fraction_changed事件时会知道现处的时间点,再根据key和keyValue输出相应的值,这时value_changed会触发并传出这个对应的值。
掌握X3D 第四节 PositionInterpolator改变位置 • <PositionInterpolator 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"/>
掌握X3D 第四节 动画流程 ROUTE ROUTE TimeSensor DEF="Clock" Interpolation PositionInterpolator DEF="TreePath" Transform DEF="thebox"
掌握X3D 第四节 事件传递ROUTE • 从某一节点的属性传递到另外某一节点的属性中 • 语法 • <ROUTE fromNode="NodeA" fromField="fieldA1" toNode="NodeB" toField="fieldB1"/>
掌握X3D 第四节 • <ROUTE fromField="fraction_changed" fromNode="Clock" toField="set_fraction" toNode="TreePath"/>
掌握X3D 第四节 动画流程 Clock. fraction_changed TreePath. set_fraction ROUTE ROUTE TimeSensor DEF="Clock" Interpolation PositionInterpolator DEF="TreePath" Transform DEF="thebox"
掌握X3D 第四节 • <ROUTE fromField="value_changed" fromNode="TreePath" toField="translation" toNode="thebox"/> • set_translation 事件为Transform设置位置的属性
掌握X3D 第四节 动画流程 Clock. fraction_changed TreePath. set_fraction TreePath. value_changed thebox. translation ROUTE ROUTE TimeSensor DEF="Clock" Interpolation PositionInterpolator DEF="TreePath" Transform DEF="thebox"
掌握X3D 第四节 • 这样就能动了
掌握X3D 第四节 例子 • <Viewpoint position="0 3 10"/> • <Transform DEF="T"> • <Shape> • <Box/> • </Shape> • </Transform> • <TimeSensor DEF="time" loop="true"/> • <PositionInterpolator DEF="P" 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="P"/> • <ROUTE fromField="value_changed" fromNode="P" toField="translation" toNode="T"/>
掌握X3D 第四节 CoordinateInterpolator • 改变坐标值 • 例:改变三角形形状 • <Shape> • <IndexedFaceSet coordIndex="0 1 2 " solid="false"> • <Coordinate DEF="coord" point="-1 0 0, 1 0 0, -1 1 0"/> • </IndexedFaceSet> • </Shape>
掌握X3D 第四节 • <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"/>
掌握X3D 第四节 OrientationInterpolator • 旋转
掌握X3D 第四节 • <Transform DEF="transform"> • <Shape> • <Box/> • <Appearance> • <Material diffuseColor="0 0 1"/> • </Appearance> • </Shape> • </Transform>
掌握X3D 第四节 • <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"/>
掌握X3D 第四节 例:月球围绕地球转 • 制作地球 • <Transform DEF="transform"> • <Shape> • <Appearance> • <ImageTexture url="2.jpg" /> • </Appearance> • <Sphere /> • </Shape> • </Transform>
掌握X3D 第四节 • 地球自转 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
掌握X3D 第四节 • 同样的方法制作月球 • <Transform DEF="transform"> • <Shape> • <Appearance> • <ImageTexture url="3.jpg" /> • </Appearance> • <Sphere radius="0.4" /> • </Shape> • </Transform>
掌握X3D 第四节 • 月球自转 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
掌握X3D 第四节 • 引用地球也月球 • <Transform> • <Inline url="earth.x3d"/> • </Transform> • <Transform DEF="moon"> • <Inline url="moon.x3d"/> • </Transform>
掌握X3D 第四节 • TimeSensor • <TimeSensor DEF="time" loop="true" cycleInterval="15"/>
掌握X3D 第四节 • 位置设置 • <PositionInterpolator DEF="P" 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 "/> 3 4 2 5 1 6 8 7
掌握X3D 第四节 • 传递 • <ROUTE fromField="fraction_changed" fromNode="time" toField="set_fraction" toNode="P"/> • <ROUTE fromField="value_changed" fromNode="P" toField="translation" toNode="moon"/>