透視変換1
物体の座標を視点から見た座標に変換
視点のある座標を(Xe, Ye , Ze)、視線の先にある点を(Xp, Yp, Zp)とします。 すると視線ベクトル(Xv,Yv,Zv)は
Xv = Xp - Xe
Yv = Yp - Ye
Zv = Zp - Ze
Yv = Yp - Ye
Zv = Zp - Ze
となります。
それからY軸中心にα回転させてX軸中心にβ回転させた回転行列Aを作ります。
sinα = Xv / √(Xv2 + Zv2)
cosα = -Zv / √(Xv2 + Zv2)
sinβ= Yv / √(Xv2 + Yv2 + Zv2)
cosβ = √(Xv2 + Zv2) / √(Xv2 + Yv2 + Zv2)
A=
cosα = -Zv / √(Xv2 + Zv2)
sinβ= Yv / √(Xv2 + Yv2 + Zv2)
cosβ = √(Xv2 + Zv2) / √(Xv2 + Yv2 + Zv2)
A=
cosα | 0 | -sinα | 0 | 1 | 0 | 0 | 0 | |||||
0 | 1 | 0 | 0 | 0 | cosβ | sinβ | 0 | |||||
sinα | 0 | cosα | 0 | 0 | -sinβ | cosβ | 0 | |||||
0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
最後に任意の点(X , Y , Z)を視点が原点に来るように平行移動させ、回転行列を掛け、Z軸を奥に向かってプラスになるように反転させたものが視点から見た点(Xa , Ya , Za)になります。
[ Xa Ya Za W ]=
[ X Y Z 1 ] | 1 | 0 | 0 | 0 | A | 1 | 0 | 0 | 0 | ||||
0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | ||||||
0 | 0 | 1 | 0 | 0 | 0 | -1 | 0 | ||||||
-Xe | -Ye | -Ze | 1 | 0 | 0 | 0 | 1 |
Xa = (X - Xe)cosα + (Z - Ze)sinα
Ya = (X - Xe)sinαsinβ +
(Y - Ye)cosβ - (Z - Ze)cosαsinβ
Za = (X - Xe)sinαcosβ -
(Y - Ye)sin&beta - (Z - Ze)cosαcosβ;
これを、アクションスクリプトで表すとFlashPlayer10以降の場合はこうなります。
参考:アフィン変換_3DCG