Giáo trình Đồ họa máy tính - Chương 6: Các phép biến đổi trong đồ họa ba chiều
Các phép biến đổi trong đồ họa ba chiều là sự mở rộng của các phép biến đổi trong
đồ họa hai chiều bằng cách thêm vào việc xem xét tọa độ thứ ba, tọa độ z. Bây giờ,
chúng ta sẽ tịnh tiến một đối tượng thông qua việc mô tả một vector tịnh tiến ba
chiều. Vector này xác định độ dời của vật theo ba chiều trong không gian. Tương tự
như vậy, ta có thể thu phóng đối tượng với các tỉ lệ biến đổi theo cả ba chiều. Sự mở
rộng của phép quay ít hiển nhiên hơn hai phép biến đổi cơ sở trên. Khi khảo sát các
phép quay trong mặt phẳng hai chiều Oxy, ta chỉ cần khảo sát phép quay quanh một
tâm, hay nói cách khác, phép quay quanh một trục vuông góc với mặt phẳng Oxy.
Trong không gian ba chiều, ta có thể chọn một trục quay có phương bất kì. Phần lớn
các hệ đồ họa xử lí phép quay trong không gian ba chiều như là tổ hợp của ba phép
quay với trục quay là các trục tọa độ x, y và z. Như vậy, người dùng có thể dễ dàng
xây dựng một phép quay bất kì bằng cách mô tả trục quay và góc quay.
Cũng như khi trình bày các phép biến đổi trong đồ họa hai chiều, trong chương này, ta
sẽ khảo sát các phép biến đổi trong đồ họa bachiều dưới dạng ma trận. Một chuỗi bất
kì các phép biến đổi sẽ được biểu diễn bằng một ma trận duy nhất là tích của các ma
trận tương ứng với các phép biến đổi thành phần.
a trận của phép biến dạng như sau: ⎟⎟ ⎟⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜⎜ ⎜ ⎝ ⎛ = 1000 01 01 01 yzxz zyxy zxyx hh hh hh Sh (6.4) Ta có mối quan hệ Qx với P : zxzyxyxx PhPhPQ ++= . Ở đây có thể hiểu hxy là lượng mà tọa độ y của P tác động lên tọa độ x của Q. Hình 6.7 - Phép biến dạng theo trục x : hxy= hxz = 1, các hệ số khác bằng 0 Tương tự như trong trường hợp phép biến đổi tỉ lệ, phép biến dạng Sh (6.4) cũng có điểm bất động là gốc tọa độ O. Ta cũng có thể xây dựng phép biến dạng với tâm biến dạng tại một điểm ( )fff zyx ,, bất kì. Ma trận biến đổi của phép biến dạng với tâm tại ( )fff zyx ,, là: y z x y z x ⎟⎟ ⎟⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜⎜ ⎜ ⎝ ⎛ −−− = 1 01 01 01 zyfzxfyzfyxfxzfxyf yzxz zyxy zxyx hyh-xhzh-xhzh-y hh hh hh Sh (6.5) 1.5. Phép quay 1.5.1. Phép quay quanh một trục tọa độ Khác với phép quay trong hai chiều quanh một điểm bất kì, trong ba chiều ta có phép quay quanh một trục tọa độ. Ở đây ta sử dụng hệ tọa độ theo quy ước bàn tay phải và quy định chiều quay dương là ngược chiều kim đồng hồ. Ta có các ma trận biểu diễn các phép quay quanh trục x, y, z một góc θ lần lượt là R(z, θ), R(y,θ), R(x, θ): Quay quanh trục z : ( ) ⎟⎟ ⎟⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜⎜ ⎜ ⎝ ⎛ = 1000 0100 00cossin 00sincos θθ- θθ z,θR (6.6) Hình 6.8 - Phép quay quanh trục z Quay quanh trục y : ( ) ⎟⎟ ⎟⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜⎜ ⎜ ⎝ ⎛ = 1000 0cos0sin 0010 0sin0cos θθ θ-θ y,θR (6.7) y z x Hình 6.9 - Phép quay quanh trục y Quay quanh trục x : ( ) ⎟⎟ ⎟⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜⎜ ⎜ ⎝ ⎛ = 1000 0cossin-0 0sincos0 0001 x,R θθ θθθ (6.8) Nhận xét rằng các giá trị nằm trên dòng và cột tương ứng với trục x trong ma trận R(x,θ) sẽ có giá trị là 0 ngoại trừ giá trị nằm trên đường chéo chính là 1. Điều này đảm bảo cho tọa độ x của các điểm là không bị thay đổi qua phép biến đổi. Nhận xét này cũng tương tự cho trường hợp các ma trận còn lại. x z y Hình 6.10 - Phép quay quanh trục x Ghi chú: Các định nghĩa về chiều quay được dùng chung cho cả hệ tọa độ theo quy ước bàn tay phải và bàn tay trái. Cụ thể chiều dương được định nghĩa như sau: • Quay quanh trục x: từ trục dương y đến trục dương z. • Quay quanh trục y: từ trục dương z đến trục dương x. • Quay quanh trục z: từ trục dương x đến trục dương y. z y x Hình 6.11- Cách xác định chiều quay dương 1.5.2. Phép quay quanh một trục bất kì Giả sử trục quay đi qua hai điểm P0, P1 nào đó với phương được biểu diễn bởi vector đơn vị k. Quay điểm (x, y, z) quanh trục k theo một góc θ sẽ biến thành điểm (x’, y’, z’) (xem hình 6.12). x y z d "k P0 P1 k 'k ky α Hình 6.12 - Phép quay quanh trục k Để thực hiện phép quay quanh k một góc θ, ta có thể thực hiện một chuỗi các thao tác sau: • Tịnh tiến trục k về gốc tọa độ: tr(-P0) (thành trục k'). • Quay quanh trục x một góc α để đặt trục k' nằm trên mặt phẳng Oxz: rot(x,α) (thành trục k”). • Quay quanh trục y góc β để đưa trục k” về trục z: rot(y,-β). • Thực hiện phép quay quanh trục z một góc θ: rot(z,θ). • Thực hiện chuỗi các phép biến đổi ngược lại quá trình trên. Góc quay α được xác định dựa trên chiếu của k' lên mặt phẳng yz. Ta không cần tính α cụ thể. Thay vào đó ta tính sin(α) và cos(α) một cách trực tiếp. Từ hình 6.12 ta có: 10 10 PP PP k = , 2z2y kkd += cos(α) = kz/d, sin(α) = ky/d. Tương tự, từ hình 6.13 ta có: ( ) ( ) xx kkdd ==== 1/sin ,1/cos ββ Như vậy, phép quay quanh một trục P0P1 bất kì một góc θ, rot(P0P1, θ), có thể được phân rã thành chuỗi các biến đổi cơ sở sau: tr(-P0) rot(x,α) rot(y, -β) rot(z, θ) rot(y, β) rot(x, -α) tr(P0) Hình 6.13 - Tính góc β 1.6. Kết hợp các phép biến đổi affine ba chiều Để kết hợp các phép biến đổi affine ba chiều, chúng ta cũng thực hiện tương tự như ở phép biến đổi hai chiều bằng cách dùng hệ tọa độ thuần nhất. Bằng cách này chúng ta cũng có các kết quả tương tự như trong trường hợp biến đổi hai chiều. Nếu M1 biến đổi P thành Q và M2 biến đổi Q thành S thì M1M2 sẽ biến đổi P thành S, do đó ma trận kết hợp của nhiều phép biến đổi có thể được tính từ việc nhân các ma trận của các phép biến đổi thành phần. x y z kx "kβ 2. PHÉP BIẾN ĐỔI MÔ HÌNH VÀ PHÉP BIẾN ĐỔI HỆ TRỤC TỌA ĐỘ Cho đến thời điểm này, chúng ta đã khảo sát các phép biến đổi ba chiều như là thao tác dịch chuyển một điểm (một đối tượng) từ vị trí này sang vị trí khác trong một hệ trục tọa độ. Tuy nhiên, nhiều khi, ta cần xem xét các đối tượng trong các hệ tọa độ khác nhau, muốn chuyển từ một hệ tọa độ này sang hệ tọa độ khác. Ví dụ, trong quy trình hiển thị đối tượng ba chiều, ta cần đặt một đối tượng vào hệ tọa độ chung cho tất cả các đối tượng trong cảnh (hệ tọa độ thế giới thực), sau đó, xác định tia nhìn, ta chuyển đổi từ hệ tọa độ thế giới thực sang hệ tọa độ quan sát, và cuối cùng ta phải chuyển từ hệ tọa độ quan sát sang hệ tọa độ thiết bị, nơi các đối tượng sẽ được hiển thị. Khi mô hình hóa đối tượng, ta thường mô tả chúng trong một hệ tọa độ cục bộ, thuận tiện nhất cho việc mô hình hóa. Sau đó, bằng các phép biến đổi ta sẽ đặt chúng vào cảnh cần hiển thị. Cách tiếp cận này cho phép ta không cần mô hình hóa quá nhiều đối tượng mà chỉ mô hình hóa theo chủng loại đối tượng. Ví dụ để tạo cảnh trong hình 6.1 ta chỉ cần mô hình hóa một trái banh, một con ki, bàn, … Sau đó phát sinh ra nhiều con ki như thấy trong hình vẽ. Một ví dụ khác có thể xem trong hình 6.14. Việc chuyển đổi các mô tả đối tượng từ hệ tọa độ này sang hệ tọa độ khác thực hiện theo quy trình tương tự như trong đồ họa hai chiều. Ta cần xây dựng ma trận biến đổi để khớp được các trục tọa độ của hai hệ. Trước tiên, ta cần thực hiện phép tịnh tiến để hai gốc tọa độ trùng nhau. Sau đó, ta phải thực hiện tiếp một dãy các phép quay để khớp các trục tọa độ tương ứng lên nhau. Nếu các hệ tọa độ sử dụng các tỉ lệ đo lường khác nhau, ta phải thực hiện thêm một phép biến đổi tỉ lệ nữa để đồng nhất các hệ tọa độ. Hình 6.14 - Mô hình hóa và phép biến đổi hệ tọa độ Nếu hệ tọa độ thứ hai có gốc tọa độ đặt tại (x0, y0, z0) và các vector cơ sở được mô tả như trong hình 6.15 (tương ứng hệ tọa độ thứ nhất), trước tiên ta cần thực hiện phép tịnh tiến T(-x0,-y0,-z0). Sau đó ta xây dựng ma trận quay R dựa trên các vector cơ sở. Ma trận này sẽ biến đổi các vector đơn vị u’x, u’y, u’z tương ứng thành các trục x, y, z. ⎟⎟ ⎟⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜⎜ ⎜ ⎝ ⎛ = 1000 0 0 0 333 222 111 zyx zyx zyx u'u'u' u'u'u' u'u'u' R (6.9) Ma trận của phép biến đổi hệ tọa độ chính là tích T.R. Ma trận này biến đổi hệ tọa độ Descartes này thành hệ tọa độ Descartes khác, cho dù chúng là hệ tọa độ theo quy ước bàn tay phải hay bàn tay trái. Hình 6.15 - Chuyển đổi hệ tọa độ TÓM TẮT Chúng ta vừa khảo sát các phép biến đổi affine ba chiều như là sự mở rộng của các phép biến đổi affine hai chiều. Cũng như các phép biến đổi affine hai chiều, trước tiên ta khảo sát các phép biến đổi cơ sở: tịnh tiến, tỉ lệ, quay; sau đó khảo sát các phép biến đổi phức tạp hơn. Đặc biệt, phép quay quanh một trục bất kì được khảo sát chi tiết như là một minh họa cho các phân y x z (0,0,0) x' z' y' (x0,y0,z0) u'x u'y u'z Front-Wheel System Tractor System World yW zW xW yfW zfW xfW xt yt zt rã một phép biến đổi affine bất kì thành tích của các phép biến đổi affine cơ sở. Nhờ khảo sát các phép biến đổi affine với biểu diễn dạng ma trận trong hệ tọa độ thuần nhất nên công việc khá đơn giản và nhất quán. Lưu ý một điều, các phép tịnh tiến và quay có chung thuộc tính là : sau khi biến đổi, hình dạng và kích thước của đối tượng không thay đổi mà chúng chỉ bị thay đổi vị trí và định hướng trong không gian. Vì vậy, người ta gọi hai phép biến đổi này là phép biến đổi rigid-body transformations. Phần cuối chương, chúng ta đã xem xét các phép biến đổi hệ tọa độ. Các phép biến đổi này rất quan trọng trong quá trình hiển thị đối tượng ba chiều. BÀI TẬP 1. Hãy xác định ma trận của phép đối xứng gương qua mặt phẳng Oxy, Oxz, Oyz. 2. Hãy xác định ma trận biến đổi của phép đối xứng gương qua mặt phẳng đi qua điểm P(x,y,z) và có vector pháp tuyến n . 3. Hãy xác định ma trận của phép đối xứng qua trục tọa độ x, y, z. 4. Hãy xác định ma trận của phép đối xứng qua trục bất kì đi qua hai điểm P0, P1. 5. Hãy xác định ma trận biến đổi của phép đối xứng qua gốc tọa độ O. 6. Hãy xác định ma trận biến đổi của phép đối xứng qua một điểm P(x,y,z) bất kì. 7. Cài đặt chương trình cho phép người dùng sử dụng một trong các phép biến đổi affine (tịnh tiến, tỉ lệ, quay, biến dạng, …) để biến đổi đối tượng, sau đó hãy phục hồi lại đối tượng gốc. 8. Cài đặt chương trình minh họa sự kết hợp các phép biến đổi cơ sở để tạo thành phép quay quanh một trục bất kì. 9. Chứng minh công thức (6.3), (6.5). 10. Xây dựng ma trận biến đổi của phép quay quanh một trục bất kì.
File đính kèm:
- Giáo trình Đồ họa máy tính - Chương 6 Các phép biến đổi trong đồ họa ba chiều.pdf