アニメーション


SceneGraph でアニメーションをする方法についてです。

アニメーション / Alpha / 戻る / トップページ


アニメーション

Retained Mode でアニメーションする方法として Interpolator クラス (のサブクラス) を使う方法があります。
 
Interpolator クラスのサブクラスのコンストラクタには必ず Alpha オブジェクトを指定します。 Alpha クラスは時間情報を保持するクラスです。 Alpha オブジェクトは 0.0〜1.0 の範囲のα値を持っていて、 その値は時間の経過とともに変化していきます (詳しくは 後述 します)。
 
Interpolator クラスはレンダリング時にα値から その時点での物体の位置や色を決定します。
 
ここでは回転運動をする RotationInterpolator クラスを例として説明します。
 
RotationInterpolator オブジェクトは時間 (α値) に応じて TransformGroup オブジェクトの持つ Transform3D オブジェクトに Y 軸を中心とした回転を設定します。 α値が 0.0 の時は回転角 0、1.0 の時は回転角 2π です。 回転させる TransformGroup オブジェクトはコンストラクタで指定します。
	TransformGroup rotation=new TransformGroup();
	root.addChild(rotation);
	
	rotation.addChild(new ColorCube());	// 色付き立方体
	
	Alpha alpha=new Alpha();
	Interpolator interpolator=new RotationInterpolator(alpha,rotation);
	rotation.addChild(interpolator);
Interpolator オブジェクトは SceneGraph のどこにぶら下げても同じようです。
 
また、Interpolator オブジェクトはその適用範囲を設定する必要があります。 範囲は Bounds オブジェクト (実際はサブクラスのオブジェクト) が表現しますので、 それを setSchedulingBounds(Bounds region) メソッドで設定します。
	BoundingSphere bounds=new BoundingSphere(
		new Point3d(0.0,0.0,0.0),100.0);	// 原点を中心とする半径 100.0 の範囲
	
	interpolator.setSchedulingBounds(bounds);

Alpha

Alpha クラスは時間情報を保持するクラスです。 Alpha オブジェクトは 0.0〜1.0 の範囲のα値を持っていて、 その値は時間の経過とともに変化していきます。
 
時間の経過とともにどのようにα値が変化していくのかを コンストラクタで指定します。 コンストラクタに取る引数は最も多いもので Alpha(int loopCount, int mode, long triggerTime, long phaseDelayDuration, long increasingAlphaDuration, long increasingAlphaRampDuration, long alphaAtOneDuration, long decreasingAlphaDuration, long decreasingAlphaRampDuration, long alphaAtZeroDuration) となります。
 
このうち、特に重要なものが mode です。 ここには Alpha クラスの定数 INCREASING_ENABLE または DECREASING_ENABLE または INCREASING_ENABLE | DECREASING_ENABLE を指定します。
 
INCREASING_ENABLE が設定されれば α値は 0.0 から徐々に増えていき、 1.0 になったらまた 0.0 から値が増えていきます。 DECREASING_ENABLE が設定されれば α値は 1.0 から徐々に減っていき、 0.0 になったらまた 1.0 から値が減っていきます。 INCREASING_ENABLE | DECREASING_ENABLE が設定されれば α値は 0.0 から 1.0 に増加した後に 1.0 から 0.0 への減少をします。
 
increasingAlphaDuration は mode に INCREASING_ENABLE が含まれている時にα値が 0.0 から 1.0 に増加するのにかかる時間をミリ秒で指定します。 decreasingAlphaDuration についても同様です。

戻る