前のセクションでは、アニメーションの基本的なスキルであるノードのステータスを更新する方法を示します。このセクションでは、我々はもう少し複雑な例を見て------固定パスに沿ってオブジェクトを作ります。
OSGのオブジェクトが固定経路に沿って移動するように、いくつかの重要なクラスが使用されます。
1. OSG :: AnimationPath
2. OSG :: AnimationPathCallback
これらの2つのクラスは、一般的に組み合わせて使用されています。OSG :: AnimationPathパスを画定し、経路は一般に多くの制御点から構成されています。AnimationPathCallback NodeCallbackモデルのサブクラスが位置を更新するために使用されます。
書き換えられた次のコード例は、OSGのC ++ osganimationのバージョンから来ます。
私たちは、最初のパスを定義します
1つの デフcreateAnimationPath(中心、半径、looptime): 2 #アニメーション経路設定 3 animationPath = osg.AnimationPath() 4 animationPath.setLoopMode(osg.LOOP) 5 numSamples = 40 6は、 ヨー= 0.0 7 yaw_delta = 2.0 * OSG。 PI /(numSamples-1.0 ) 8 ロール= osg.inDegrees(30.0 ) 9 時間= 0.0 10 TIME_DELTA = looptime / (numSamples) 11 のための I における範囲(numSamples): 12 #位置=センター+ [math.sin(ヨー)*半径、math.cos(ヨー)*半径、0.0] 13 デルタ= [math.sin(ヨー)*半径、math.cos(ヨー)*半径、0.0 ] 14 位置= [X + Y のための X、Y におけるジッパー(中央、デルタ)] 15 Q1 = osg.Quat(角度=ロール、軸= [0.0,1.0,0.0 ]) 16 (ヨー- Q2 = osg.Quat(角度= + osg.inDegrees(90.0))、軸=(0.0,0.0,1.0 )) 17 回転= q1.multiply(Q2) 18 animationPath.insert(時間、osg.ControlPoint(位置=位置、回転= 回転)) 19 ヨー=ヨー+ yaw_delta 20 時間=時間+ TIME_DELTA 21 リターン animationPath
クォータニオンは、関連する知識参照がブックの幾何学的斜視図であってもよいし、オブジェクトのポーズの非常に重要なデータ記述です。上記のコードは唯一のpythonのパスを定義する方法を示しています。完全なコードは、オープンソースのWebサイトを参照してくださいすることができます
例https://github.com/enigma1997/pyosgプロジェクト。ここでは、最終的な結果です。