3次元CGと座標系



   

  1. 座標変換はこれまでも葉や花を描く際にしばしば用いてきたが、ここであらためて座標系と投影という観点から述べ直しておく。
     まず、座標系には右手系(right-handed coordinate system)と左手系(left-handed coordinate system)がある。右手系とは、3次元空間における 右手系 (正系)とは、右手の親指、人指し指、中指を直交するように曲げたときに、親指を x 軸、人指し指を y 軸、中指を z 軸とする座標系である(それぞれの指が向いている方向が対応する軸の正の向き: 下図1)。 これに対し、左手系 とは、左手で同様なことをして定まる座標系である(下図2)。
     
     グラフィックスの分野では、右手系はワールド座標系とも呼ばれる。これに対し、左手系は視点座標系とも呼ばれ、座標原点に視点を置いた座標系である。視点と原点の位置関係を考慮せずにすむため、図形をスクリーン(2次元平面)に表示する場合に有効である。
     
     これまでもそうであったが、今後も左手系(視点座標系)で考えることにする(右手系か左手系かによって下記の座標変換の公式も変るので注意したい)。 左手系における3次元の回転に関する座標変換についてはすでに 第13回 で述べ(2次元の座標変換については 第7回 で述べた)、(特に、回転に関してカスタマイズした)各種メソッドは graphics クラスにも登録してあるが、ここであらためて3次元における図形の変換(座標変換)についてまとめて述べておく。

  2. まず、回転の向きについて考える。2次元の場合には、反時計回りの回転が正の方向の回転であった。3次元の回転では、x、y、z 軸それぞれの回りの回転(および、それらの合成)を考えるが、どの方向の回転を正の向きと考えるのであろうか? これは、右手系の場合には、軸の正の方向に向って右ネジが進む方向を正の向きと考える。左手系の場合には逆になる(次図参照)。
     
  3. 2次元の場合と同様に、3次元でも平行移動、大きさの拡大/縮小(スケーリング)、対称移動、回転移動、およびそれらの組み合わせがあるが、まず、もっとも単純な平行移動とスケーリングは次のように表すことができる。以下、このように、座標変換は行列を使って表す。
     
  4. 次に、回転であるが、座標の変換式を導くために、z 軸回りの回転を例にして考える。次の図に示したように、z 軸の回り(正の方向)にθだけ回転した場合を考える。
     
    これより、次のような変換公式が得られる:
     
    同様に、x 軸回り、y 軸回りの場合は次のようになる:
       
    さらに、z 軸の回りにθz 回転させてから、続けて y 軸回りにθy だけ回転させると、2つの回転後の座標は次のように行列の積として表すことができる(他の場合も同様である):
     
    上記で、x、y、z 軸回りの回転を表す行列を3×3と4×4の2つ示したが、4×4の方は回転の合成が行列の積として表すことができるようにダミーの行と列を追加したものである。平行移動やスケーリングも同様にしておけば、様々な変換を続けて行なった場合の変換公式を行列の積で表すことができる。

  5. ここで、変換に関する基本的性質について述べておこう。 n 次元ユークリッド空間において、次の上側に示した式
    で表される変換を1次変換線形変換、linear transformation)という。回転(対称移動)、スケール倍の合成からなる変換は1次変換である。
    1次変換に「平行移動」を加えたものをアフィン変換(affine transformation)といい、上記の下側に示した式のように表すことができる:

    アフィン変換は次のような性質を持つ

     これらはいずれも、座標の変換公式を見て、直線/曲線/曲面の方程式に当てはめれば容易にわかることである。

    回転に関する性質

  6. graphics クラスの拡張実行例
     実際に、3次元の平行移動や回転を行なってみよう。その過程で、今後よく使うであろう座標変換関係のメソッドを追加して graphics クラスを拡張する。