座標変換に使っている行列ってやつは、線形代数でてくるヤツですよね。
入力座標を Xin Yin Zin Win
出力座標を Xout Yout Zout Wout
としたとき、
Xout = a*Xin + b*Yin + c*Zin + d* Win
Yout = e*Xin + f*Yin + g*Zin + h* Win
Zout = i*Xin + j*Yin + k*Zin + l* Win
Wout = m*Xin + n*Yin + o*Zin + p* Win
という式があったときに、この係数 a〜p だけを抜き出したものが行列になるわけですよね
a b c d
e f g h
i j k l
m n o p
ここで不思議なのは透視変換です。
透視変換って、たとえばスクリーン上でのx座標はz距離に比例ではなく反比例すると思うんです。
zが遠くなればなるほど、限りなくxはゼロに近づきますよね。このとき、Zout = 定数/Zin のような形になると思うのですが、行列で表すのは Zout = 定数 * Zin の形だけですよね?何故この反比例の形が行列で表現できるのでしょう???
線形ではないように見える透視変換がなぜ行列で表現できるのか?
Re: 線形ではないように見える透視変換がなぜ行列で表現できるのか?
「同次座標」とかで調べると良いかと思います.
スクリーン上への投影座標は,XYout,Yout,ZoutをWoutで割ることで得られます.
要は,
その4x4行列を掛けただけでは,「反比例」に対応する割り算はまだ行われていない,ということになるでしょうか.
スクリーン上への投影座標は,XYout,Yout,ZoutをWoutで割ることで得られます.
要は,
その4x4行列を掛けただけでは,「反比例」に対応する割り算はまだ行われていない,ということになるでしょうか.
Re: 線形ではないように見える透視変換がなぜ行列で表現できるのか?
ああ、Wの意味って、それだったんですね。
確かに最終的な座標を求めるときは最後に
x = X/W
y = Y/W
z = Z/W てやってますから、
w に z の値を突っ込んでおけば z に反比例させることができますね。
ありがとうございました!
確かに最終的な座標を求めるときは最後に
x = X/W
y = Y/W
z = Z/W てやってますから、
w に z の値を突っ込んでおけば z に反比例させることができますね。
ありがとうございました!