1

GLCameraRippleの例を使用して、 glTexImage2Dで読み込ん だ静止画像に波紋を付けています。

例のシェーダーはビデオフィードから画像を取得するためのものであるため、私は独自のシェーダーを使用しています。

タッチに反応し、タッチ位置に波紋を生成します。

正常に動作しますが、リップルアニメーションが終了したら、バッテリーの節約のために描画を一時停止する必要があります。このAppleの例では、この状態を確認する方法がどこにもわかりません。GLKViewまたはGLKViewControllerには、このためのデリゲートメソッドはありません。

GLKViewControllerのすべての更新で呼び出される-runSimulationメソッドを使用します。これはすべての魔法を実行しますが、波紋のアニメーション化が終了したかどうかを確認したり、初期状態と状態を比較したりできる場所がまだわかりません。波紋がいたるところに流れています。

私は現在、リップルアニメーションが終了するまでに最大でかかる時間を数えています。これは、静止画像が再び表示されるまで、この秒数の後に一時停止し、タッチイベントが発生したときに再び一時停止を解除するように設定しましたが、それはまったく正しく感じられません。(アニメーションの長さは、大きな画面(iPadなど)では異なり、プールサイズ、メッシュファクター、タッチ半径などによって異なる場合があります。)

ビューの内容が初期状態(画像をロードしたばかりのとき)と異なるかどうかを確認し、リップルアニメーションの再生が完了したことを確認する方法があることを期待していましたか?

4

1 に答える 1

1

リクエストに応じて、質問を閉じることができるように、コメントを回答に変換しています。

GLCameraRippleの例では、と呼ばれる内部配列を使用して、画像内のテクスチャ座標の変位を計算しrippleTexCoordsます。この配列は、各フレームのメソッドで更新され-runSimulationます。これにより、リップルが伝播します。

この配列の値が変化するのを観察すると、リップルが特定のしきい値を下回って消滅するポイントを特定できます。次に、これを進行中のシミュレーションを一時停止する時間として使用できます。

于 2012-09-17T16:55:48.030 に答える