シャ、
私がしたことは、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 など、使いやすくする多くの機能を提供します。