(E)経路ベースOSGに沿って移動------次元のプログラム開発パイソン

前のセクションでは、アニメーションの基本的なスキルであるノードのステータスを更新する方法を示します。このセクションでは、我々はもう少し複雑な例を見て------固定パスに沿ってオブジェクトを作ります。

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プロジェクト。ここでは、最終的な結果です。

おすすめ

転載: www.cnblogs.com/enigma19971/p/12613437.html