Bài giảng Đồ họa 3D - Chương: Các phép biến đổi 3D - Bùi Tiến Lên
Nguyên lý kết hợp và phân rã
Nếu T1, T2 là phép biến đổi affine
Thì
-T = T1 + T2 là phép biến đổi affine
-M = M1 x M2
Mọi phép biến đổi affine bất kỳ đều có thể phân rã thành một chuỗi các phép biến đổi cơ bản.
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Đồ họa 3D - Chương: Các phép biến đổi 3D - Bùi Tiến Lên", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- bai_giang_do_hoa_3d_chuong_cac_phep_bien_doi_3d_bui_tien_len.ppt
Nội dung text: Bài giảng Đồ họa 3D - Chương: Các phép biến đổi 3D - Bùi Tiến Lên
- Cài đặt TAffine3D BuildTranslation3D(double tx, double ty, double tz) { TAffine3D T; T.M[0][0]= 1;T.M[0][1]= 0;T.M[0][2]= 0;T.M[0][3]=0; T.M[1][0]= 0;T.M[1][1]= 1;T.M[1][2]= 0;T.M[1][3]=0; T.M[2][0]= 0;T.M[2][1]= 0;T.M[2][2]= 1;T.M[2][3]=0; T.M[3][0]=tx;T.M[3][1]=ty;T.M[3][2]=tz;T.M[3][3]=1; return T; } Trang 11
- Phép tịnh tiến – Công thức Daïng haøm ' Px = Px + tx ' Py = Py + ty ' Pz = Pz + tz Daïng ma traän 1 0 0 0 0 1 0 0 M = 0 0 1 0 tx ty tz 1 Trang 12
- Phép tỉ lệ Tham soá : Taâm tæ leä : O Heä soá tæ leä treân 3 truïc : sx, sy, sz y O x z Trang 13
- Phép tỉ lệ – Công thức Daïng haøm ' Px = sxPx ' Py = syPy ' Pz = szPz Daïng ma traän s 0 0 0 x 0 sy 0 0 M = 0 0 s 0 z 0 0 0 1 Trang 14
- Cài đặt TAffine3D BuildScaling3D(double sx, double sy, double sz) { TAffine3D T; T.M[0][0]=sz;T.M[0][1]= 0;T.M[0][2]= 0;T.M[0][3]=0; T.M[1][0]= 0;T.M[1][1]=sy;T.M[1][2]= 0;T.M[1][3]=0; T.M[2][0]= 0;T.M[2][1]= 0;T.M[2][2]=sz;T.M[2][3]=0; T.M[3][0]= 0;T.M[3][1]= 0;T.M[3][2]= 0;T.M[3][3]=1; return T; } Trang 15
- Phép quay Tham soá : Truïc quay : v = x,y,z Goùc quay : y v = x,y,z O x z Trang 16
- Quay quanh trục Oz Tham soá : Truïc quay : v = 0,0,1 Goùc quay : y O x z Trang 17
- Quay quanh trục Oz – Công thức y Q’ P’ Q O P x z Trang 18
- Quay quanh trục Oz – Công thức Daïng haøm ' Px = cos Px − sin Py ' Py = sin Px + cos Py ' Pz = Pz Daïng ma traän cos sin 0 0 − sin cos 0 0 M = 0 0 1 0 0 0 0 1 Trang 19
- Quay quanh trục Ox Tham soá : Truïc quay : v = 1,0,0 Goùc quay : y O x z Trang 20
- Quay quanh trục Ox – Công thức Daïng haøm ' Px = Px ' Py = cos Py − sin Pz ' Pz = sin Py + cos Pz Daïng ma traän 1 0 0 0 0 cos sin 0 M = 0 − sin cos 0 0 0 0 1 Trang 21
- Quay quanh trục Oy Tham soá : Truïc quay : v = 0,1,0 Goùc quay : y O x z Trang 22
- Quay quanh trục Oy – Công thức Daïng haøm ' Px = cos Py + sin Pz ' Py = Py ' Pz = − sin Py + cos Pz Daïng ma traän cos 0 sin 0 0 1 0 0 M = − sin 0 cos 0 0 0 0 1 Trang 23
- Quay quanh trục đi qua gốc y Phân rã thành : v -Quay quanh trục Ox : -Quay quanh trục Oy : -Quay quanh trục Oz : -Quay quanh trục Oy : - -Quay quanh trục Ox : - O x v z v Trang 24
- Quay quanh trục đi qua gốc y u v O x z u v Trang 25
- Quay quanh trục đi qua gốc y O x z v v Trang 26
- Quay quanh trục đi qua gốc y O x z v Trang 27
- Quay quanh trục đi qua gốc – công thức Daïng ma traän v = x,y,z c = cos s = sin xx(1− c) + c yx(1− c) + zs zx(1− c) − ys 0 xy(1− c) − zs yy(1− c) + c zy(1− c) + xs 0 M = xz(1− c) + ys yz(1− c) − xs zz(1− c) + c 0 0 0 0 1 Trang 28
- Cài đặt TAffine3D BuildRotation3D(double angle, double x, double y, double z) { TAffine3D T; double c, s, d; angle *= PI/180; c = cos(angle); s = sin(angle); d = sqrt(x*x + y*y + z*z); if(d == 0) return; x /= d; y /= d; z /= d; T.M[0][0] = x*x*(1-c) + c; T.M[1][0] = x*y*(1-c) - z*s; T.M[2][0] = x*z*(1-c) + y*s; T.M[3][0] = 0; Trang 29
- Cài đặt T.M[0][1] = y*x*(1-c) + z*s; T.M[1][1] = y*y*(1-c) + c; T.M[2][1] = y*z*(1-c) - x*s; T.M[3][1] = 0; T.M[0][2] = z*x*(1-c) - y*s; T.M[1][2] = z*y*(1-c) + x*s; T.M[2][2] = z*z*(1-c) + c; T.M[3][2] = 0; T.M[0][3] = 0; T.M[1][3] = 0; T.M[2][3] = 0; T.M[3][3] = 1; return T; } Trang 30
- Quay quanh một trục tổng quát y p1 v p0 O x z Trang 31
- Quay quanh một trục tổng quát Tính v v = p1 − p0 Phaân raõ thaønh : -Tònh tieán p0 veà goác -Quay xung quanh truïc v vôùi goùc -Tònh tieán p0 veà vò trí cuõ Trang 32