Giáo trình kỹ thuật đồ họa máy tính phần 2

72 2 0
Giáo trình kỹ thuật đồ họa máy tính phần 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương 5: Đồ họa ba chiều Chương : ĐỒ HỌA BA CHIỀU 5.1 Tổng quan • Mục tiêu Học xong chương sinh viên cần phải nắm bắt vấn đề sau: - Thế đồ họa chiều ? - Viết chương trình vẽ hình khơng gian chiều • Kiến thức Hình giải tích hình học khơng gian : tích vơ hướng hai véc tơ Ma trận phép tốn • Tài liệu tham khảo Computer Graphics Donald Hearn, M Pauline Baker Prentice-Hall, Inc., Englewood Cliffs, New Jersey , 1986 (chapters 9, 181-233) • Nội dung cốt lõi - Trình bày cách biểu diễn đối tương chiều: biểu diễn đối tương qua mô hỉnh khung nối kết - Các phép biến đổi không gian chiều 5.2 Giới thiệu đồ họa chiều Các đối tượng giới thực phần lớn đối tượng chiều thiết bị hiển thị chiều Do vậy, muốn có hình ảnh chiều ta cần phải giả lập Chiến lược chuyển đổi bước Hình ảnh hình thành từ từ, ngày chi tiết Qui trình hiển thị ảnh chiều sau • Biến đổi từ hệ tọa độ đối tượng sang hệ tọa độ giới thực (Modelling transformation) Mỗi đối tượng mô tả hệ tọa độ riêng gọi Hệ tọa độ đối tượng Có cách mơ hình hóa đối tượng: - Solid modeling : mơ tả vật thể (kể bên trong) - Boudary representation : quan tâm đến bề mặt đối tượng Trang 88 Chương 5: Đồ họa ba chiều Các đối tượng biểu diễn mơ hình Wire-Frame Nhận thấy biểu diễn đối tượng, ta chọn gốc tọa độ đơn vị đo lường cho việc biểu diễn thuận lợi Thường người ta chuẩn hóa kích thước đối tượng biểu diễn Boudary representation cho phép xử lý nhanh cịn silid modeling cho hình ảnh đầy đủ xác thực • Loại bỏ đối tượng khơng nhìn thấy (Trivial Rejection) Loại bỏ đối tượng hoàn tồn khơng thể nhìn thấy cảnh Thao tác giúp ta lược bỏ bớt đối tượng không cần thiết giảm chi phí xử lý • Chiếu sáng đối tượng (Illumination) Gán cho đối tượng màu sắc dựa đặc tính chất tạo nên chúng nguồn sáng tồn cảnh Có nhiều mơ hình chiếu sáng tạo bóng : constant-intensity, Interpolate, • Chuyển từ word space sang eye space (Viewing Transformation) Thực phép biến đổi hệ tọa độ để đặt vị trí quan sát (viewing position) gốc tọa độ mặt phẳng quan sát (viewing plane) vị trí mong ước Hình ảnh hiển thị phụ thuộc vào vị trí quan sát góc nhìn Hệ qui chiếu có gốc đặt vị trí quan sát phù hợp với hướng nhìn thuận lợi cho xử lý thật • Loại bỏ phần nằm viewing frusturn (Clipping) Thực việc xén đối tượng cảnh để cảnh nằm gọn phần khơng gian hình chóp cụt giới hạn vùng quan sát mà ta gọi viewing frustum Viewung frustum có trục trùng với tia nhìn, kích thước giới hạn vùng ta muốn quan sát • Chiếu từ eye space xuống screen space (Projection) Thực việc chiếu cảnh chiều từ không gian quan sát xuống không gian hình Có phương pháp chiếu: - Chiếu song song - Chiếu phối cảnh Trang 89 Chương 5: Đồ họa ba chiều Khi chiếu ta phải tiến hành việc khử mặt khuất để nhận hình ảnh trung thực Khử mặt khuất cho phép xác định vị trí (x,y) hình thuộc đối tượng cảnh • Chuyển đối tượng sang dạng pixel (Rasterization) • Hiển thị đối tượng (Display) 5.3 Biểu diễn đối tượng chiều Trong đồ họa máy tính, đối tượng lập thể mơ tả bề mặt (surface) chúng Ví dụ : hình lập phương xây dựng từ sáu mặt phẳng, hình trụ xây dựng từ kết hợp mặt cong hai mặt phẳng hình cầu xây dựng từ mặt cong Thông thường để biểu diễn đối tượng bất kỳ, người ta dùng phương pháp xấp xỉ để đưa mặt dạng mặt đa giác (polygon faces) • Điểm khơng gian chiều có tọa độ (x,y,z) mơ tả vị trí khơng gian typedef struct { int x; int y; int z; } Point _3D ; • Vectơ : xác định tọa độ dx, dy, dz mô tả hướng độ dài véc tơ Véc tơ khơng có vị trí khơng gian |V|= dx + dy + dz Tích vơ hướng hai véc tơ V1* V2 = dx1dx2 + dy1dy2 + dz1dz2 Hay V1* V2 = |V1||V2| cos θ typedef struct { Trang 90 Chương 5: Đồ họa ba chiều int dx; int dy; int dz; } Vector ; • Đoạn thẳng không gian chiều: biểu diễn tổ hợp tuyến tính điểm Để biểu diễn dạng tham số đoạn thẳng, ta có : P = P1 + t*( P2 - P1 ) , ( ≤ t ≤ 1) typedef struct { Point P1; Point P2; } Segment ; • Tia (Ray) : đoạn thẳng với đầu nằm vô cực Biểu diễn dạng tham số tia : P = P1 + t*V , ( ≤ t < ∞) typedef struct { Point P1; Vector V; } Ray; • Đường thẳng (Line): đoạn thẳng với hai đầu nằm vô cực Biểu diễn dạng tham số đường thẳng P = P1 + t*V , ( ∞ ≤ t < ∞) typedef struct { Point P1; Vector V; } Line; • Đa giác (Polygon) : vùng giới hạn hạn dãy điểm đồng phẳng ( Các điểm cho theo thứ tự ngược chiều kim đồng hồ ) typedef struct { Trang 91 Chương 5: Đồ họa ba chiều Point *Points; int nPoints; } Polygon; Có thể biểu diễn mặt đa giác tập họp đỉnh thuộc tính kèm theo Khi thơng tin mặt đa giác nhập, liệu điền vào bảng (mãng liệu) dùng cho xử lý tiếp theo, hiển thị biến đổi Các bảng liệu mơ tả mặt đa giác tổ chức thành hai nhóm : bảng hình học bảng thuộc tính Các bảng lưu trữ liệu hình học chứa tọa độ đỉnh tham số cho biết định hướng không gian mặt đa giác Thơng tin thuộc tính đối tượng chứa tham số mơ tả độ suốt, tính phản xạ thuộc tính kết cấu đối tượng Một cách tổ chức thuận tiện để lưu trữ liệu hình học tạo danh sách : bảng lưu đỉnh, bảng lưu cạnh bảng lưu đa giác Trong đó: - Các giá trị tọa độ cho đỉnh đối tượng chứa bảng lưu đỉnh - Bảng cạnh chứa trỏ trỏ đến bảng đỉnh cho biết đỉnh nối với cạnh đa giác - Cuối bảng lưu đa giác chứa trỏ trỏ đến bảng lưu cạnh cho biết cạnh tạo nên đa giác • Mặt phẳng (Plane) : typedef struct { Vector N; int d; } Plane; Phương trình biểu diễn mặt phẳng có dạng : Ax + By + Cz + D = (5- 1) Trong (x,y,z) điểm mặt phẳng A, B, C, D số diễn tả thông tin không gian mặt phẳng Để xác định phương trình mặt phẳng, ta cần xác định điểm không thẳng hàng mặt phẳng Như vậy, để xác định phương trình mặt phẳng qua đa giác, ta sử dụng tọa độ đỉnh (x1,y1), (x2,y2), (x3,y3) đa giác Từ phương trình (5-1) ta có : Trang 92 Chương 5: Đồ họa ba chiều Axk + Byk + Czk + D = , k= 0,1,2,3 (5-2) Trong : A= C= y1 z1 x1 z1 y3 y3 z2 z3 B = x2 z x3 z x1 y1 x1 y1 z1 x2 y3 C = x2 y3 z2 x3 y3 x3 y3 z3 Khai triển định thức ta có : A = y1(z2 - z3) + y2(z3 - z1) + y3(z1 - z2) B = z1(x2 - x3) + z2(x3 - x1) + z3(x1 - x2) C = x1(y2 - y3) + x2(y3 - y1) + x3(y1 - y2) A = - x1(y2z3 - y3z2) - x2(y3z1 - y1z3) - x3(y1z2 - y2z1) Hướng mặt phẳng thường xác định thông qua véc tơ pháp tuyến Véc tơ pháp tuyến n = (A,B,C) (xem hình 5-1) n=(A,B,C) Hình 5.1 : Vec tơ pháp tuyến mặt phẳng • Mơ hình khung nối kết (Wireframe-Model) Một phương pháp thông dụng đơn giản để mơ hình hóa đối tượng mơ hình khung nối kết Một mơ hình khung nối kết gồm có tập đỉnh tập cạnh nối đỉnh Khi thể mơ hình này, đối tượng chiếu rỗng khơng giống thực tế Tuy nhiên, vẽ mơ hình nhanh nên người ta Trang 93 Chương 5: Đồ họa ba chiều thường dùng việc xem phác thảo đối tượng Để hoàn thiện hơn, người ta dùng kỹ thuật tạo bóng loại bỏ đường khuất, mặt khuất Với mơ hình khung nối kết, hình dạng đối tượng chiều biểu diễn hai danh sách (list) : danh sách đỉnh (vertices) danh sách cạnh (edges) nối đỉnh Danh sách đỉnh cho biết thơng tin hình học (đó vị trí đỉnh), cịn danh sách cạnh xác định thông tin kết nối (cho biết cặp đỉnh tạo cạnh) Chúng ta quan sát vật thể ba chiều ( xem hình 5-2) biểu diễn mơ hình khung nối kết sau: z Hình 5.2 : Vật thể chiều biểu diễn 10 khung nối 1 x kết y Bảng danh sách cạnh đỉnh biểu diễn vật thể Vertex List Vertex x y z 0 1 0.5 1.5 0 0 1 1 0.5 1.5 10 1 back side front side Edge 10 11 12 13 14 15 16 17 Edge List Vertex1 Vertex2 2 3 4 5 7 8 9 10 10 6 10 Trang 94 Chương 5: Đồ họa ba chiều Người ta vẽ đối tương theo mơ hình khung nối kết cách sử dụng phép chiếu song song hay phép chiếu phối cảnh giới thiệu chương 5.4 Các phép biến đổi chiều 5.4.1 Hệ tọa độ bàn tay phải - bàn tay trái • Hệ tọa độ theo qui ước bàn tay phải : để bàn tay phải cho ngón hướng theo trục z, nắm tay lại, tay chuyển động theo hướng từ trục x đến trục y • Hệ tọa tọa độ theo qui ước bàn tay trái : để bàn tay phải cho ngón hướng theo trục z, nắm tay lại, ngón tay chuyển động theo hướng từ trục x đến trục y • Hệ tọa độ (Homogeneous Coordinates) : Mỗi điểm (x,y,z) không gian Descartes biểu diễn bốn tọa độ không gian chiều thu gọn (hx,hy,hz,h) Người ta thường chọn h=1 • Các phép biến đổi tuyến tính tổ hợp phép biến đổi sau : tỉ lệ, quay, biến dạng đối xứng Các phép biến đổi tuyến tính có tính chất sau : - Gốc tọa độ điểm bất động - Ảnh đường thẳng đường thẳng - Ảnh đường thẳng song song đường thẳng song song - Bảo toàn tỉ lệ khoảng cách - Tổ hợp phép biến đổi có tính phân phối 5.4.2 • Các phép biến đổi Affine sở Phép tịnh tiến ⎛1 ⎜ ⎜0 Tr(trx, try, trz) = ⎜ ⎜ ⎜ tr ⎝ x • 0 try trz 0⎞ ⎟ 0⎟ 0⎟ ⎟ ⎟⎠ Phép biến đổi tỉ lệ ⎛ sx ⎜ ⎜0 S((sx, sy, sz) = ⎜ ⎜ ⎜0 ⎝ xy 0 0 sz 0⎞ ⎟ 0⎟ 0⎟ ⎟ ⎟⎠ Khi Sx = Sy = Sz ta có phép biến đổi đồng dạng Trang 95 Chương 5: Đồ họa ba chiều • Phép quay quanh trục Z ⎛ cos θ ⎜ ⎜ − sin θ R(z,θ) = ⎜ ⎜ ⎜ ⎝ • sin θ cos θ 0 0 0⎞ ⎟ 0⎟ 0⎟ ⎟ ⎟⎠ sin θ cos θ 0⎞ ⎟ 0⎟ 0⎟ ⎟ ⎟⎠ − sin θ 0 cos θ 0 0⎞ ⎟ 0⎟ 0⎟ ⎟ ⎟⎠ Phép quay quanh trục X ⎛1 ⎜ ⎜ cos θ R(x,θ) = ⎜ − sin θ ⎜ ⎜0 ⎝ • Phép quay quanh trục Y ⎛ cos θ ⎜ ⎜ R(y,θ) = ⎜ sin θ ⎜ ⎜ ⎝ • Cách xác định chiều dương phép quay Định nghĩa chiều quay dùng chung cho hệ tọa độ theo qui ước bàn tay phải bàn tay trái Cụ thể chiều dương định nghĩa sau : - Quay quanh truc x : từ trục dương y đến trục dương x - Quay quanh trục y : từ trục dương z đến trục dương x - Quay quanh trục x : từ trục dương x đến trục dương y • Phép đối xứng qua mặt phẳng tọa độ (yOx) : ⎛ −1 ⎜ ⎜0 Mr(x) = ⎜ ⎜ ⎜0 ⎝ 0 0 0⎞ ⎟ 0⎟ 0⎟ ⎟ ⎟⎠ (zOx) : ⎛1 ⎜ ⎜0 −1 Mr(y) = ⎜ 0 ⎜ ⎜0 ⎝ 0 0⎞ ⎟ 0⎟ 0⎟ ⎟ ⎟⎠ Trang 96 Chương 5: Đồ họa ba chiều ⎛1 ⎜ ⎜0 Mr(x) = ⎜ ⎜ ⎜0 ⎝ (xOy) • 0⎞ ⎟ 0⎟ 0⎟ ⎟ ⎟⎠ Phép đối xứng qua trục x, y z ⎛1 0 ⎜ ⎜0 −1 Mx = ⎜ 0 −1 ⎜ ⎜0 0 ⎝ 0⎞ ⎟ 0⎟ 0⎟ ⎟ ⎟⎠ ⎛−1 ⎜ ⎜0 My = ⎜ ⎜ ⎜0 ⎝ 0⎞ ⎟ 0⎟ 0⎟ ⎟ ⎟⎠ 0 0 −1 0 ⎛−1 ⎜ ⎜ −1 Mz = ⎜ 0 ⎜ ⎜0 ⎝ • 0 0 −1 0 0 0⎞ ⎟ 0⎟ 0⎟ ⎟ ⎟⎠ Phép biến dạng ⎛ ⎜ ⎜h Sh = ⎜ xy h ⎜ xz ⎜ ⎝ h yx h yz hzx hzy 0⎞ ⎟ 0⎟ 0⎟ ⎟ ⎟⎠ 5.5 Tổng kết chương - Trong đồ họa máy tính, đối tượng mơ tả bề mặt chúng Khi đó, người ta dùng phương pháp xấp xỉ để đưa bề mặt dạng mặt đa giác - Lưu ý sử dụng phương pháp mơ hình khung nối kết, bao gồm tập đỉnh tập cạnh nối đỉnh Phương pháp nhanh có khuyết điểm không giống thực tế Để cải thiện, cần dùng kỹ thuật tạo bóng khử mặt khuất, đường khuất Trang 97 Chương 7: Khử mặt kuất đường khuất Vừa phép kiểm tra phát cho mặt nằm chồng, ta biết mặt khơng nằm phía sau S Vì ta chuyển đến mặt chồng S Nếu tất mặt mặt nằm chồng vượt qua phép kiểm tra trên, ta xếp S vẽ Phép kiểm tra thực hai phần: Chúng ta kiểm tra nằm chồng theo hướng x, sau kiểm tra nằm chồng theo hướng y Nếu hai hướng phát nằm chồng, hai mặt phẳng khơng che khuất Một ví dụ hai mặt có nằm chồng theo hướng z không chồng theo hướng x cho hình 7-10 Chúng ta thực phép kiểm tra cách tọa độ tất đỉnh S vào phương trình mặt mặt nằm chồng kiểm tra dấu kết Giả sử mặt nằm chồng có hệ số A’, B’, C’, D’ Nếu A’x + B’y + C’z + D’ > với đỉnh có tọa độ (x, y, z) S, mặt S “phía ngồi” mặt nằm chồng S’ (xem hình 711) Như đề cập trước đây, hệ số A’, B’, C’, D’ phải xác định trước để pháp vector mặt nằm chồng S’ xa khỏi mặt phẳng quan sát zv zv S S S’ S’ xv xv Hình 7-11 Mặt S hồn tồn “phía ngồi” mặt nằm chồng S’ nhìn từ mặt quan sát xy Hình 7-12 Mặt nằm chồng S’ hồn tồn “phía trong” mặt S, nhìn từ mặt quan sát xy Phép kiểm tra thực dùng hệ số A, B, C, D mặt S Nếu tọa độ (x, y, z) tất đỉnh mặt nằm chồng S’ thỏa điều kiện Ax + By + Cz + D < 0, mặt nằm chồng S’ “phía trong” mặt S (cung cấp pháp vector mặt S hướng xa mặt phẳng quang sát) Hình 7-12 trình bày mặt nằm chồng S’ thỏa phép kiểm tra Trong ví dụ này, mặt S khơng “phía ngồi” S’ (phép kiểm tra không đúng) Trang 145 Chương 7: Khử mặt kuất đường khuất Nếu tất phép kiểm tra từ đến thất bại (sai), thử đến phép kiểm tra cách kiểm tra cắt cạnh biên hai mặt, dùng phương trình đường thẳng mặt xy Như minh họa hình 7-13, hai mặt cắt khơng cắt chí không gian bao quanh chồng theo hướng x, y, z (xem hình 7-13) Hình 7-13 Hai mặt với biên chữ nhật nằm chồng mặt xy Các mặt không cắt Các mặt cắt Nếu tất bốn phép kiểm tra thất bại với mặt nằm chồng cụ thể S’, ta đổi chỗ hai mặt S S’ cho danh sách Một ví dụ hai mặt xếp lại với thủ tục cho hình 7-14 Tuy nhiên, ta khơng biết ta tìm gặp mặt xa tính từ mặt phẳng quan sát chưa Hình 7-15 minh họa trường hợp mà đổi chổ S S’’ với Nhưng S’’che khuất phần S’ (nhìn lên từ mặt xy), cần đổi chổ S’’ S’ với để có ba mặt hợp lý theo độ sâu Do đó, cần lặp lại trình kiểm tra cho mặt, vừa lại danh sách zv zv S’ S S S’’ xv Hình 7-14 Mặt S có độ sâu z lớn S’ xv Hình 7-15 Ba mặt ban đầu theo thứ tự độ sâu z : S, Thuật tốn vừa phác thảo vào vịng lặp vơ tận hai hay nhiều mặt che khuất lẫn cách luân phiên hình 7-7 (xem hình 7-7) Trang 146 Chương 7: Khử mặt kuất đường khuất Trong trường hợp thế, thuật toán lặp lặp lại khơng ngừng việc đổi chỗ vị trí mặt nằm chồng Để tránh vòng lặp thế, đặt cờ trạng thái cho mặt vừa đến vị trí xa để khơng bị di chuyển lại Nếu có cố gắng làm để đổi chỗ mặt lần thứ hai, ta chia làm hai phần đường cắt (đường giao) hai mặt Mặt ban đầu sau thay hai mặt mới, ta lại tiếp tục trình xử lý trước 7.6 Phương pháp phân chia vùng (Area- Subdivision Method) Kỹ thuật khử mặt khuất hiệu cho phương pháp không gian ảnh, phương pháp khơng gian đối tượng dùng để thực việc xếp mặt theo độ sâu Phương pháp phân chia vùng tận dụng thuận lợi vùng cố kết ảnh cách xác định vùng quan sát để tách chúng làm nhiều phần nhỏ, phần xem mặt đơn lẻ Chúng ta áp dụng phương pháp cách phân chia thành cơng tồn vùng quan sát thành hình chữ nhật lúc nhỏ Hình 7-16 Các phần chia thực thành công với phép chia vùng nhỏ hình chiếu phần mặt đơn lẻ nhìn thấy được, khơng thể tiếp tục phân chia Để thực phương pháp này, ta cần xây dựng phép kiểm tra để xác định nhanh chóng vùng phần mặt đơn lẻ cho ta biết vùng phức tạp để phân tích bình thường Bắt đầu với nhìn tổng thể, ta áp dụng phép kiểm tra để xác định xem có nên phân chia tồn vùng thành hình chữ nhật nhỏ khơng Nếu phép kiểm tra mặt quan sát đủ phức tạp, ta phân chia Kế tiếp, áp dụng phép kiểm tra đến vùng nhỏ hơn, chia nhỏ vùng phép kiểm tra xác định tính nhìn thấy mặt đơn chưa chắn Chúng ta tiếp tục trình đến phần phân chia dễ dàng phân tích mặt đơn lẻ đến chúng thu giảm kích thước thành pixel Trang 147 Chương 7: Khử mặt kuất đường khuất Một cách để phân chia vùng thành cơng chia kích thước làm 2, hình 7-16 Một vùng quan sát với độ phân giải 1024x1024 chia 10 lần trước phần chia giảm thành điểm Các phép kiểm tra để xác định tính nhìn thấy mặt đơn phạm vi vùng định thực cách so sánh mặt với biên vùng Có bốn khả xảy xem xét mối quan hệ mặt với biên vùng định Ta mơ tả đặc điểm quan hệ theo cách sau (xem hình 7-17): Mặt bao quanh (surrounding surface) mặt hoàn toàn bao quanh vùng Mặt nằm chồng (overlapping surface) mặt có phần nằm phần nằm vùng Mặt bên (inside surface) mặt hoàn toàn nằm bên vùng Mặt bên (outside surface) mặt hoàn toàn nằm bên ngồi vùng Hình 7-17 Các quan hệ xảy mặt đa giác vùng chữ nhật Mặt bao quanh Mặt nằm chồng Mặt bên Mặt bên Các phép kiểm tra để xác định tính nhìn thấy mặt phạm vị vùng đề cập giới hạn bốn loại Khơng có phân chia thêm cho vùng điều kiện sau (true): Tất mặt nằm bên vùng Chỉ mặt bên trong, mặt nằm chồng mặt bao quanh vùng Một mặt bao quanh che khuất tất mặt khác phạm vi biên vùng Kiểm tra thực cách kiểm tra biên chữ nhật bao quanh mặt với biên vùng Kiểm tra dùng biên chữ nhật mặt Trang 148 Chương 7: Khử mặt kuất đường khuất xy để xác định mặt nằm Với kiểu mặt khác, biên chữ nhật dùng bước kiểm tra ban đầu Nếu biên chữ nhật cắt vùng theo cách đó, kiểm tra thực để xác định xem mặt là: mặt bao quanh, mặt nằm chồng, hay mặt bên Nếu xác định mặt bên trong, mặt nằm chồng, hay mặt bao quanh, giá trị độ sáng pixel chuyển đến vùng thích hợp vùng đệm khung Một phương pháp để thực bước xếp mặt dựa theo độ sâu nhỏ chúng Sau đó, với mặt bao quanh, ta tính giá trị z lớn vùng xem xét Nếu giá trị lớn z mặt (trong số mặt mặt bao quanh) nhỏ giá trị z nhỏ mặt lại vùng, kiểm tra thỏa Hình 7-18 trình bày ví dụ chứa điều kiện phương pháp zv z’’min z’min zmax xv Vùng xem xét Hình 7-18 Một mặt bao quanh với độ sâu lớn zmax (xét vùng quan sát) che khuất tất mặt mà độ sâu nhỏ xmin chúng lớn zmax Một phương pháp khác để thực kiểm tra mà không cần đến xếp độ sâu dùng phương trình mặt phẳng để tính giá trị z bốn đỉnh vùng cho tất mặt bao quanh, mặt nằm chồng, hay mặt bên Nếu giá trị z số mặt bao quanh mà nhỏ giá trị z mặt lại, kiểm tra Sau vùng tô với giá trị độ sáng mặt bao quanh Trong vài trường hợp, hai phương pháp cho kiểm tra thất bại để xác định mặt bao quanh che khuất tất mặt lại khác Việc kiểm tra thêm thực để xác định mặt đơn che phủ vùng, nhiên, thuật toán Trang 149 Chương 7: Khử mặt kuất đường khuất nhanh ta phân chia vùng tiếp tục làm kiểm tra phức tạp Khi mặt bên mặt bao quanh vừa xác định cho vùng, chúng cịn lại mặt bên ngồi bao quanh cho tất phần phân chia vùng Hơn nữa, vài mặt bên mặt nằm chồng chờ để bị loại bỏ trình phân chia tiếp tục, để vùng trở nên dễ dàng cho phân tích Trong trường hợp đến giới hạn, kích thước vùng chia cịn pixel, ta đơn giản tính độ sâu mặt có liên quan điểm chuyển giá trị độ sáng mặt gần vào vùng đệm khung yv • zv Vùng A • S • Hình 7-19 Vùng A phân chia thành A1 A2 cách dùng biên mặt S mặt phẳng chiếu A2 A1 xv Như thay đổi lên trình phân chia bản, ta phân chia vùng dọc theo biên mặt thay chia chúng làm Nếu mặt vừa theo độ sâu nhỏ nhất, ta dùng mặt có giá trị z nhỏ để phân chia vùng cho Hình 7-19 minh họa phương pháp để phân chia vùng Hình chiếu biên mặt S dùng để phân chia vùng ban đầu thành phần A1 A2 Mặt S sau trở thành mặt bao quanh A1 phép kiểm tra áp dụng để xác định xem việc phân chia thêm có cần thiết khơng Trong trường hợp tổng qt, phân chia cần dùng tiếp cận này, nhiên nhiều xử lý thêm cần để chia vùng phân tích mối liên hệ mặt với biên vùng chia 7.7 Các phương pháp Octree (Octree Methods) Khi biểu diễn octree dùng cho không gian quan sát, việc khử mặt khuất thực cách chiếu nút octree lên mặt quan sát theo thứ tự từ trước sau Trong hình 7-20, mặt phía trước vùng khơng gian (mặt hướng phía Trang 150 Chương 7: Khử mặt kuất đường khuất người quan sát) hình thành với phần tám (octant) 0, 1, 2, Mặt trước octant nhìn thấy người quan sát Bất kỳ mặt hướng phía sau octant phía trước octant đằng sau (4, 5, 6, 7) bị che khuất mặt phía trước Các mặt phía sau bị loại bỏ, với hướng quan sát hình 7-20, cách xử lý phần tử liệu nút octree theo thứ tự 0, 1, 2, 3, 4, Hướng quan sát Các Octant đánh số vùng 5, 6, Điều tạo kết du hành theo độ sâu octree, để octant 0, 1, 2, toàn vùng viếng thăm trước octant 4, 5, 6, Hình 7-20 Các đối tượng octant 0, 1, 2, che khuất octant phía sau (4, 5, 6, 7) hướng quan sát hình Tương tự, bốn octant trước octant viếng thăm trước bốn octant phía sau Cuộc du hành Hình 7-21 Sự phân chia octant cho vùng không gian mặt phần tư tương ứng octree, vùng pixel vùng đệm khung tương chia octant Khi giá trị màu gặp nút octree tiếp tục theo thứ tự cho phần Các octant không gian ứng với nút gán giá trị màu khơng giá trị lưu trước vùng Khơng nạp vùng trống rỗng Bất kỳ nút phát bị che khuất hồn tồn bị loại bỏ khỏi xử lý tương lai, để các khơng Các quadrant (góc 1/4) mặt phẳng quan sát truy cập vào Các quang cảnh khác đối tượng biểu diễn octree đạt cách áp dụng phép biến đổi đến biểu diễn octree để làm thay đổi đối tượng theo hướng quan sát Ta giả sử biểu diễn octree xây dựng cho octant 0, 1, 2, vùng hình thành nên mặt phía trước (xem hình 7-20) Trang 151 Chương 7: Khử mặt kuất đường khuất Một phương pháp để hiển thị octree từ trước sau ánh xạ octree vào quadtree vùng nhìn thấy cách duyệt qua nút octree từ trước sau q trình đệ quy Sau biểu diễn quadtree mặt nhìn thấy được nạp vào vùng đệm khung Hình 7-21 mơ tả octant vùng không gian quadtree tương ứng mặt phẳng quan sát Các phần tạo thành quadtree lấy từ octant Các giá trị màu góc phần tư (quadrant 1) có từ mặt octant 5, giá trị hai quadrant lại sinh từ cặp octant thẳng hàng với quadrant Việc xử lý đệ quy nút octree trình bày thủ tục convert_oct_to_quad, nơi nhận vào mô tả octree tạo biểu diễn quadtree cho mặt nhìn thấy vùng Trong hầu hết trường hợp, octant phía trước phía sau phải xem xét để xác định màu cho quadrant Tuy nhiên, ta bỏ qua q trình xử lý octant phía sau octant phía trước tơ đồng với vài màu Đối với vùng không đồng nhất, thủ tục gọi đệ quy, với đối số – octant không đồng nút quadtree tạo Nếu octant phía trước rỗng, cần xử lý octant phía sau Ngược lại, hai lời gọi đệ quy làm, cho octant phía sau cho octant phía trước type oct_node_ptr =^ oct_node; oct_entry = record case homogeneous: boolean of true : (color : integer); false : (child : oct_node_ptr) end; {record} oct_node = array [0 7] of oct_entry; quad_node_ptr = ^ quad_node; quad_entry = record case homogeneous: boolean of true : (color : integer); false : (child : oct_node_ptr) end; {record} Trang 152 Chương 7: Khử mặt kuất đường khuất quad_node = array[0 3] of quad_entry; var newquadtree : quad_node_ptr; backcolor: integer; {Giả sử quang cảnh phía trước octree (với octant 0, 1, 2, phía trước) và, biểu diễn hiển thị, biến đổi thành quatree Nhận octree input, nơi mà phần tử octree giá trị màu (homogeneous = true octant tô với màu này) trỏ đến nút octant (homogeneous = false).} procedure convert_oct_to_quad(octree: oct_node; var quadtree: quad_node); var k: integer; begin for k:=0 to begin quadtree[k].homogeneous:=true; if (octree[k].color>-1) then {octant trước đầy} quadtree[k].color:= octree[k].color else {octant trước rỗng} if octree[k+4].homogeneous then if (octree[k+4].color > -1) then {trước rỗng, sau đầy} quadtree[k].color:=octree[k+4].color else {trước sau rỗng} quadtree[k].color:=backcolor else begin {trước rỗng, sau không đồng nhất} quadtree[k].homogeneous:=flase; new(newquadtree); quadtree[k].child: = newquadtree; convert_oct_to_quad(octree[k+4].child^, newquadtree^); Trang 153 Chương 7: Khử mặt kuất đường khuất end else begin {trước không đồng nhất, sau không biết} quadtree[k].homogeneous:=false; new(newquadtree); quadtree[k].child:= newquadtree; convert_oct_to_quad(octree[k+4].child^, newquadtree^); convert_oct_to_quad(octree[k].child^, newquadtree^); end; end; {for} end; 7.8 Loại bỏ đường bị che khuất Khi phác họa đối tượng hiển thị, phương pháp khử đường khuất dùng đến để loại bỏ viền đối tượng, bị che khuất mặt gần mặt phẳng quan sát Các phương pháp để loại bỏ đường khuất phát triển cách xem xét viền đối tượng cách trực tiếp hay cách chỉnh sửa lại phương pháp khử mặt khuất Hình 7-22 Phần đoạn thẳng bị khuất (nét đứt) đường thẳng: (a) qua sau mặt (b) xuyên qua mặt che phía đâm Một tiếp cận trực tiếp để loại bỏ đường khuất so sánh đường với mặt ảnh Quá trình tương tự clipping đường cửa sổ có hình dạng bất kỳ, khác chổ muốn cắt bỏ phần bị che khuất mặt Đối với đường, giá trị độ sâu so sánh với mặt để xác định xem phần đoạn thẳng khơng nhìn thấy Chúng ta dùng phương pháp cố kết để xác định phần bị che khuất mà khơng cần kiểm tra tồn vị trí tọa độ Nếu hai giao điểm đường thẳng với hình chiếu biên bề mặt có độ sâu lớn độ sâu mặt điểm này, đoạn thẳng giao điểm hoàn Trang 154 Chương 7: Khử mặt kuất đường khuất tồn bị che khuất, hình 7-22 (a) Khi đường thẳng có độ sâu lớn độ sâu giao điểm với biên có độ sâu nhỏ độ sâu mặt giao điểm với biên lại, đường thẳng phải xuyên qua mặt hình 7-22 (b) Trong trường hợp này, tính tọa độ giao điểm đường với mặt cách dùng phương trình mặt hiển thị phần nhìn thấy đường thẳng Vài phương pháp khử mặt khuất dễ dàng áp dụng để khử đường khuất Dùng phương pháp mặt sau (back-face), nhận biết mặt sau đối tượng hiển thị biên mặt nhìn thấy Với phương pháp xếp theo độ sâu, mặt vẽ vào vùng đệm làm tươi để phần bên mặt có độ sáng nền, biên có độ sáng độ sáng vẽ Bằng cách xử lý mặt từ sau đến trước, đường khuất bị xóa mặt gần Phương pháp chia vùng áp dụng để khử đường khuất cách hiển thị biên mặt nhìn thấy Các phương pháp scan-line dùng để hiển thị đường nhìn thấy cách bố trí điểm dọc theo đường quét, điểm trùng với biên mặt nhìn thấy Bất kỳ phương pháp khử mặt khuất dùng đường quét thay đổi thành phương pháp khử đường khuất theo cách tương tự (xem hình 7-23) •V2 Hình 7-23 Các bảng liệu hình học cho đối tượng ba chiều biểu diễn hai mặt phẳng, hình thành với sáu cạnh năm đỉnh E2 E1 S V1 • E2 E6 S2 •V5 • V3 E6 •V VERTEX TABLE V1: x1, y1, z1 V2: x2, y2, z2 V3: x3, y3, z3 V4: x4, y4, z4 V5: x5, y5, z5 EDGE TABLE E1: V1, V2, S1 E2: V2, V3, S1, S2 E3: V3, V1, S1 E4: V3, V4, S2 E5: V4, V5, S2 E6: V5, V2, S2 POLYGON TABLE S1: E1, E2, E3 S2: E2, E4, E5, E6 Trang 155 Chương 7: Khử mặt kuất đường khuất 7.9 Tổng kết chương So sánh phương pháp khử mặt khuất Hiệu phương pháp khử mặt khuất phụ thuộc vào đặc tính ứng dụng cụ thể Nếu mặt ảnh nằm trải hướng z để có nằm chồng theo độ sâu, phương pháp xếp theo độ sâu tốt Với ảnh có mặt nằm tách biệt theo chiều ngang, phương pháp scan-line phân chia vùng lựa chọn tốt Trong phương pháp chọn này, kỹ thuật xếp cố kết đem đến thuận lợi thuộc tính tự nhiên ảnh Vì xếp cố kết quan trọng đến hiệu toàn diện phương pháp khử mặt khuất, kỹ thuật để thực thao tác cần chọn lựa cẩn thận Khi đối tượng biết theo thứ tự xác, danh sách động chứa cạnh bảng cạnh dùng phương pháp scan-line, xếp bubble sort hiệu để thực việc đổi chỗ Tương tự, kỹ thuật cố kết áp dụng để quét đường, vùng, hay khung (frame) công cụ hữu hiệu làm tăng hiệu phương pháp khử mặt khuất Như quy tắc tổng quát, phương pháp xếp theo độ sâu tiếp cận có hiệu cao cho ảnh có vài mặt Điều ảnh thường có vài mặt nằm chồng theo độ sâu Phương pháp scan-line thực tốt ảnh chứa mặt Dù phương pháp scan-line hay xếp theo độ sâu dùng hiệu cho ảnh có đến vài ngàn mặt Với ảnh có vài ngàn mặt, tiếp cận vùng đệm độ sâu octree thực tốt Phương pháp vùng đệm độ sâu có thời gian xử lý hằng, độc lập với số lượng mặt ảnh Điều kích thước vùng mặt giảm số lượng mặt ảnh tăng Do đó, cách tương đối, phương pháp xếp theo độ sâu thể thực ảnh đơn giản thực hiệu ảnh phức tạp Tiếp cận đơn giản để cài đặt, nhiên, cần nhiều nhớ tất phương pháp khác Vì lý này, phương pháp khác, octree phân chia vùng dùng cho ảnh có nhiều mặt Khi phương pháp octree dùng hệ thống, việc xử lý loại bỏ mặt khuất nhanh đơn giản Chỉ cần dùng phép cộng trừ, khơng cần xếp tìm giao điểm Một thuận lợi khác octree chúng lưu nhiều mặt Trang 156 Chương 7: Khử mặt kuất đường khuất Tồn hình thể ba chiều đối tượng hiển thị, điều làm cho phương pháp octree hữu ích để thu lát cắt hình thể ba chiều Ta kết hợp cài đặt phương pháp khử mặt khuất khác theo cách khác Hơn nữa, thuật toán cài đặt phần cứng, hệ thống xử lý song song đặc biệt tận dụng để làm tăng hiệu phương pháp Các hệ thống phần cứng đặt biệt thường dùng tốc độ xử lý xem quan trọng, ví dụ, việc tạo hình ảnh động mơ bay 7.10 Bài tập chương Phát triển thủ tục, dựa kỹ thuật khử mặt sau, để xác định tất mặt trước khối đa diện lồi với mặt có màu khác liên hệ đến mặt quan sát Giả sử đối tượng định nghĩa hệ quan sát bàn tay trái với mặt xy dùng làm mặt quan sát Cài đặt thủ tục vào chương trình để chiếu trực giao mặt nhìn thấy đối tượng lên cửa sổ mặt phẳng quan sát Để đơn giản, giả sử tất phần đối tượng nằm phía trước mặt phẳng quan sát Ánh xạ cửa sổ lên vùng quan sát hình để hiển thị Cài đặt thủ tục vào chương trình để tạo hình chiếu phối cảnh mặt nhìn thấy đối tượng lên cửa sổ mặt phẳng quan sát Để đơn giản, giả sử đối tượng nằm phía trước mặt phẳng quan sát Ánh xạ cửa sổ lên vùng quan sát hình để hiển thị Viết chương trình để cài đặt thủ tục cho ứng dụng động, quay đối tượng cách tăng dần xung quanh trục, đâm xuyên qua đối tượng song song với với mặt phẳng quan sát Giả sử đối tượng nằm hồn tồn phía trước mặt phẳng quan sát Dùng phép chiếu song song trực giao để ánh xạ thành cơng ảnh lên hình Dùng phương pháp vùng đệm độ sâu để hiển thị mặt nhìn thấy đối tượng bất kỳ, định nghĩa hệ tọa độ chuẩn phía trước vùng quan sát Các phương trình (7-4) (7-5) dùng để thu giá trị độ sâu cho tất điểm mặt độ sâu khởi tạo vừa Trang 157 Chương 7: Khử mặt kuất đường khuất xác định Sự địi hỏi khơng gian lưu trữ cho vùng đệm độ sâu xác định từ định nghĩa đối tượng để hiển thị? Phát triển chương trình cài đặt thuật tốn scan-line để hiển thị mặt nhìn thấy đối tượng định nghĩa nằm trước vùng quan sát Dùng bảng đa giác bảng cạnh (polygon table, edge table) để lưu trữ định nghĩa đối tượng, dùng kỹ thuật cố kết để tính điểm dọc theo đường quét Cài đặt chương trình để hiển thị mặt nhìn thấy khối đa diện lồi, dùng thuật toán họa sĩ (painter’s algorithm) Tức là, bề mặt phải theo độ sâu vẽ lên hình từ sau đến trước Mở rộng chương trình để thị đối tượng định nghĩa với mặt phẳng, dùng kiểm tra xếp độ sâu (depth-sorting checks) để có mặt theo thứ tự hợp lý Cho ví dụ trường hợp mà hai phương pháp thảo luận kiểm tra thuật toán phân chia vùng thất bại để từ cách đắn mặt bao quanh che khuất tất mặt 10 Phát triển thuật tốn kiểm tra mặt cho tương tác với vùng chữ nhật để định xem mặt bao quanh, nằm chồng, bên trong, hay nằm 11 Mở rộng phương pháp tập 10 thành thuật toán để sinh biểu diễn quadtree cho mặt nhìn thấy đối tượng cách áp dụng kiểm tra vùng (area-subdivision tests) để xác định giá trị phần tử quadtree 12 Cài đặt thuật toán để nạp biểu diễn quadtree tập 11 thành đường quét (raster) để hiển thị 13 Viết chương trình lên hệ thống bạn để hiển thị biểu diễn octree cho đối tượng để mặt khuất bị loại bỏ 14 Phát triển thuật toán để loại bỏ đường khuất cách so sánh đường ảnh với mặt Trang 158 Chương 7: Khử mặt kuất đường khuất 15 Thảo luận làm việc tháo bỏ đường khuất thực với phương pháp khử mặt khuất khác 16 Cài đặt thủ tục để hiển thị cạnh bị che khuất đối tượng chứa mặt phẳng thành đường nét đứt HẾT Trang 159

Ngày đăng: 15/11/2023, 12:46

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan