[HMC]年間5250円で独自ドメイン付属、ウィルスチェックありのレンタルサーバ!
Last update : 2000/09/18
演出&エフェクト 第2回
サインカーブを使用して画像を揺らす その1
サンプルコードのダウンロード
  では、まずサンプルコードをダウンロードし、解凍して下さい。 私はVisual C++6.0でコンパイルしているので、をお持ちの方は Visual C++でプロジェクトファイルを開いて下さい(「effec_02.dsw」をダブルクリックすれば開けます)。 圧縮ファイルに含まれる「effec_02.exe」をダブルクリックし、実行してみて下さい(何かキーを押すと終了します)。 どうでしょう?画面が切り替わり、うねうね揺れた地球の画像が3パターン表示されると思います。 というわけで今回は、サインカーブを使用して画像を揺らす方法ついて説明したいと思います。
三角関数は怖くない(謎
  三角関数というと、なんだか難しく考える人もいるかもしれませんが、 今回は別にムツカシー計算をするわけではありません(たぶん)。
  右の図を見て下さい。 これはだいぶ「いびつ」ではありますが、サインカーブっぽいものです。ここでまず覚えて欲しいのは、 sin関数は「波形」という事と、最大値・最小値が+1・-1という事です。
  それから前にも書きましたが、C言語の場合sin関数の引数の単位はラジアンなので、

360度=2π
1度=π/180

となります(今回はあんまり関係ありませんが)。
地球を歪ませる
さて、ここらでサンプルプログラムを見てみましょう。
今回は、画面中に3パターンの歪む地球を表示させています。
また、DirectDrawに関しては、「
DirectDraw簡易講座 第10回」 のサンプルコードを使用しています。
順番に説明していきましょうか。
まずパレットを読み込み、地球の画像をlpWorkサーフェイスへ読み込んでおきます。
ここで、画像は320x240内の中央へ来るように、読み込んだ画像の転送先をずらしています(60,15)。
まぁ、解りやすくなると思ったので(^^;

そんでもって今日の本題の部分
  1つ前の段落でサインカーブについて触れましたが、ここではサインカーブの図を90度右へ回転 させたような感じで見ると直ぐに解ると思います(下図参照)。



  ここでは画像を、ズバシュァァァ!!と薄く横に切り刻みまくり、 それらを横にずらしながら置いていく感じです(謎)。
  毎回countをインクリメントする事で、使用する波形の「開始位置」をずらす事が出来ます。 これにより、「動く」うねりを実現出来ます。また、・・・)/10.fと適当に割っていますが、 大きな数字で割ると、波の間隔が広くなります。まぁ、いろいろ変数をいじってみて、 「どこを変えるとどうなる」というのを試してみてください(^^;説明するより、そうした方が早いです(爆。

  あと、パターン2・パターン3がありますが、これはもう説明するまでもありませんね(逃