纳金网

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