Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 62 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
62
Dung lượng
2,03 MB
Nội dung
Chương 6: Quan sát ảnh ba chiều Chương : QUAN SÁT ẢNH BA CHIỀU 6.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: - Cơ chế phép chiếu - Các thao tác liên quan đến phép biến đổi cách quan sát - Kỹ thuật quan sát ảnh chiều • Kiến thức Kiến thức toán học : khái niệm vị trí tương đối đường thẳng mặt phẳng hình học khơng gian • Tài liệu tham khảo Computer Graphics Donald Hearn, M Pauline Baker Prentice-Hall, Inc., Englewood Cliffs, New Jersey , 1986 (chapters 12, 235-257) • Nội dung cốt lõi - Khái niệm phép chiếu - Phép chiếu song song - Phép chiếu phối cảnh - Biến đổi hệ tọa độ quan sát - Lập trình xem ảnh chiều 6.2 Các phép chiếu Trong đồ họa hai chiều, thao tác quan sát biến đổi điểm hai chiều mặt phẳng tọa độ giới thực thành điểm hai chiều mặt phẳng hệ tọa độ thiết bị Sự định nghĩa đối tượng, bị cắt cửa sổ, ánh xạ vào vùng quan sát Các hệ tọa độ thiết bị chuẩn hóa sau biến đổi sang hệ tọa độ thiết bị, đối tượng hiển thị lên thiết bị kết xuất Đối với đồ họa ba chiều, việc làm phức tạp chút, có vài chọn lựa để quan sát ảnh Chúng ta quan sát ảnh từ phía trước, từ phía trên, từ phía sau Hoặc tạo quang cảnh thấy đứng trung tâm Trang 98 Chương 6: Quan sát ảnh ba chiều nhóm đối tượng Ngồi ra, mơ tả đối tượng ba chiều phải chiếu lên bề mặt quan sát thiết bị xuất Trong chương này, trước hết thảo luận chế phép chiếu Sau đó, thao tác liên quan đến phép biến đổi cách quan sát, đầy đủ kỹ thuật quan sát ảnh ba chiều phát triển Có hai phương pháp để chiếu đối tượng ba chiều lên bề mặt quan sát hai chiều Tất điểm đối tượng chiếu lên bề mặt theo đường thẳng song song, điểm chiếu theo đường hội tụ điểm gọi tâm chiếu (the center of projection) Hai phương pháp gọi phép chiếu song song (parallel projection) phép chiếu phối cảnh (perspective projection) (xem hình 6-1) Trong hai trường hợp, giao điểm đường chiếu với bề mặt quan sát xác định tọa điểm điểm chiếu lên mặt phẳng chiếu Chúng ta giả sử mặt phẳng chiếu mặt z = hệ tọa độ bàn tay trái (left-handed coordinate system) (xem hình 6-2) P2 • P’ • P1• P2 • Mặt phẳng chiếu Mặt phẳng chiếu • P1• P’•1 P’2 P’1• (a) Phép chiếu song song • Tâm chiếu (b) Phép chiếu phối cảnh Hình 6-1 Hai phương pháp chiếu đoạn thẳng lên bề mặt mặt phẳng chiếu y Hình 6-2 Một bề mặt quan sát định nghĩa mặt z=0 hệ tọa độ bàn tay trái z x Bề mặt quan sát Trang 99 Chương 6: Quan sát ảnh ba chiều Phép chiếu song song bảo tồn mối quan hệ chiều đối tượng, kỹ thuật dùng việc phác thảo để tạo vẽ tỷ lệ đối tượng ba chiều Phương pháp dùng để thu hình ảnh xác phía khác đối tượng Tuy nhiên, phép chiếu song song khơng cho hình ảnh thực tế đối tượng ba chiều Ngược lại, phép chiếu phối cảnh tạo hình ảnh thực khơng bảo tồn chiều liên hệ Các đường xa chiếu nhỏ đường gần mặt phẳng chiếu, hình 6-3 (xem hình 6-3) Tâm chiếu Hình 6-3 Hai đoạn thẳng dài nhau, phép chiếu phối cảnh, đoạn xa mặt phẳng chiếu có kích thước nhỏ 6.2.1 Mặt phẳng chiếu Các phép chiếu song song Các hình ảnh hình thành phép chiếu song song xác định dựa vào góc hợp hướng phép chiếu hợp với mặt phẳng chiếu Khi hướng phép chiếu vng góc với mặt phẳng, ta có phép chiếu trực giao (hay phép chiếu vng góc - orthographic projection) Một phép chiếu khơng vng góc với mặt phẳng chiếu gọi phép chiếu xiên (oblique projection) Các phép chiếu trực giao dùng để tạo quang cảnh nhìn từ phía trước, bên sườn, đỉnh đối tượng (xem hình 6-4) Quang cảnh phía trước, bên sườn, phía sau đối tượng gọi “mặt chiếu” (elevation), quang cảnh phía gọi “mặt phẳng” (plane) Các vẽ kỹ thuật thường dùng phép chiếu trực giao này, chiều dài góc miêu tả xác đo từ vẽ Trang 100 Chương 6: Quan sát ảnh ba chiều Quang cảnh đỉnh (Top View) Hình 6-4 Ba phép chiếu trực giao đối tượng Quang cảnh bên sườn (SideView) Quang cảnh phía trước (Front View) Chúng ta xây dựng phép chiếu trực giao để quan sát nhiều mặt đối tượng Các quang cảnh gọi phép chiếu trực giao trục lượng học (axonometric orthographic projection) Hầu hết phép chiếu trục lượng học dùng phép chiếu kích thước (isometric projection) Một phép chiếu kích thước thực việc xếp song song mặt phẳng chiếu mà cắt trục tọa độ nơi đối tượng định nghĩa (được gọi trục chính) khoảng cách từ ảnh gốc Hình 6-5 trình bày phép chiếu kích thước Có tám vị trí, tám mặt, có kích thước Tất ba trục vẽ thu gọn phép chiếu kích thước để kích thước liên hệ đối tượng bảo tồn Đây không trường hợp phép chiếu trực giao trục lượng học tổng quát, mà hệ số tỷ lệ theo ba trục khác Các phương trình biến đổi để thực phép chiếu song song trực giao dễ hiểu Đối với điểm (x, y, z), điểm chiếu (xp, yp, xp) bề mặt chiếu tính sau: xp = x, yp = y, zp = (6-1) Trang 101 Chương 6: Quan sát ảnh ba chiều Hình 6-5 Phép chiếu kích thước đối tượng lên bề mặt quan sát y x Mặt phẳng chiếu (Projection plane) z Một phép chiếu xiên đạt việc chiếu điểm theo đường thẳng song song, đường thẳng không vuông góc với mặt phẳng chiếu Hình 6-6 trình bày hình chiếu xiên điểm (x, y, z) theo đường thẳng chiếu đến vị trí (xp, yp) Các tọa độ chiếu trực giao mặt phẳng chiếu (x, y) Đường thẳng phép chiếu xiên tạo góc α với đường thẳng mặt phẳng chiếu (đây đường nối điểm (xp, yp) với điểm (x, y)) Đường này, có chiều dài L, hợp góc φ với phương ngang mặt phẳng chiếu Chúng ta diễn tả tọa độ chiếu qua số hạng x, y, L, φ: xp = x + L cosφ (6-2) yp = y + L sinφ Hình 6-6 Phép chiếu vng góc điểm (x, y, z) thành điểm (xp, yp) lên mặt phẳng chiếu z y (x, y, z) • α (xp, yp) L φ x (x,y) Mặt phẳng chiếu Phương chiếu định nghĩa việc chọn giá trị cho góc α φ Các chọn lựa thơng thường cho góc φ 30o 45o, góc hiển thị quang cảnh mặt trước, bên sườn, đỉnh (hoặc mặt trước, bên sườn, đáy) đối Trang 102 Chương 6: Quan sát ảnh ba chiều tượng Chiều dài L hàm tọa dộ z, tính tham số từ thành phần liên quan tan α = z = L1 L (6-3) L1 chiều dài đường chiếu từ (x, y) đến (xp, yp) z = Từ phương trình 6-3, có L = z L1 (6-4) phương trình phép chiếu xiên 6-2 viết lại sau xp = x + z(L1 cosφ) (6-5) yp = y + z(L1 sinφ) Ma trận biến đổi để tạo việc chiếu song song viết sau ⎡ ⎢ Pparallel = ⎢ ⎢ L1 cos ϕ ⎢ ⎣ 0 L1 sin ϕ 0 0 0⎤ 0⎥⎥ 0⎥ ⎥ 1⎦ (6-6) Một phép chiếu trực giao đạt L1 = (xảy góc chiếu α=90o) Các phép chiếu xiên sinh với giá trị L1 khác khơng Ma trận chiếu 6-6 có cấu trúc tương tự ma trận phép làm biến dạng theo trục z Thực tế, kết ma trận chiếu làm biến dạng mặt phẳng z chiếu chúng lên mặt phẳng quan sát Các giá trị tọa độ x y mặt z bị thay đổi hệ số tỷ lệ đến giá trị z mặt phẳng để góc, khoảng cách, đường song song mặt phẳng chiếu xác Hiệu thể hình 6-7, mặt sau hình hộp bị biến dạng bị nằm đè mặt trước phép chiếu đến bề mặt quan sát Một cạnh hình hộp, nối mặt trước với mặt sau, chiếu thành đoạn chiều dài L1, hợp thành góc φ với đường ngang mặt phẳng chiếu Hình 6-7 Phép chiếu xiên hình hộp lên bề mặt quan sát mặt y z Trang 103 L1 B B Chương 6: Quan sát ảnh ba chiều Hai góc dùng phổ biến phép chiếu xiên góc có tgφ =1 tgφ=2 Trường hợp đầu, φ = 45o quang cảnh đạt được gọi phép chiếu cavalier Tất đường vng góc v ới mặt phẳng chiếu chiếu với chiều dài khơng thay đổi Các ví dụ phép chiếu cavalier hình lập phương cho hình 6-8 Hình 6-8 Phép chiếu cavalier hình lập phương lên bề mặt chiếu với hai giá trị góc φ Độ sâu phép chiếu với chiều rộng chiều cao φ=45o (a) φ=30o (b) Khi góc chiếu đuợc chọn để tgφ = 2, kết quang cảnh gọi phép chiếu cabinet Góc phép chiếu xấp xỉ 63.4o làm cho đường chiếu vng góc với bề mặt chiếu chiếu chiều dài chúng Các phép chiếu cabinet cho hình ảnh thực phép chiếu cavalier thu giảm chiều dài đường song song Hình 6-9 trình bày phép chiếu cabinet cho hình lập phương Trang 104 Chương 6: Quan sát ảnh ba chiều Hình 6-9 Phép chiếu cabinet hình lập phương lên bề mặt chiếu với hai giá trị góc φ Độ sâu phép chiếu 1/2 chiều rộng chiều cao φ=45o φ=30o (a) 6.2.2 (b) Các phép chiếu phối cảnh Để đạt phép chiếu phối cảnh đối tượng ba chiều, chiếu điểm theo đường thẳng chiếu để đường gặp tâm chiếu Trong hình 6-10, tâm chiếu trục z có giá trị âm, cách khoảng d phía sau mặt phẳng chiếu Bất kỳ điểm chọn làm tâm phép chiếu, nhiên việc chọn điểm dọc theo trục z làm đơn giản việc tính tốn phương trình biến đổi Hình 6-10 Phép chiếu phối cảnh điểm P tọa độ (x, y, z) thành điểm (xp, yp, 0) mặt phẳng chiếu y • P(x,y,z) x z (xp,yp) • d • Tâm chiếu Mặt phẳng chiếu Chúng ta đạt phương trình biến đổi cho phép chiếu phối cảnh từ phương trình tham số mô tả đường chiếu từ điểm P đến tâm chiếu (xem hình 610) Các tham số xây dựng đường chiếu x’ = x – xu y’ = y – yu (6-7) z’ = z - (z + d)u Tham số u lấy giá trị từ đến 1, tọa độ (x’, y’, z’) thể cho điểm dọc theo đường thẳng chiếu Khi u = 0, phương trình 12-7 làm cho điểm P tọa độ (x, y, z) Ở đầu mút đường thẳng u =1, có tọa độ tâm chiếu, Trang 105 Chương 6: Quan sát ảnh ba chiều (0, 0, d) Để thu tọa độ mặt phẳng chiếu, đặt z’ = tìm tham số u: u= z z+d (6-8) Giá trị tham số u tạo giao điểm đường chiếu với mặt phẳng chiếu (xp, yp, 0) Thế phương trình 6-8 vào phương trình 6-7, ta thu phương trình biến đổi phép chiếu phối cảnh ⎛ ⎞ ⎛ d ⎞ ⎟ = x⎜ ⎟ ⎝ z / d + 1⎠ ⎝z+d⎠ xp = x ⎜ ⎛ ⎞ ⎛ d ⎞ ⎟⎟ ⎟ = y ⎜⎜ ⎝z+d⎠ ⎝ z d + 1⎠ yp = y ⎜ (6-9) zp = Dùng biểu diễn hệ tọa độ ba chiều (three-dimentional homogeneous coordinate representation), viết phép biến đổi phối cảnh theo hình thức ma trận: [xh yh xh w] = [x y z 1] Trong biểu diễn này, ⎡1 ⎢0 ⎢ ⎢0 ⎢ ⎣0 ⎤ ⎥⎥ 0 1/ d ⎥ ⎥ 0 ⎦ 0 (6-10) z (6-11) w= +1 d phẳng chiếu tính từ tọa độ sau tọa độ chiếu mặt [xp yp zp 1] = [xh/w yh/w zh/w 1] (6-12) Khi đối tượng ba chiều đựợc chiếu lên mặt phẳng dùng phương trình biến đổi phối cảnh, tập hợp đường thẳng song song đối tượng mà không song song với mặt phẳng chiếu chiếu thành đường hội tụ (đồng quy) Các đường thẳng song song với mặt phẳng chiếu tạo đường song song Điểm mà tập hợp đường thẳng song song chiếu xuất hội tụ gọi điểm ảo (vanishing point) Mỗi tập hợp đường thẳng song song chiếu có điểm ảo riêng (xem hình 6.11) Trang 106 Chương 6: Quan sát ảnh ba chiều • y Điểm ảo (Vanishing x z (a) Mô tả tọa độ (b) Phép phối cảnh Một - điểm • Điểm ảo • trục x Hình 6-11 Các quang cảnh phối cảnh hình lập phương Điểm ảo trục z (c) Phép phối cảnh Hai -điểm Điểm ảo cho tập đường thẳng, tức đường song song với trục tọa độ giới thực nói đến điểm ảo (principal vanishing point) Chúng ta quản lý số lượng điểm ảo (một, hai, ba) với hướng mặt phẳng chiếu, phép chiếu phối cảnh phân loại dựa vào để có phép chiếu: một-điểm (one-point), hai-điểm (two-point), ba-điểm (three-point) Số lượng điểm ảo phép chiếu xác định số lượng trục hệ tọa độ giới thực cắt mặt phẳng chiếu Hình 6-11 minh họa hình ảnh phép chiếu phối cảnh một-điểm hai-điểm hình lập phương Trong hình 6-11(b), mặt phẳng chiếu có phương song song với mặt xy để có trục z bị cắt Phương tạo phép chiếu phối cảnh một-điểm với điểm ảo trục z Với quang cảnh hình 611(c), mặt phẳng chiếu cắt hai trục x z không cắt trục y Kết quả, phép chiếu phối cảnh hai-điểm chứa hai điểm ảo: trục x trục z 6.3 Biến đổi hệ tọa độ quan sát (hệ quan sát) Việc tạo quang cảnh đối tượng khơng gian ba chiều tương tự việc chụp ảnh Chúng ta vòng quanh chụp ảnh từ góc Trang 107 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 khơng có 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 q 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 toá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 tố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, 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 q 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 hồn tồ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 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 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 hoà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 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 toà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 hoà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 ... 0; St[10,1] := -2; End; St [2, 2] := 2. 7; St[3 ,2] := -2. 7; St[4 ,2] := -2. 7; St[5 ,2] := -2. 7; St[6 ,2] := 2. 7; St[7 ,2] := 2. 7; St[8 ,2] := 1.7; St[9 ,2] := -1.7; St[10 ,2] := -2. 7; St [2, 3] := 0; St[3,3]... Begin St[1,1] := 2; St[1 ,2] := 2. 7; St[1,3] := -2; Trang 126 Chương 6: Quan sát ảnh ba chiều St [2, 1] := 2; St[3,1] := 2; St[4,1] := 2; St[5,1] := -2; St[6,1] := -2; St[7,1] := -2; St[8,1] := 0;... ST[St2,1] ST[St2 ,2] ST[St2,3] ST[St3,1] ST[St3 ,2] ST[St3,3] - ST[St1,1]; ST[St1 ,2] ; ST[St1,3]; ST[St1,1]; ST[St1 ,2] ; ST[St1,3]; N1 := P2*Q3 - Q2*P3; N2 := P3*Q1 - P1*Q3; N3 := P1*Q2 - Q1*P2; End;