同次座標

homogeneous-coordinates.png

ユークリッド空間では、同じ平面上にある2つの平行な線は、決して交わらない。
しかし、射影空間においてそれは真ではない。
上の図のように、ずっと平行なはずの線路は、
写真で見ると、遠くなるほど2つの線が近づく。いつか交わりそうだ。
2つの線は地平線で交わるだろう。
ユークリッド空間やデカルト座標系では、2Dや3Dの幾何を色々と扱うことができる。
でも、これらは射影空間を扱うのには十分ではない。
ユークリッド幾何学は射影幾何学の一部なのだ。

射影幾何を実現するために登場した同次座標

同次座標はアウグスト・フェルディナント・メビウス(August Ferdinand Möbiusという人が思いついだことである。そう、あのメビウスの輪のメビウスさんである。
射影空間における、グラフィックスの計算を可能にしたのだ。
同次座標は、N次元の座標を表現するために、N+1個の数を使うってことなのだ。
3DCGにおいては3次元までのことだけ考えればよいので、とりあえず、
3次元の射影をするために、x,y,z,wの4つの数を使うことが同次座標なんだって考えておけばいい。

デカルト座標系 同次座標系
x =x/w
y =y/w
z =z/w

このwってやつにはどんな数字を入れればいいの??
何でもないときは普通1を入れておく。
もし、点(x,y,z)が無限の遠くに向かっているなら、w=∞となり、
同次座標で(x,y,z,0)になる。
なので、

(1/0,y/0,z/0)=(∞,∞,∞)

になるのだ。

なぜ同次とよばれているのか?

英語でいうとhomogeneousホモの天才ではない。

(1)
\begin{align} (x,y,z,w) \iff (\frac{x}{w},\frac{y}{w},\frac{z}{w})\\ Homogeneous \iff Cartesian \end{align}

スケールに対して不変なのでそう呼ばれるのだ。

ユークリッド座標で平行だった線が同次座標で交わることの証明

(2)
\begin{align} \Biggl\{ ax+by+cz+d=0\\ ax+by+cz+e=0 \end{align}

上の2つの直線は、ユークリッド座標上では決して交わらない。
しかし、同次座標で表すと

(3)
\begin{align} \Biggl\{ a\frac{x}{w}+b\frac{y}{w}+c\frac{z}{w}+d=0\\ a\frac{x}{w}+b\frac{y}{w}+c\frac{z}{w}+e=0 \Rightarrow \Biggl\{ ax+by+cz+dw=0\\ ax+by+cz+ew=0\\ \end{align}

w=0だったら交点になりますね。
つまり、(x,y,z,0)
あ、これって、無限大の点だ。
なので、一番上の線路の絵みたいに、無限大の遠くにおいて2つの線が交わるのです。

wって具体的にどんな値になるの?

クリップ座標から正規化デバイス座標にするのに、クリップ座標のwで割るということをしますが、
このwってどんな値になるのでしょう?

(4)
\begin{equation} MVP * O \end{equation}

ローカル座標値に、モデルビュー投影行列を掛け算すると、結果としてクリップ座標になるのですが、
行列として表すとこんなかんじになります

(5)
\begin{pmatrix} 0&4&8&12\\ 1&5&9&13\\ 2&6&10&14\\ 3&7&11&15\\ \end{pmatrix} \begin{pmatrix} O_x\\ O_y\\ O_z\\ 1 \end{pmatrix} = \begin{pmatrix} C_x\\ C_y\\ C_z\\ C_w \end{pmatrix}

このCwが知りたいわけです。この部分の掛け算だけ取り出すと、

(6)
\begin{equation} C_w=m_3*O_x+m_7*O_y+m_{11}*O_z+m_{15} \end{equation}
Bibliography

サポートサイト Wikidot.com