水曜日 企業連携実習(花井先生の授業) →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次元も座標変換=変換行列を、変換したい順に掛ける」