Bài giảng Đồ họa 3D - Chương 5, Phần 2: Các phép biến đổi 3D - Bùi Tiến Liên
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Đồ họa 3D - Chương 5, Phần 2: Các phép biến đổi 3D - Bùi Tiến Liên", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_do_hoa_3d_chuong_5_phan_2_cac_phep_bien_doi_3d_bui.ppt
Nội dung text: Bài giảng Đồ họa 3D - Chương 5, Phần 2: Các phép biến đổi 3D - Bùi Tiến Liên
- ĐỒ HỌA 3D CÁC PHÉP BIẾN ĐỔI 3D Giảng viên : Bùi Tiến Lên
- Cơng thức biến đổi Biến đổi dạng ánh xạ T : R3 → R3 P P' Biến đổi dạng hàm P' = T(P) hay ' ' Px = Tx (Px,Py,Pz ) x = Tx (x,y,z) ' ' Py = Ty (Px,Py,Pz ) y = Ty (x,y,z) ' Pz = Tz(Px,Py,Pz ) z' = Tz(x,y,z) Trang 2
- Biến đổi Taper Dạng hàm x' = Tx (x,y,z) = rx y' = Ty (x,y,z) = ry z' = Tz (x,y,z) = z với r = f(z) Trang 3
- Biến đổi Twist Dạng hàm x' = Tx (x,y,z) = x cos − y sin y' = Ty (x,y,z) = x sin + y cos z' = Tz(x,y,z) = z với = f(z) Trang 4
- Biến đổi Bend Trang 5
- Biến đổi affine Dạng hàm : ' Px = m00Px + m10Py + m20Pz + m30 ' Py = m01Px + m11Py + m21Pz + m31 ' Pz = m02Px + m12Py + m22Pz + m32 Dạng ma trận : m m m 0 00 01 02 ' ' ' m10 m11 m12 0 P P P 1 = P P P 1 ( x y z ) ( x y z ) m20 m21 m22 0 m30 m31 m32 1 Trang 6
- Cài đặt // Lưu thơng tin phép biến đổi struct TAffine3D { double M[4][4]; }; Trang 7
- Tính chất Phép biến đổi affine 3D chiều -Bảo tồn tính thẳng. -Bảo tồn tính song song. -Bảo tồn tỉ lệ. Trang 8
- 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. Trang 9
- Phép tịnh tiến Tham số : độ dời trên trục Ox : tx độ dời trên trục Oy : ty độ dời trên trục Oz : tz y O x z Trang 10
- 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 Dạng hàm ' Px = Px + tx ' Py = Py + ty ' Pz = Pz + tz Dạng ma trậ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 số : Tâm tỉ lệ : O Hệ số tỉ lệ trên 3 trục : sx, sy, sz y O x z Trang 13
- Phép tỉ lệ – Cơng thức Dạng hàm ' Px = sxPx ' Py = syPy ' Pz = szPz Dạng ma trậ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 số : Trục quay : v = x,y,z Góc quay : y v = x,y,z O x z Trang 16
- Quay quanh trục Oz Tham số : Trục quay : v = 0,0,1 Gó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 Dạng hàm ' Px = cos Px − sin Py ' Py = sin Px + cos Py ' Pz = Pz Dạng ma trậ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 số : Trục quay : v = 1,0,0 Góc quay : y O x z Trang 20
- Quay quanh trục Ox – Cơng thức Dạng hàm ' Px = Px ' Py = cos Py − sin Pz ' Pz = sin Py + cos Pz Dạng ma trậ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 số : Trục quay : v = 0,1,0 Góc quay : y O x z Trang 22
- Quay quanh trục Oy – Cơng thức Dạng hàm ' Px = cos Py + sin Pz ' Py = Py ' Pz = − sin Py + cos Pz Dạng ma trậ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 Dạng ma trậ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 Phân rã thành : -Tịnh tiến p0 về gốc -Quay xung quanh trục v với góc -Tịnh tiến p0 về vị trí cũ Trang 32