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

ppt 32 trang cucquyet12 3410
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:

  • pptbai_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

  1. ĐỒ HỌA 3D CÁC PHÉP BIẾN ĐỔI 3D Giảng viên : Bùi Tiến Lên
  2. 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
  3. 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
  4. 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
  5. Biến đổi Bend Trang 5
  6. 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
  7. Cài đặt // Lưu thơng tin phép biến đổi struct TAffine3D { double M[4][4]; }; Trang 7
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. Quay quanh trục Oz Tham số : Trục quay : v = 0,0,1 Góc quay : y O x z Trang 17
  18. Quay quanh trục Oz – Cơng thức y Q’ P’ Q O P x z Trang 18
  19. 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
  20. Quay quanh trục Ox Tham số : Trục quay : v = 1,0,0 Góc quay : y O x z Trang 20
  21. 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
  22. Quay quanh trục Oy Tham số : Trục quay : v = 0,1,0 Góc quay : y O x z Trang 22
  23. 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
  24. 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
  25. Quay quanh trục đi qua gốc y u v O x z u v Trang 25
  26. Quay quanh trục đi qua gốc y O x z v v Trang 26
  27. Quay quanh trục đi qua gốc y O x z v Trang 27
  28. 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
  29. 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
  30. 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
  31. Quay quanh một trục tổng quát y p1 v p0 O x z Trang 31
  32. 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