2

私の iOS アプリでは、与えられた点 ( で指定CGPoint) に基づいて大量の三角関数計算を行い、それらの計算に基づいていくつかの変換行列を作成し、最終的に OpenGL 描画で ( 経由でGLKit) 使用します。その基本を時間の経過とともに変化させてアニメーションを作成したいのですが、アニメーションCGPointにどのようなアプローチを使用すればよいかわかりません。

私が本当に探しているのは、イテレーションごとに呼び出される関数を指定できる API ですが、イーズインNSTimer/イーズアウトなどを利用できれば本当にクールです。唯一のピース反復ごとに変更する必要があるデータのうちの 1 つが my mainCGPointであり、残りのレンダリングはそれから決定できます。

私が検討したが放棄したアプローチ:

  1. Core Animation: OpenGL を使用して描画しているため、Core Animation は役に立たないようです。

  2. NSTimer: これでは、ベジェ曲線の柔軟性が得られず、非常に手動のようです。

  3. 特定のフレームレートに基づくハートビート: ポイントが変化したときにのみ再レンダリングする必要があり、ほとんどの場合、ポイントは静止しています。ハートビートが正しいアプローチだとは思えません。

私が説明しているようなものは存在しますか?私はそれを自分で書かなければなりませんか?それとも、提供されているツールを誤解しているだけで、グラフィックスの描画方法をもう一度見直す必要があるのでしょうか?

4

2 に答える 2

2

GLKViewGLKViewControllerをレンダリングに使用して、 のupdate:メソッドでポイントを変更できますGLKViewController

于 2012-06-16T05:41:35.120 に答える
2

私は他のポスターに同意します。iOS 5 を使用できると仮定すると、GLKView と GLKViewController を使用する必要があります。これは、画面の更新ごとに 1 回呼び出すように設定されています (内部で CADisplayLink を使用します)。iOS 5 だけになりたくない場合は、自分で CADisplayLink を設定できます。

Core Animation は、OpenGL レンダリングには役に立ちません。ただし、Core Animation のデザインを使用してデザインを駆動することはできます。Core Animation (他の Cocoa と同様) は OpenGL の上に構築されているため、CA が行うことはすべて自分で行うことができます。手間がかかるだけです。(時にはたくさんの仕事があります。)

Core Animation は、フレーム ベースではなくモーション ベースのアニメーション モデルを使用します。シーンをレンダリングするたびに、アニメーションの開始からの経過時間に基づいて、適用するモーションの量を決定します。フレームのレンダリングで遅れた場合、次のフレームはさらに移動するため、時間の経過に伴う動きは一貫しています。

タイミングをイーズ イン/イーズ アウトする限り、自分で行うこともできます。アニメーションのタイミングについて読む必要があります。入力時間から出力時間への非線形マッピングを使用し、ベジェ曲線を使用して最初と最後で曲線の形状を変更します。

于 2012-06-16T12:29:55.820 に答える