ホームに戻る
3Dの数値計算に関する覚え書き
1、基本計算
距離
|距離|=(x^2+y^2+z^2)^(1/2)
内積(θは a と b のなす角度)
a・b=ax*bx+ay*by+az*bz=|a|*|b|*cosθ
外積(θは a と b のなす角度。c は a と b と共に垂直なるベクトル。)
a×b = |a||b|sinθ*c
cx=ay*bz-az*by
cy=az*bx-ax*bz
cz=ax*by-ay*bx
行列の計算
| a e i m |
|x' y' z' 1| = |x y z 1|*| b f j n |
| c g k o |
| d h l p |
x'=x*a+y*b+z*c+1*d
y'=x*e+y*f+z*g+1*h
z'=x*i+y*j+z*k+1*l
w'=x*m+y*n+z*o+1*p
2、基本変換
X軸回転
| 1 0 0 0 |
|x' y' z' 1'| = |x y z 1|*| 0 cosX sinX 0 |
| 0 -sinX cosX 0 |
| 0 0 0 1 |
Y軸回転
| cosY 0 -sinY 0 |
|x' y' z' 1'| = |x y z 1|*| 0 1 0 0 |
| sinY 0 cosY 0 |
| 0 0 0 1 |
Z軸回転
| cosZ sinZ 0 0 |
|x' y' z' 1'| = |x y z 1|*| -sinZ cosZ 0 0 |
| 0 0 1 0 |
| 0 0 0 1 |
拡大縮小
| sX 0 0 0 |
|x' y' z' 1'| = |x y z 1|*| 0 sY 0 0 |
| 0 0 sZ 0 |
| 0 0 0 1 |
平行移動
| 1 0 0 0 |
|x' y' z' 1'| = |x y z 1|*| 0 1 0 0 |
| 0 0 1 0 |
| dx dy dz 1 |
3、空間での変換
オブジェクト変換行列
|オブジェクト変換行列|=|単位行列|*|回転|*|拡大|*|移動|
カメラ変換行列(カメラが右に動けば実際は左に。そのため - がつく。)
|カメラ変換行列|=|単位行列|*|-移動|*|-拡大|*|-回転|
変換行列を用いた変換
|変換後オブジェクト|=|変換前オブジェクト|*|オブジェクト変換行列|*|カメラ変換行列|
4、陰面消去法(見えない面は描画しない。)
視線ベクトルvと法線ベクトルnの成す角をθとして、cosθ>0の時見える。
すなわち、
v・n
------ > 0 の時見える。
|v||n|
すなわち、
v・n > 0 の時見える