回転体を回そう / 透視変換

第3章 No.3 / Sample4–8、回転と遠近感

あれ?

と思った人も多いだろう。「回転体」が回転してないじゃないかと…。では、つぎに回転体を回転してみよう。このプログラムは、Sample 1 を参考に簡単に変更することができる。

Sample 4 — 回転する回転体JS

いかがでしょう。また、データを少し変えてみよう。

Sample 5 — プロファイル変更JS

さらに、ダブルバッファリングという機能を使うと、すこし回転体がスムーズに回転する (Canvas の場合は標準でダブルバッファ済み)。

Sample 6 — ダブルバッファJS

透視変換

つぎに 透視変換 を考えよう。平行変換では図形の歪みがなく、平行な光を当ててみえる図形を表現したが、透視変換ではいわゆる 「遠近感」 をつけることである。

x-y 平面に図形を投影するとき、z 軸上で z 座標が −Z の位置から図形をみることを考える。そのとき、実際の図形の点 (x4+xx, y4+yy, z4+zz) を比により変換することにより、Z / (Z + z4 + zz) (x4 + xx) が x-y 平面上の座標となる。

Sample 7 — 透視変換 (far / near で遠近感)JS
独立ページ →

ここでわかるように、透視変換をすると図形が少し歪になる。視点 (-Z) を調節することにより解決することが可能であるが、コンピュータグラフィックスでは、透視変換を使わなくても (「遠近感」をそれほどつける必要がないので) よい場合が多い。そのため、通常は 全体を拡大、縮小 するだけでよい。

Sample 8 — 等倍ズーム (far / near)JS
独立ページ →

ソースコード: samples.jsSoR / FreeSoR / PerspectiveSoR 部分。