UE4でカメラ実装: シャッタースピードの実装3
UE4でカメラ実装: シャッタースピードの実装2 - #memo
続き
ソース画像を0として、指定角度と長さのブラーをかけられるようになった
45°, 50
const int Length = 50; const double Angle = 45.0; const double Scale = 0.70; // 回転 Point center( img.cols/2, img.rows/2 ); Mat affine_matrix = getRotationMatrix2D(center, Angle, Scale); warpAffine(img, img, affine_matrix, img.size(), INTER_LINEAR, BORDER_REFLECT_101); // カーネル作成 float data[Length]; for (int i = 0; i < Length; ++i) data[i] = 1; Mat kernel(Length, 1, CV_32F, data); normalize(kernel, kernel, 1.0, 0, CV_L1); // ブラー処理 filter2D(img, img, -1, kernel, Point(0, 0)); // 回転(元の角度に) affine_matrix = getRotationMatrix2D(center, -1 * Angle, 1 / Scale); warpAffine(img, img, affine_matrix, img.size());
回転すると切り詰められるのはスケールとBORDER_TYPEをBORDER_REFLECT_101にしてごまかしているけど、完全にもっといい奴がある気がする
次にプレイヤーカメラの情報からLengthとAngleを渡す部分
シャッター開閉時間にテクスチャの更新を行うtnの間隔があって
tiのときに、ti-1のテクスチャに対して処理を行う
このときにCameraManagerのRotationの差を渡す
RotationのYawは、例えば10回左に回転すると-3600になるので、差をとってやれば移動方向がでる
この角度を、テクスチャ上で何ピクセルの移動に相当するかの変換をする
回転は移動量とみなせるので(みなしていいのか!?)、アークタンジェントで処理角度と、ピタゴラスの定理から長さが取得できる
移動量の倍率は、よくわからないですね…
テクスチャサイズに依存しているような気がしないでもない
とりあえず現段階で現像を行ってみる
わぁ!?ええんちゃう!?
現時点の問題(やっていないこと)が、
・ブラー距離倍率の数学(適当に5倍にしている)
・光量の数学
・画像合成の数学(スクリーンもなんか微妙)
・画像の光量を各スパンで統一としてしまっているけど、最後だけは違うのでおもみを変えないといけない
・プレイヤーの移動がブラーに反映されない
・オブジェクトの移動がブラーに反映されない
・カメラのRollがブラーに反映されない(操作できるようにするのか未定)