纳金网

标题: 《掌握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