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 4780
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