20

写真で説明されているものと同様の効果を得ようとしています。左の白い部分は元の写真にはなくピクセルを押しのけています。Core Image (これに近い効果がいくつかありました) を使用してみましたが、私のニーズには遅すぎました。タッチに反応するようにするには、効果をきびきびさせる必要があります。

UIVIew でこれと同様のことを行う iOS SDK にクローズ エフェクト \ アニメーションはありますか? (私は近いものを見つけることができませんでした) そうでない場合、誰かが OpenGL を使用してこれを攻撃する方法を提供できますか? (コード例は大歓迎です)

(この効果は、私が書いているオープン ソース クラスで重要な役割を果たします。そのため、より単純なソリューションが利用可能な場合は、GPUImage などのサード パーティ クラスを使用しないことをお勧めします (このクラスを依存関係のないものにすることを目標にしています)。 )

ここに画像の説明を入力ここに画像の説明を入力ここに画像の説明を入力

4

5 に答える 5

27

シャ、

私がしたことは、OpenGL 座標に点の長方形のグリッドを配置することでした。(私は 50x50 グリッドを使用しました)。次に、同じ座標空間で 1 つまたは複数のコントロール ポイントを定義します。私が書いた一般的なピンチストレッチアルゴリズムがあります。コントロールポイント、半径、およびグリッドポイントを引き付ける/反発する量の符号付き整数を取り、それをグリッドの座標に適用します。ピンチの場合はグリッド ポイントをコントロール ポイントに近づけ、ストレッチの場合はコントロール ポイントを押しのけます。変化は制御点で最大になり、制御点からの距離が半径値まで増加するにつれて減少します。

メッシュの座標を変更したら、画像の (ゆがんだ) 長方形領域全体を描画する一連の三角形ストリップを定義します。1 回の OpenGL 描画呼び出しで、ワープ メッシュにテクスチャ全体をレンダリングできます。OpenGL は、制御点のメッシュ内の歪んだ三角形に合わせて画像ピクセルを引き伸ばします。これは、いくつかのコントロール ポイントを使用して太った顔の外観を作成する前後のサンプル イメージです。メッシュ グリッドが表示されるので、何をしているかを確認できます。それは私の醜いマグなので、事前にお詫び申し上げます。

ここに画像の説明を入力

そして引き伸ばされた画像:

ここに画像の説明を入力

私の場合、画像の周囲に沿ったコントロール ポイントを所定の位置にとどめ、画像の内部のみを歪ませたいので、追加のコード ロジックを追加して、周囲のコントロール ポイントを所定の位置に固定しました。そのため、画像のフレームが画像のように押し込まれません。ただし、それには追加のコードが必要でした。

コードは距離式を使用して、各グリッド ポイントがコントロール ポイントからどれだけ離れているかを計算し、三角関数を使用して角度を計算し、乗算を行って距離を変更し、さらに三角関数を使用して各グリッドの新しい位置を計算します。 -点。ただし、制御点の 50x50 グリッドのみを変換しているので、追いつくには十分な速さです。

私たちのアプリ、Face Dancer はアプリ ストアで無料です。(このリンクからダウンロードしてください: App Store の Face Dancerダウンロードして試してみてください。(多数の無料のモーフが含まれており、アプリ内購入として追加のモーフを提供しています) 有料の "全モーフを収録したプラス版。

Face Dancer を実行しているときに、画像を 2 本の指でダブルタップすると、モーフの作成に使用しているコントロール ポイントのグリッドが表示されるので、その動作を確認できます。

Xcode に含まれており、ドキュメントからリンクされている GLCameraRipple という OpenGL サンプル アプリがあります。それを出発点として検討することをお勧めします。カメラからビデオ フィードを受け取り、それを画面に描画します。画面に触れると、画面が水たまりであり、指が波紋を引き起こしているかのように画像がゆがみます。私が説明したようなメッシュ ワープ技術を使用します。

残念ながら、このアプリは OpenGL ES 2.0 を使用するより簡単な方法である GLKit を使用していないと思います。GLKit は、GLKViews や GLKViewControllers など、使いやすくする多くの機能を提供します。

于 2014-01-07T15:03:03.847 に答える
1

iOS 6 で追加されたコア イメージ ホール ディストーション フィルター (CIHoleDistortion) にも注目してください。これは、私が書いたテスト プログラムから生成された、かなり近いサンプル イメージです。

ただし、Apple のフィルタにより、画像がフレームの端から「引き離される」ことがわかります。これはバグだと思いますが、頑張って Apple に修正してもらいましょう:

ここに画像の説明を入力

于 2014-03-25T16:38:26.590 に答える
0

あなたが示しているのは、メッシュのワープのように見えます。それは OpenGL を使用すると簡単ですが、「簡単な OpenGL」は簡単なロケット科学のようなものです。

OpenGL を使用して内蔵カメラからのビデオの 60 fps メッシュ ワープ アニメーションを実行できる、Face Dancer という会社用の iOS アプリを作成しましたが、多くの作業が必要でした。(ファンハウス ミラー タイプの変更を顔に行います。ライブの「ファット ブース」に加えて、他の多くの効果を考えてください。)

于 2013-12-31T23:12:20.933 に答える
0

私は 2 つのアプローチを調査します。1 つ目は、必要と思われる多くの歪みフィルターを含むコア イメージ フィルターです。主な問題は、これらの多くが iOS では利用できないことです (ただし、OSX では利用できます...)。

第 2 に、GPUImage ライブラリには、使用できる多数の歪みフィルターがあります。以下は、それらがどのように使用されるかについて説明している Q です。

OpenGL ESを使用してUIImageに歪みを適用するにはどうすればよいですか?

于 2014-01-09T00:47:52.420 に答える