纳金网
标题:
《掌握x3d》系列教程第四节
[打印本页]
作者:
愤怒的小猪
时间:
2011-12-26 15:21
标题:
《掌握x3d》系列教程第四节
掌握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"/>
作者:
四哥
时间:
2011-12-27 13:38
四哥路过,其他闪道!
作者:
哭泣的野百合
时间:
2011-12-27 13:38
作者:
哭泣的野百合
时间:
2011-12-27 13:38
作者:
有人不让用炮炮
时间:
2011-12-27 13:38
作者:
晃晃
时间:
2012-2-1 23:20
这么后现代
作者:
晃晃
时间:
2012-3-2 23:29
不错哦,顶一下......
作者:
tc
时间:
2012-4-7 23:30
其实楼主所说的这些,俺支很少用!
作者:
C.R.CAN
时间:
2012-4-10 23:20
很有心,部分已收录自用,谢谢
作者:
tc
时间:
2012-4-20 23:18
楼主收集的可真全哦
作者:
菜刀吻电线
时间:
2012-6-2 23:27
有意思!学习了!
作者:
奇
时间:
2012-6-28 23:29
跑着去顶朋友滴铁
作者:
奇
时间:
2012-8-20 23:26
响应天帅号召,顶
作者:
艾朵儿
时间:
2012-8-24 17:44
学习学习
作者:
osaka
时间:
2012-8-24 18:38
犀利啊!!!!!!!!!!!
作者:
晃晃
时间:
2013-2-14 23:25
再看一看,再顶楼主
作者:
晃晃
时间:
2013-2-22 23:21
路过、路过、快到鸟,列位请继续...ing
欢迎光临 纳金网 (http://wwww.narkii.com/club/)
Powered by Discuz! X2.5