水曜日 企業連携実習(花井先生の授業)
→2時間目からなので、注意
冬休み中の実習室利用
→資料(12月25日~28日、1月5日)
今日の授業 3D数学
3Dのゲーム制作で使う数学の知識
位置、ベクトル、行列
position(位置)
p(x, y, z)
p1(x1,y1,z1)
p2(x2,y2,z2)
v(vx,vy,vz)
ベクトル(vector)
終点-始点
v = p2-p1
v(vx,vy,vz)=(x2-x1, y2-y1, z2-z1)
ベクトルの長さ
|v| = |p2-p1| 2点間の距離
単位ベクトル → ある向きで、長さが1のベクトル
単位ベクトル化 → 正規ベクトル化、正規化
v/|v| = (vx/|v|, vy/|v|, vz/|v|)
行列(matrix)
3D 3x3
|vx1, vy1, vz1|
|vx2, vy2, vz2|
|vx3, vy3, vz3|
2D 2x2
|a b||x| |ax+by|
|c d||y| = |cx+dy|
v(x1,y1) 2倍したベクトル (ベクトルを2倍する変換)
2・v = 2(x1, y1) = (2x1,2y1)
|a b||x1| |ax1+by1| |2x1|
|c d||y1| = |cx1+dy1| = |2y1|
|2 0||x1| |2x1+0y1|
|0 2||y1| = |0x1+2y1|
Sを拡大縮小率として
|SX 0| はスケール変換行列
| 0 SY|
|SX 0 0|
| 0 SY 0|
| 0 0 SX|
回転
2次元回転
|x' = cos(t)*x1 - sin(t)*y1
|y' = sin(t)*x1 + cos(t)*y1
|cos(t) -sin(t)||x1| |cos(t)*x1 - sin(t)*y1|
|sin(t) cos(t)||y1| =|sin(t)*x1 + cos(t)*y1|
ある角度t(rad)だけ、点(x,y)を回転する行列
|cos(t) -sin(t)|
|sin(t) cos(t)|
3次元の回転行列
①x軸回転(yz平面上の回転)
| 1 0 0 ||x1| | x1*1 + y1*0 + z1*0 | | x1 |
| 0 cos(t) -sin(t)||y1|=| x1*0 + y1*cos(t) - z1*sin(t)|= |y1*cos(t)-z1*sin(t)|
| 0 sin(t) cos(t)||z1| | x1*0 + y1*sin(t) + z1*cos(t)| |y1*sin(t)+z1*cos(t)|
②y軸回転(xz平面上の回転)
| cos(t) 0 sin(t)|
| 0 1 0 |
| -sin(t) 0 cos(t)|
③z軸回転
|cos(t) -sin(t) 0|
|sin(t) cos(t) 0|
| 0 0 1|
平行移動
|x'| |x1 + tx|
|y'|=|y1 + ty|
vd(x',y') = v(x1,y1) + t(tx,ty)
同次座標変換
|x'| |1 0 tx||x1| |1*x1+0*y1 + tx| |x1+tx|
|y'|=|0 1 ty||y1|=|0*x1+1*y1 + ty|=|y1+tx|
|1'| |0 0 1||1 | |0*x1+0*y1 + 1 | | 1 |
「2次元も3次元も座標変換=変換行列を、変換したい順に掛ける」