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.

ppt 32 trang thiennv 09/11/2022 3480
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:

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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. Quay quanh trục Oz Tham soá : Truïc quay : v = 0,0,1 Goùc quay : y O x z Trang 17
  8. Quay quanh trục Oz – Công thức y Q’ P’ Q O P x z Trang 18
  9. 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
  10. Quay quanh trục Ox Tham soá : Truïc quay : v = 1,0,0 Goùc quay : y O x z Trang 20
  11. 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
  12. Quay quanh trục Oy Tham soá : Truïc quay : v = 0,1,0 Goùc quay : y O x z Trang 22
  13. 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
  14. 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
  15. Quay quanh trục đi qua gốc y u v O x z u v Trang 25
  16. Quay quanh trục đi qua gốc y O x z v v Trang 26
  17. Quay quanh trục đi qua gốc y O x z v Trang 27
  18. 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
  19. 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
  20. 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
  21. Quay quanh một trục tổng quát y p1 v p0 O x z Trang 31
  22. 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