2. CÁC THUẬT TỐN VẼ ĐƯỜNG
2.1.2. Phương trình mặt phẳng
Để thực hiện việc hiển thị một đối tượng ba chiều, ta phải xử lí dữ liệu nhập thơng qua một quy trình gồm nhiều bước. Trong một số bước này, đơi khi ta cần thơng tin về định hướng của đối tượng và cả thơng tin về định hướng của từng mặt của đối tượng trong khơng gian. Những thơng tin này cĩ thể lấy được thơng qua tọa độ của các đỉnh và phương trình mơ tả các mặt đa giác của đối tượng.
Phương trình biểu diễn mặt phẳng cĩ dạng: (5.1)
trong đĩ là một điểm bất kì của mặt phẳng và A, B, C, D là các hằng số diễn tả thơng tin khơng gian của mặt phẳng. Như đã biết, để xác định phương trình mặt phẳng, ta chỉ cần biết ba điểm khơng thẳng hàng trên mặt phẳng này. Như vậy, để xác định phương trình mặt phẳng qua một đa giác, ta sẽ sử dụng tọa độ của ba đỉnh đầu tiên , , , trong đa giác này. Từ (5.1) ta cĩ:
(5.2)
Dùng quy tắc Cramer, ta cĩ thể xác định A, B, C, D theo cơng thức:
(5.3)
Khai triển các định thức trên ta được cơng thức tường minh của các hệ số:
Hướng của mặt phẳng thường được xác định thơng qua vector pháp tuyến của nĩ. Vector pháp tuyến , trong đĩ A, B, C là các hệ số của phương trình mặt phẳng ta vừa tính trong (5.4).
Hình 5.10 – Vector pháp tuyến của mặt phẳng
Vì ta thường làm việc với các mặt bao quanh đối tượng nên ta cần phân biệt hai mặt của mặt phẳng. Mặt tiếp giáp với phần bên trong của đối tượng ta gọi là mặt trong, mặt kia là mặt ngồi. Nếu các cạnh của đa giác được mơ tả theo chiều ngược chiều kim đồng hồ, vector pháp tuyến của mặt phẳng sẽ hướng từ trong ra ngồi (giả sử hệ tọa độ biểu diễn đối tượng là hệ tọa độ bàn tay phải). Ví dụ, trong hình 5.11, vector pháp tuyến của mặt phải của khối lập phương đơn vị (mặt được tơ) cĩ phương trình mặt phẳng là x-1=0 và cĩ vector pháp tuyến tương ứng là (1,0,0);
Hình 5.11 – Vector pháp tuyến hướng từ trong ra ngồi
Phương trình mặt phẳng cịn cĩ thể dùng để xác định vị trí tương đối giữa một điểm trong khơng gian với mặt phẳng. Nếu điểm P(x,y,z) khơng nằm trên mặt phẳng, lúc đĩ ta cĩ:
Ax + By + Cz + D ¹ 0
Ta cĩ thể xác định P nằm ở phía trong hay nằm phía ngồi của mặt phẳng nhờ vào dấu của biểu thức Ax + By + Cz + D:
•Nếu Ax + By + Cz + D < 0, điểm P(x,y,z) nằm trong.
•Nếu Ax + By + Cz + D > 0, điểm P(x,y,z) nằm ngồi.
Dấu hiệu kiểm tra trên đúng cho hệ tọa độ bàn tay phải và phương trình mặt phẳng được tính từ tọa độ các đỉnh đa giác cho theo chiều ngược chiều kim đồng hồ.
Đơi khi, sẽ rất hữu ích nếu ta khảo sát các đường và mặt thơng qua phương trình tham số của nĩ.
Phương trình tham số của một mặt là một phương trình cĩ hai tham số u, v. Một điểm bất kì trên mặt sẽ cĩ tọa độ được biểu diễn dưới dạng vector tham số : p(u, v) = (x(u, v), y(u, v), z(u, v)). Với mỗi cặp giá trị (u, v) ta sẽ cĩ một bộ các tọa độ (x, y, z) biểu diễn một điểm trên bề mặt đã cho. Các mặt sẽ được phân biệt với nhau bằng các bộ hàm x(), y(), z() khác nhau.
Để giới hạn khơng gian của các mặt, thơng thường người ta định lại các tọa độ biên sao cho u, v tương ứng biến đổi trong đoạn . Ví dụ, một mặt cầu với bán kính r, tâm tại gốc tọa độ cĩ thể biểu diễn bằng các phương trình sau :
x(u, v) = r sin(p u) cos(2p v) y(u, v) = r sin(p u) sin(2p v) z(u, v) = r cos(p u)
Trong đĩ u, v thay đổi trong đoạn .
Một mặt phẳng cĩ thể được xác định bằng một điểm với vector vị trí c và hai vector a, b khơng cùng phương (xem hình 5.12).
Hình 5.12 – Minh họa cách xác định mặt phẳng
Nhận xét rằng bất kì điểm nào trên mặt phẳng cũng cĩ thể được biểu diễn bằng một vector tổng sau : p(u, v) = c + au + bv. Đây chính là phương trình tham số của mặt phẳng.
Trong phương trình trên u, v cĩ thể biến đổi trong khoảng , do đĩ mặt phẳng sẽ trải dài đến vơ tận. Tuy nhiên trong các trường hợp cụ thể ta chỉ muốn dùng một phần của mặt phẳng, một hình bình hành thơi chẳng hạn. Các phần như vậy được gọi là planar patch, lúc đĩ ta cĩ thể tưởng tượng mặt phẳng như là sự ghép nối của các planar patch này.
Một planar patch được xác định bằng cách giới hạn khoảng biến đổi của các tham số u, v trong phương trình trên. Ví dụ nếu cho u, v biến đổi trong đoạn [0, 1] ta sẽ cĩ một patch như hình vẽ 5.13.
Trong hình vẽ này u, v được biến đổi trong một khoảng khơng gian gọi là khơng gian tham số (parametric space), việc ánh xạ tương ứng các giá trị u, v đã được giới hạn trên sẽ tạo ra một patch trong khơng gian tương ứng gọi là khơng gian đối tượng.
Hình 5.13 – Cách tạo ra một patch 2.1.3. Lưới đa giác (polygon meshes)
Một số hệ đồ họa cung cấp một số hàm cho phép mơ hình hĩa các đối tượng. Một mặt phẳng cĩ thể được diễn tả thơng qua một hàm như fillArea. Nhưng khi ta cần lợp nhiều planar patch liên tiếp, dùng các hàm lưới (mesh function) sẽ thuận tiện hơn. Một dạng thơng dụng của lưới đa giác là dãy các tam giác (triagle strip). Hàm này vẽ n-2 tam giác kề nhau khi biết n đỉnh. Dạng này của lưới đa giác dùng trong hầu hết các thư viện đồ họa chuẩn hiện nay như OpenGL hay DirectX. Một dạng hàm tương tự là lưới các tứ giác (quardrilateral mesh). Hàm này vẽ một lưới (n-1)x(m-1) tứ giác lồi từ dãy nxm đỉnh.
Khi đa giác được mơ tả bởi nhiều hơn ba đỉnh, các đỉnh của nĩ cĩ thể khơng đồng phẳng. Điều này cĩ thể dẫn đến các lỗi tính tốn. Một phương pháp đơn giản là phân đa giác này thành các tam giác.
Hình 5.14 - Triangle strip và quadrilateral mesh 2.2. Các đường cong và mặt cong
Hình ảnh của các đường cong và mặt cong cĩ thể được tạo ra từ một tập hợp các hàm tốn học định nghĩa các đối tượng hoặc từ một tập hợp các điểm trên đối tượng. Khi đối tượng được mơ tả bằng các hàm tốn học, thường các thư viện đồ họa cung cấp sẵn những hàm cho phép chiếu các đối tượng lên mặt phẳng hiển thị. Đối với các đường cong, các hàm này sẽ vẽ một loạt các điểm dọc theo hình chiếu của đường mơ tả bởi hàm tốn học. Đối với các mặt cong, một lưới đa giác xấp xỉ với mặt cong sẽ được tạo ra. Thường thì các hệ đồ họa tạo ra các lưới tam giác để đảm bảo tính đồng phẳng của các cạnh thuộc cùng một polygon patch.
Một đường cong hoặc mặt cong cĩ thể được diễn tả bằng phương trình tốn học dạng tham số hoặc khơng tham số. Tuy nhiên, trong đồ họa máy tính, thường thì dạng tham số sẽ thuận tiện cho xử lí hơn.
Khi đối tượng được mơ tả bởi một tập hợp các điểm rời rạc, đối tượng sẽ được hiển thị thơng qua một mặt cong xấp xỉ nào đĩ dựa trên những điểm đã cho. Các loại đường cong và mặt cong dạng spline hoặc Bezier là những đường cong và mặt cong xấp xỉ thường dùng.
Các mặt cong cĩ thể cĩ hình dạng rất phức tạp, đặc biệt khi nĩ bao gồm nhiều patch kết hợp lại với nhau. Trước tiên, chúng ta chỉ khảo sát các mặt cong khá đơn giản, kế tiếp chúng ta sẽ khảo sát các mặt phức tạp hơn.