3D空間内で対象物を操作する際、主に4つの変換があります。
平行移動(translating)、回転(rotation)、拡大縮小(scaling)、せん断(shear)の4つです。
実際の操作の前に概念としての説明をしてしまいましょう(また長くなるかも知れませんね)
平行移動とは、その名のとおり、物を移動させること。机の上のコーヒーカップを少し右に動かすことです。あたりまえのことです。ただし、しっかり理解しておくべき事として、ここで用いている座標系は、オブジェクトの原点を中心とした座標系だということが挙げられます。コーヒーカップはコーヒーカップの中心に対して平行移動を行います。
回転もその名のとおり、物を回転させることです。繰り返しになりますが、オブジェクト原点を中心とした回転を行います。この原点を中心にということ、実は凄く重要です。その理由は後程。
拡大縮小も単に物を拡大縮小することです。と、単純にいいましたが、これもオブジェクト原点を中心に拡大縮小する為、きちんと把握していないと変な結果を引き起こします。グラフィックソフトや、モデリングソフトで望みどうりの結果を得られなくて、困ったことはありませんか?まるで中心がずれてしまったかのような錯覚をしてしまった事が。
最後にせん断。言葉で書くと、「軸上の点は動かずに軸上に無い点はその軸に平行に移動する変換で、移動量はもう一方の軸についての座標成分に比例する変形」(基礎から学ぶ図形処理:工業調査会刊)となりますが、なんの事かわかりませんね。「積み上げた雑誌の山が今にも崩れそうに傾いでいるところ」といった方がピンとくるかもしれません。これが3Dプログラミングにでてくる場面を私は知りませんが、もしかしたらY軸の0スケーリングと組み合わせて擬似的な影を表現したりするのかもしれませんね。
さて、今回は、拡大縮小とせん断の2つの変換に関して深く考えないで置きましょう。拡大縮小は後々必要になるでしょうが、あまり物の大きさが変ったり傾いだりしているところを現実世界で目の当たりにする機会はないですから。
また長くなりましたが、座標変換の種類は以上です。では次に行きましょう。
先程から、「原点中心に」という言葉が何度も出てきました。しつこいぐらいにでてきましたが、一体何故そんなに重要なのでしょうか?
例えば先ほどのコーヒーカップの例で行くと、コーヒーカップを右に10cm移動させたとします。ここで、今私が使った、「右に10cm」という言葉、一体どの座標系での出来事を思い浮かべますか?大抵の人はカメラ座標系、つまり視点を中心としたワールド座標系での出来事を思い浮かべるはずです。私もそのつもりで使いました。
ここで、私がコーヒーカップの取っ手を手前に持ってきたいと思っているとします。コーヒーカップの真ん中を中心にグルリと。ところが、事はそう簡単にいかないのです。なぜなら、「コーヒーカップにとって」先ほどの移動は「原点を中心に」10cm移動した操作であり、コーヒーカップにできる回転変換は「原点を中心に」回ることだけだからです。つまり、「私たちにとって」コーヒーカップの左10cm地点を中心にコーヒーカップ自体が円を描く運動を見ることになります。
いやですね。どうすれば私はコーヒーを飲めたのでしょうか。答えは簡単。回してから移動させれば良かったのです。コーヒーカップの原点を中心にグルリと取っ手を手前に、そして10cm移動すれば、望む結果が得られたのです。
回転して移動することと、移動して回転することが違う。この事は後に出てくる行列変換でも納得ができるのですが、ここでは概念として把握できるように考えてみました。