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