Bài giảng Đồ họa máy tính - Các phép biến đổi - Ngô Quốc Việt

pdf 23 trang Gia Huy 16/05/2022 2770
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Đồ họa máy tính - Các phép biến đổi - Ngô Quốc Việt", để 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:

  • pdfbai_giang_do_hoa_may_tinh_cac_phep_bien_doi_ngo_quoc_viet.pdf

Nội dung text: Bài giảng Đồ họa máy tính - Các phép biến đổi - Ngô Quốc Việt

  1. CÁC PHÉP BIẾN ĐỔI NGÔ QUỐC VIỆT 2009
  2. Tịnh tiến Tỉ lệ • Biến đổi quanh gốc tọa độ Xoay 2
  3. Khối đặt tại gốc O Quay quanh Z 45; Tịnh tiến trên X 1; Tịnh tiến trên X 1 Quay quanh Z 45 3
  4. Tịnh tiến 4
  5. Đồng nhất sx = sy = sz. 5
  6. x' cos  sin  0 0 x y' y Xoay quanh trục Z: sin  cos  0 0 z' 0 0 1 0 z w 0 0 0 1 w x' cos  0 sin  0 x y' 0 1 0 0 y Xoay quanh trục Y: z' sin  0 cos  0 z w 0 0 0 1 w x' 1 0 0 0 x y' y Xoay quanh trục X: 0 cos  sin  0 z' 0 sin  cos  0 z w 0 0 0 1 w 6
  7. Quay quanh vector A bất kỳ một góc . . Quay quanh trục Y góc  sao cho A nằm trong mặt phẳng YZ. . Quay quanh trục X góc sao cho A trùng với +Z . Quay quanh trục Z góc . Quay ngược theo trục X (góc - ) . Quay ngược theo trục Y (góc -) Hỏi: cách tính  và . 7
  8. Cách tính ? . Chiếu A lên mặt phẳng XZ (Loại bỏ y-coordinate) . Tìm góc  để quay A đến x-axis:  = -(90° - ) =  - 90 ° Cách tính ? 8
  9. Cần có các ma trận sau: . p:The point to be rotated about A by . Ry : Quay quanh Y góc  . Rx : Quay quanh X góc . Rz : Quay quanh Z góc -1 . Rx : Quay quanh X góc - -1 . Ry : Quay quanh Y góc - Nhân theo thứ tự nào? 9
  10. Trả lời: các phép biến đổi, theo thứ tự được viết từ phải sang trái. Vì vậy: -1 -1 p’ = Ry Rx Rz Rx Ry p -1 Hỏi: làm cách nào tính Rx . Trả lời: tính Rx (- ) . Rõ hơn: ma trận xoay là trực giao. 10
  11. Công thức Rodrigues: c = cos(), s=sin() 11
  12. Viewing transformation: định vị camera và hướng vào cảnh cần chụp. Modeling transformation: Sắp xếp, định vị cảnh (nhiều đối tượng) Projection transformation: Chọn ống kính và độ zoom. Viewport transformation: Xác định độ lớn cảnh sau cùng Tất cả đều dựa trên ma trận 4x4. 12
  13. Nhằm định vị và hướng của camera: sử dụng hàm gluLookAt(), với toạ độ và hai vector (một hướng lên, và một nhằm vào “tâm” đối tượng). Là định vị và hướng của điểm nhìn (eye coordinate). gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); . (0, 0, 5): vị trí camera . (0, 0, 0): vị trí hướng đến. . (0, 1, 0): đầu vector hướng lên Xem glutLession05 13
  14. Nhằm xác định viewing volume. Chiếu lên màn hình, và xem được những gì. Hiệu ứng tương tự như việc chọn ống kính (wide- angle, normal, telephoto), và vùng nhìn (field of view). Hàm glFrustum hoặc gluPerspective(). Có thể dùng glMatrixMode(transformation type) để xác lập biến đổi tương ứng. Chú ý: chỉ số ma trận biến đổi trong OpenGL là hoán vị (hàng và cột) so với ma trận chuẩn trong C. 14
  15. Chiếu phối cảnh: glFrustum. (left, bottom, -near) và (right, top, -near) thuộc mặt near được chiếu lên (lower, left) và (upper, right) của cửa sổ nếu điểm nhìn (mắt) ở (0, 0, 0). 15
  16. Giá trị near, far luôn dương 2 Near 0 A 0 right left 2Near 0 B 0 Top Bottom 0 0 C 0 0 0 1 1 Right Left Top Bottom A ; B ; Right Left Top Bottom Far Near 2.Far Near C ; D Far Near Far Near 16
  17. Chiếu phối cảnh: gluPerspective. 17
  18. Xác lập ma trận chiếu phối cảnh gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar) fovy: liếc theo góc thẳng đứng; aspect: tỉ lệ giữa ngang và dọc; zNear, zFar: khoảng xén Ma trận chiếu xác định như sau 18
  19. fov*0.5 = arctan ((top-bottom)*0.5 / near) top = tan(fov*0.5)*near bottom = -top top = tan(fov*3.14159/360.0) * near left = aspect * bottom right = aspect * top 19
  20. Khối nhìn có dạng Khoảng cách camera không ảnh hưởng đến kích cỡ hiển thị đối tượng 20
  21. void glOrtho(GLdouble Left, GLdouble Right, GLdouble Bottom, GLdouble Top, GLdouble Near, GLdouble Far ) Giá trị của far hay near là âm, nếu mặt nằm sau điểm nhìn, và dương nếu trước điểm nhìn 2 Right Left 0 0 tx tx Right Left Right Left 2 Top Bottom 0 0 t y Top Bottom t y Top Bottom 2 0 0 t Far Near z Far Near tz 0 0 0 1 Far Near (left, bottom, near) và (right, top, near) thuộc mặt near được chiếu lên (lower, left) và (upper, right) của cửa sổ. 21
  22. Vùng chữ nhật theo đơn vị pixel trên windows để render cảnh (đã được tính qua model view và projection view). Tỉ lệ (dài/rộng) viewport nên đồng dạng với khối nhìn. Chú ý: mắt nhìn theo hướng z âm. Vì vậy nếu near=1, far=3 thì chỉ những toạ độ có giá trị z từ 1 đến 3 mới thấy được (mặc định mắt tại gốc). 22
  23. Khi chọn đối tượng bằng mouse cần chuyển về toạ độ đối tượng. Sử dụng gluUnProject(). INV: ma trận nghịch đảo 23