纳金网
标题:
《掌握x3d》系列教程第五节
[打印本页]
作者:
愤怒的小猪
时间:
2011-12-26 15:21
标题:
《掌握x3d》系列教程第五节
主要内容:编程动画
动画流程
自动移动的方块
添加Box
<Transform DEF="Ball" translation="0 0 0" >
<Box size="0.4 0.4 0.4"/>
</Transform>
添加时间
<TimeSensor DEF="Clock" cycleInterval="4" loop="true"/>
s cript
此节点中包含若干成员,它可以接收和传出信息。
基本结构
<s cript DEF="Name">
……
</s cript>
<s cript DEF="Mover">
对比:
<
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"/>
set_fraction
value_changed
定义成员:定义接收和传出的成员
<field name='set_fraction' type='SFFloat' accessType='inputOnly'/>
常用数据类型
SFInt32 32位整数
SFFloat 单精度浮点数
SFVec3f单精度浮点数的三维向量
SFTime 时间值
MFString 字符串
SFRotation 旋转量
accessType接受类型
initializeOnly–只能是预设值,不能改变其值
inputOnly–只能接收
outputOnly–只能传送
inputOutput –可以是预设值,也能接收和传送
<field name='set_fraction' type='SFFloat' accessType='inputOnly'/>
<field accessType="outputOnly" name="value_changed" type="SFVec3f"/>
s cript
函数
<![CDATA[javas cript:
function 函数名() {
内容
}]]>
第一行指定使用的语言类型,如javas cript,ecmas cript
<![CDATA[ecmas cript:
function set_fraction() {
value_changed[0] +=0.1; // X component
value_changed[1] = 0.0; // Y component
value_changed[2] = 0.0; // Z component
}]]>
动画流程
事件传递
<ROUTE fromNode="Clock" fromField="fraction_changed" toNode="Mover" toField="set_fraction" />
<ROUTE fromNode="Mover" fromField="value_changed" toNode="Ball" toField="translation" />
改变
function set_fraction() {
value_changed[0] +=0.1; // X component
value_changed[1] += 0.1; // Y component
value_changed[2] = 0.0; // Z component
}]]></s cript>
变量
function set_fraction() {
var a=5;
value_changed[0] =a; // X component
value_changed[1] = 0.0; // Y component
value_changed[2] = 0.0; // Z component
}]]>
两个Box
<Transform DEF="Ball1" translation="-2 0 0" >
<Box size="0.4 0.4 0.4"/>
</Transform>
<Transform DEF="Ball2" translation="2 0 0" >
<Box size="0.2 0.2 0.4"/>
</Transform>
<TimeSensor DEF="Clock" cycleInterval="4" loop="true"/>
<s cript DEF="Mover">
<field name='set_fraction' type='SFFloat' accessType='inputOnly'/>
<field accessType="outputOnly" name="value_changed1" type="SFVec3f"/>
<field accessType="outputOnly" name="value_changed2" type="SFVec3f"/>
<![CDATA[ecmas cript:
function set_fraction() {
value_changed1[0] +=0.1;
value_changed2[1] +=0.1;
}]]></s cript>
<ROUTE fromNode="Clock" fromField="fraction_changed" toNode="Mover" toField="set_fraction" />
<ROUTE fromNode="Mover" fromField="value_changed1" toNode="Ball1" toField="translation" />
<ROUTE fromNode="Mover" fromField="value_changed2" toNode="Ball2" toField="translation" />
抛物线
<Transform DEF="Ball" translation="0 0 0" >
<Box size="0.4 0.4 0.4"/>
</Transform>
<TimeSensor DEF="Clock" cycleInterval= " 3" loop="true"/>
<s cript DEF="Mover">
<field name="set_fraction" type="SFFloat" accessType="inputOnly" />
<field accessType="outputOnly" name="value_changed" type="SFVec3f" />
<field accessType="outputOnly" name="t" type="SFFloat" />
<![CDATA[ecmas cript:
function set_fraction() {
t+=0.1;
value_changed[0] +=0.1;
value_changed[1] =1.6*t-0.3*t*t;
}]]>
</s cript>
<ROUTE fromNode="Clock" fromField="fraction_changed" toNode="Mover" toField="set_fraction" />
<ROUTE fromNode="Mover" fromField="value_changed" toNode="Ball" toField="translation" />
初始值value
<field accessType="outputOnly" name="value_changed" type="SFVec3f" value="-3 0 0"/>
弹簧振子
function set_fraction() {
t+=0.1;
value_changed[0] =2*Math.sin(t);
}]]>
圆周运动
function set_fraction() {
t+=0.1;
value_changed[0] =2*Math.sin(t);
value_changed[1] =2*Math.cos(t);
}]]>
螺旋
<field accessType="outputOnly" name="p" type="SFFloat" />
<![CDATA[ecmas cript:
function set_fraction() {
t+=0.1;
p+=0.01;
value_changed[0] =p*Math.sin(t);
value_changed[1] =p*Math.cos(t);
}]]>
文字
<Shape>
<Text DEF="text" string=""/>
</Shape>
<TimeSensor DEF="timer" cycleInterval="1" loop="true"/>
<s cript DEF="s cript">
<field accessType="inputOnly" name="set_fraction" type="SFFloat"/>
<field accessType="outputOnly" name="string_changed" type="MFString"/><![CDATA[ecmas cript:
function set_fraction() {
string_changed += ".";
}]]></s cript>
<ROUTE fromField="fraction_changed" fromNode="timer" toField="set_fraction" toNode="s cript"/>
<ROUTE fromField="string_changed" fromNode="s cript" toField="string" toNode="text"/>
显示当前时间
<Shape>
<Text DEF='text'/>
</Shape>
<TimeSensor DEF='refresh' cycleInterval='0.1' loop='true'/>
<s cript DEF='showtime'>
<field accessType='inputOnly' name='set' type='SFTime'/>
<field accessType='outputOnly' name='string_changed' type='MFString'/>
<![CDATA[ecmas cript:
function set () {
var today = new Date();
var date = today.toLocaleString();
string_changed= date;
}]]>
</s cript>
<ROUTE fromField='cycleTime_changed' fromNode='refresh' toField='set' toNode='showtime'/>
<ROUTE fromField='string_changed' fromNode='showtime' toField='string' toNode='text'/>
秒针
<Transform DEF='second'>
<Shape>
<IndexedLineSet coordIndex='0 1 -1'>
<Coordinate point='0 0 0, 0 1.8 0'/>
</IndexedLineSet>
</Shape>
</Transform>
<TimeSensor DEF='refresh' cycleInterval='0.1' loop='true'/>
<s cript DEF='set_time'>
<field accessType='outputOnly' name='second_changed' type='SFRotation'/>
<field accessType='inputOnly' name='set_second' type='SFTime'/>
<![CDATA[ecmas cript:
function set_second () {
var today = new Date();
var seconds = today.getSeconds();
second_changed[3] = -(Math.PI/30)*seconds ;
}]]>
</s cript>
<ROUTE fromField='cycleTime_changed' fromNode='refresh' toField='set_second' toNode='set_time'/>
<ROUTE fromField='second_changed' fromNode='set_time' toField='rotation' toNode='second'/>
作者:
四哥
时间:
2011-12-27 13:39
四哥路过,其他闪道!
作者:
80后
时间:
2011-12-27 13:39
作者:
有人不让用炮炮
时间:
2011-12-27 13:40
作者:
菜刀吻电线
时间:
2012-4-3 23:25
不错哦,顶一下......
作者:
菜刀吻电线
时间:
2012-9-24 23:20
谢谢楼主,真是太实用了
作者:
菜刀吻电线
时间:
2012-10-3 23:26
非常感谢,管理员设置了需要对新回复进行审核,您的帖子通过审核后将被显示出来,现在将转入主题
作者:
C.R.CAN
时间:
2012-10-12 23:20
不会吧,太恐怖了
作者:
晃晃
时间:
2013-2-23 23:19
不错哦,谢谢楼主
作者:
C.R.CAN
时间:
2013-3-5 23:28
跑着去顶朋友滴铁
欢迎光临 纳金网 (http://old.narkii.com/club/)
Powered by Discuz! X2.5