トップページ > 過去ログ > 記事閲覧
回転描写と拡大縮小描写
名前:3ペソ 日時: 2008/10/08 23:36

例えば、100*100pixelの画像Aがあるとして、 画像Aを数度だけ回転させ、そこから更に拡大縮小機能を使って 100*50pixelで画面に描写したいのですが、 自分の頭では、どうにも上手いやり方が思いつきません… 画像A、画像Aを10度回転させた画像B、画像Aを20度回転させた画像C、……… という風に画像を数十枚用意し、それぞれを拡大縮小描写で100*50で描写すれば、 やりたい描写自体は出来るのですが、 そうすると回転→拡大縮小描写をしたい画像1つごとに 数十枚の画像が必要になってしまうので、サイズの方が大きくなりすぎてしまって… どうにもやりたい事が上手く説明出来なかったので、 外部アップローダに説明用の画像をアップしました。 ttp://chu.s3.x-beat.com/cgi-bin/kick/img_box/img20081008230616.jpg それなりに長持ちするアップローダを選んだつもりですが、 それでもあまり長期間は持たないと思います。 自分の国語力の無さから妙な事をしてしまい、申し訳ないです… どなたかよろしくお願いします。

Page: 1 |

Re: 回転描写と拡大縮小描写 ( No.1 )
名前:IW 日時:2008/10/09 00:54

 前半の文章はさっぱり意味がわからなかったのですが、 図を見たら一発で理解できました(w  行列を使うと比較的簡単にできるかと思います。  まず、移動、回転、スケールそれぞれの行列を作ります。  posX、posYは表示したい絵の中心の座標で、angleは角度(ラジアン)、 scaleX、scaleYはスケール値です。今回は縦に半分なので scaleXは 1で、scaleYは 0.5を入れておきます。 MATRIX rotMat, transMat, scaleMat; CreateTranslationMatrix(&transMat, posX, posY, 0.f); CreateRotationZMatrix(&rotMat, angle); CreateScalingMatrix(&scaleMat, scaleX, scaleY, 1.f);  移動、回転、スケールを合わせた行列を作ります。 MATRIX trsMat; CreateIdentityMatrix(&trsMat); CreateMultiplyMatrix(&trsMat, &trsMat, &rotMat); CreateMultiplyMatrix(&trsMat, &trsMat, &scaleMat); CreateMultiplyMatrix(&trsMat, &trsMat, &transMat);  このテーブルは絵を表示する際に基本となる4隅の座標を 中心からのオフセットで表したものです。  imageHarfSizeXと imageHarfSizeYはそれぞれ画像の大きさの半分の 大きさを入れておきます(GetGraphSize()で取得した値の半分)。  つまり、100x100なら、それぞれ50が入ります。 VECTOR pos[4] = { { - imageHarfSizeX, - imageHarfSizeY }, { + imageHarfSizeX, - imageHarfSizeY }, { + imageHarfSizeX, + imageHarfSizeY }, { - imageHarfSizeX, + imageHarfSizeY }, };  このテーブルの位置情報を行列に掛け合わせて、移動・回転・スケールを 行った後の座標を計算します。 for(int n=0; n<4; ++n) { VectorTransform(&pos[n], &pos[n], &trsMat); }  あとは4隅を指定できる DrawModiGraphF()を使って表示します。 DrawModiGraphF(pos[0].x, pos[0].y, pos[1].x, pos[1].y, pos[2].x, pos[2].y, pos[3].x, pos[3].y, image, FALSE);  これで angle値を適当に増減すれば、図のような 変形をするようにできると思います。
Re: 回転描写と拡大縮小描写 ( No.2 )
名前:3ペソ 日時:2008/10/09 04:19

ぐおお、まさか簡単な2Dのゲームを作るのに 行列を見ることになろうとは…… 自分には絶対に考えつかなかったです… 試してみたところ、見事にやりたいように画像が描写出来ました。 本当にありがとうございます。 …絵をつけておいて良かった(w
Re: 回転描写と拡大縮小描写 ( No.3 )
名前:IW 日時:2008/10/09 10:21

 この行列は3D用なので、計算的にもメモリ的にもわずかに無駄があります。  2D用の行列をこさえて、それを使うといいのかもしれませんね。

Page: 1 |