00000015.htm

来自「水木清华BBS」· HTM 代码 · 共 374 行 · 第 1/3 页

HTM
374
字号
cycleInterval&nbsp;有给定的秒数,但计算机内部将其处理成从0.0到&nbsp;<BR>1.0,即起始时间为0.0,终止时间为1.0,假如一个时间周期为&nbsp;<BR>20(单位均为秒),则第6秒的归一化结果是0.3,第10秒的归一化&nbsp;<BR>结果是0.5,第20秒的归一化结果是1.0。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;JAVA3D里的Alpha类和VRML的key字段的功能类似,它也是用于&nbsp;<BR>输出归一化的时间,不过它能够处理更加复杂的时间安排问题。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Alpha可以输出从0到1之间的数值给特定的内插对象,当Alpha&nbsp;<BR>输出的数值为0时,对应的特定内插对象的值为最小;当Alpha输出&nbsp;<BR>的数值为1时,对应的特定内插对象的值为最大;当Alpha输出的数&nbsp;<BR>值为0到1之间的数值时,对应的特定内插对象生成和Alpha成相同&nbsp;<BR>比例的数值。假设某一时刻Alpha输出的数值为0.2,则对应的特定&nbsp;<BR>内插对象的当前值为最小值加上最大最小值之差乘以0.2。&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(当前值-最小值)/(最大值-最小值)=0.2&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;JAVA3D里的各种Interpolator对象和VRML的内插节点的作用&nbsp;<BR>比较类似,可用来旋转形体、移动形体的坐标、变化形体的颜色等。&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;假设我们要让一个形体在规定的时间内按照指定的方式运动,&nbsp;<BR>我们首先要给出时间段的大小,还要指出时间是否要循环。这些内容&nbsp;<BR>都是由Alpha类来完成的。&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;我们在前面已多次用到Alpha类,基本上我们用它及一个旋转内&nbsp;<BR>插器RotationInterpolator来使形体绕着其所在的局部坐标系不停&nbsp;<BR>地旋转。下面是我们眼熟的语句,语句的作用是让形体以4秒为一周&nbsp;<BR>期,不停地绕着某一个轴旋转(Y轴):&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alpha&nbsp;rotationAlpha&nbsp;=&nbsp;new&nbsp;Alpha(-1,&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alpha.INCREASING_ENABLE,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;0,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4000,&nbsp;0,&nbsp;0,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;0,&nbsp;0);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RotationInterpolator&nbsp;rotator&nbsp;=&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;RotationInterpolator(rotationAlpha,&nbsp;obj,&nbsp;temp,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0f,&nbsp;(float)&nbsp;Math.PI*2.0f);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;从中我们可以看到,Alpha构造函数中:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;loopCount表示循环的次数,例如如果我们将前面介绍的Ex4_03.java&nbsp;<BR>的loopCount设为10,则小丑会旋转10周,然后停止。不过在一些运行速度&nbsp;<BR>慢的计算机上会出现少几次的情况,如作者本人使用的一台机器是&nbsp;<BR>Pentium&nbsp;586/100的计算机,当loopCount为10时,只看到小丑旋转了7次,&nbsp;<BR>因为程序从开始运行到出现画面,需要一段时间。loopCount为-1时表示&nbsp;<BR>无限循环。我们可以利用下面两个方法设置或获得loopCount:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setLoopCount(int&nbsp;loopCount)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;getLoopCount()&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;mode表示Alpha每一周期的运行方式,一共有三种:INCREASING_ENABLE、&nbsp;<BR>DECREASING_ENABLE、INCREASING_ENABLE|DECREASING_ENABLE。第一种&nbsp;<BR>方式表示Alpha的数值从0到1,相对应的内插对象的数值从最小到&nbsp;<BR>最大;第二种方式表示Alpah的数值从1到0,相对应的内插对象的数值&nbsp;<BR>从最大到最小;第三种方式表示Alpah的数值从0到1,然后从1到0,&nbsp;<BR>相对应的内插对象的数值从最小到最大,然后又从最大到最小。&nbsp;<BR>我们前面用到的Alpha,它每一个周期的数值,都是从0到1,对应的内插&nbsp;<BR>对象的数值,在每一个循环周期里,都是从最小到最大。我们可以&nbsp;<BR>利用下面两个方法,设置或获得mode:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setMode(int&nbsp;Mode)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;getMode()&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;triggerTime表示Alpha起作用的时间,它可由外部来触发,它和后面&nbsp;<BR>的7个参数的单位均为毫秒。&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;triggerTime参数后面还有7个类型为long的数,我们可以设置&nbsp;<BR>这些数值,来达到我们的各种编程目的。&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;前面我们介绍了VRML中各内插器节点key字段的作用,在VRML中,&nbsp;<BR>key的值只能从0到1。而在JAVA3D中,Alpha输出的值不仅可以从0到1,&nbsp;<BR>还可以从1到0,甚至可以先从0到1,再从1&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Alpha(int&nbsp;loopCount,&nbsp;int&nbsp;mode,&nbsp;long&nbsp;triggerTime,&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;phaseDelayDuration,&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;increasingAlphaDuration,&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;increasingAlphaRampDuration,&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;alphaAtOneDuration,&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;decreasingAlphaDuration,&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;decreasingAlphaRampDuration,&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;alphaAtZeroDuration)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Alpha构造函数里的头三个参数我们已经介绍过了,我们在这里介绍&nbsp;<BR>它的后7个参数,它们用于定义各内插对象的周期变化方式。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Alpha将每一个周期分外5个时段:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;起始延迟时段&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上升时段&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;高位时段&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下降时段&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;低位时段&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;------&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-------&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;每个周期的时间长度为这5个时段时间长度之和。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;每一个Alpha都必须给出这5个时段,当然,其中的任何数都可以为0,&nbsp;<BR>因而我们可以获得各种各样的Alpha类型。下面我们给出部分类型:&nbsp;<BR>&nbsp;<BR>1.&nbsp;只有上升时段的类型&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;这种类型的Alpha输出的数值从最小升到最大,然后又从最小升到最大。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;我们将前面的Pos.java改成这种类型时,生成的Alpha应为:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alpha&nbsp;xtranAlpha&nbsp;=&nbsp;new&nbsp;Alpha(-1,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alpha.INCREASING_ENABLE,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;0,20000,&nbsp;0,&nbsp;0,0,&nbsp;0,&nbsp;0);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;它使形体从左移到右,再将形体跳回到左边。&nbsp;<BR>&nbsp;<BR>2.&nbsp;只有下降时段的类型&nbsp;<BR>&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;&nbsp;\&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;&nbsp;\&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;&nbsp;\&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;&nbsp;\&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;这种类型的Alpha输出的数值从最大降到最小,然后又从最大降到最小。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;我们将前面的Pos.java改成这种类型时,生成的Alpha应为:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alpha&nbsp;xtranAlpha&nbsp;=&nbsp;new&nbsp;Alpha(-1,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alpha.DECREASING_ENABLE,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;0,0,&nbsp;0,&nbsp;0,20000,&nbsp;0,&nbsp;0);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;它使形体从右移到左,再将形体跳回到右边。&nbsp;<BR>&nbsp;<BR>3.&nbsp;上升加高位时段的类型&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---&nbsp;&nbsp;&nbsp;&nbsp;---&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;<BR>&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;<BR>&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;<BR>&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;<BR>&nbsp;&nbsp;&nbsp;这种类型的Alpha输出的数值从最小升到最大,暂停一段时间,&nbsp;<BR>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?