Giáo trình Thuật toán vẽ và tô các đường cơ bản

Tóm tắt Giáo trình Thuật toán vẽ và tô các đường cơ bản: ...c chọn. Những thao tác này được gọi là windowing và clipping (xem hình 4.1). Window Hệ tọa độ thế giới thực ywmax ywmin xwmin xwmax Hình 4.1 : Một ánh xạ cửa sổ - đến – vùng quan sát Hệ tọa độ thiết bị yvmax yvmin xvmin xvmax Viewport Một vùng có dạng hình chữ nhật được xác...ác đối tượng trong thế giới thực phần lớn là các đối tượng 3 chiều còn thiết bị hiển thị chỉ 2 chiều. Do vậy, muốn có hình ảnh 3 chiều ta cần phải giả lập. Chiến lược cơ bản là chuyển đổi từng bước. Hình ảnh sẽ được hình thành từ từ, ngày càng chi tiết hơn. Qui trình hiển thị ảnh 3 chiều n... hộp còn có một lợi ích quan trọng khác. Các phép biến đổi ⎥⎥ ⎥⎥ ⎦ ⎤ ⎢⎢ ⎢⎢ ⎣ ⎡ −− 10)1()1( 0100 000 000 FF ySxS S S (6-13) Không gian quan sát M xa ặt Mặt gầnCửa sổ z z Tâm chiếu z d (x, y, z) (xF, yF, 0) Hướng z Hình hộp th thường M ặ gầnCửa ...

pdf157 trang | Chia sẻ: havih72 | Lượt xem: 323 | Lượt tải: 0download
Nội dung tài liệu Giáo trình Thuật toán vẽ và tô các đường cơ bản, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
gian đối tượng có thể được dùng để thực hiện việc sắp 
xếp các mặt theo độ sâu. Phương pháp phân chia vùng tận dụng các thuận lợi của các 
vùng cố kết trong ảnh bằng cách xác định 
các vùng quan sát này để tách chúng làm 
nhiều phần nhỏ, mỗi phần được xem như 
một mặt đơn lẻ. Chúng ta áp dụng phương 
pháp này bằng cách phân chia thành công 
toàn bộ vùng quan sát thành các hình chữ 
nhật càng lúc càng nhỏ cho đến khi mỗi 
vùng nhỏ là hình chiếu của một phần của 
một mặt đơn lẻ nhìn thấy được, hoặc cho 
đến khi không thể tiếp tục phân chia. 
Hình 7-16 
Các phần chia được thực hiện thành công với 
phép chia 2. 
Để thực hiện phương pháp này, ta cần xây dựng các phép kiểm tra để xác định nhanh 
chóng vùng là một phần của một mặt đơn lẻ hoặc cho ta biết vùng thì quá phức tạp để 
phân tích bình thường. Bắt đầu với cái nhìn tổng thể, ta áp dụng các phép kiểm tra để 
xác định xem có nên phân chia toàn bộ vùng thành các hình chữ nhật nhỏ hơn không. 
Nếu các phép kiểm tra chỉ ra rằng mặt quan sát đủ phức tạp, ta phân chia nó. Kế tiếp, 
chúng ta áp dụng các phép kiểm tra đến mỗi vùng nhỏ hơn, chia nhỏ những vùng này 
nếu các phép kiểm tra xác định rằng tính nhìn thấy được của một mặt đơn là vẫn chưa 
chắc chắn. Chúng ta tiếp tục quá trình này đến khi các phần phân chia là dễ dàng được 
phân tích như là một mặt đơn lẻ hoặc đến khi chúng được thu giảm kích thước thành 
một pixel. 
Trang 147 
Chương 7: Khử các mặt kuất và đường khuất 
 Một cách để phân chia một vùng thành công là chia kích thước nó ra làm 2, 
như trong hình 7-16. Một vùng quan sát với độ phân giải 1024x1024 có thể được chia 
10 lần trước khi một phần chia giảm thành 1 điểm. 
Các phép kiểm tra để xác định tính nhìn thấy được của một mặt đơn trong phạm 
vi vùng chỉ định được thực hiện bằng cách so sánh các mặt với biên của vùng. Có bốn 
khả năng có thể xảy ra khi xem xét mối quan hệ giữa một mặt với biên vùng chỉ định. 
Ta có thể mô tả đặc điểm của các quan hệ này theo các cách sau (xem hình 7-17): 
Mặt bao quanh (surrounding surface) là mặt hoàn toàn bao quanh một vùng. 
Mặt nằm chồng (overlapping surface) là mặt có một phần nằm trong và một 
phần nằm ngoài vùng. 
Mặt bên trong (inside surface) là mặt hoàn toàn nằm bên trong vùng. 
Mặt bên ngoài (outside surface) là mặt hoàn toàn nằm bên ngoài vùng. 
Hình 7-17 
Các quan hệ 
có thể xảy ra 
giữa các mặt 
đa giác và một 
vùng chữ 
nhật. 
Mặt bao quanh Mặt nằm chồng Mặt bên trong Mặt bên ngoài 
Các phép kiểm tra để xác định tính nhìn thấy được của mặt trong phạm vị một 
vùng có thể được đề cập giới hạn trong bốn loại này. Không có sự phân chia nào thêm 
nữa cho một vùng nếu một trong các điều kiện sau là đúng (true): 
1. Tất cả các mặt nằm bên ngoài vùng. 
2. Chỉ một mặt bên trong, mặt nằm chồng hoặc mặt bao quanh ở trong 
vùng. 
3. Một mặt bao quanh che khuất tất cả các mặt khác trong phạm vi các biên 
của vùng. 
Kiểm tra 1 có thể được thực hiện bằng cách kiểm tra các biên chữ nhật bao quanh 
các mặt với biên của vùng. Kiểm tra 2 cũng có thể dùng các biên chữ nhật trong mặt 
Trang 148 
Chương 7: Khử các mặt kuất và đường khuất 
xy để xác định mặt nằm trong. Với những kiểu mặt khác, các biên chữ nhật có thể 
được dùng như một bước kiểm tra ban đầu. Nếu một biên chữ nhật cắt vùng theo cách 
nào đó, các kiểm tra tiếp theo mới được thực hiện để xác định xem mặt là: mặt bao 
quanh, mặt nằm chồng, hay mặt bên ngoài. Nếu được xác định là mặt bên trong, mặt 
nằm chồng, hay mặt bao quanh, các giá trị độ sáng pixel của nó được chuyển đến vùng 
thích hợp trong vùng đệm khung. 
Một phương pháp để thực hiện bước 3 là sắp xếp các mặt dựa theo độ sâu nhỏ 
nhất của chúng. Sau đó, với mỗi mặt bao quanh, ta đi tính giá trị z lớn nhất trong vùng 
được xem xét. Nếu giá trị lớn nhất z của một mặt nào (trong số các mặt mặt bao 
quanh) nhỏ hơn giá trị z nhỏ nhất của các mặt còn lại trong vùng, kiểm tra 3 thỏa. Hình 
7-18 trình bày một ví dụ chứa các điều kiện của phương pháp này. 
Hình 7-18 
Một mặt bao quanh với độ sâu lớn nhất của zmax (xét tron
vùng quan sát) che khuất tất cả các mặt mà độ sâu nhỏ nh
xmin của chúng lớn hơn zmax. 
g 
ất 
xv
zv
Vùng được xem xét 
z’’min
z’min
zmax
Một phương pháp khác để thực hiện kiểm tra 3 mà không cần đến sắp xếp độ sâu 
là dùng các phương trình mặt phẳng để tính các giá trị z ở bốn đỉnh của vùng cho tất cả 
các mặt bao quanh, mặt nằm chồng, hay mặt bên trong. Nếu các giá trị z của một trong 
số các mặt bao quanh mà nhỏ hơn các giá trị z của các mặt còn lại, kiểm tra 3 đúng. 
Sau đó vùng có thể được tô với các giá trị độ sáng của mặt bao quanh. 
Trong vài trường hợp, cả hai phương pháp cho kiểm tra 3 trên sẽ thất bại để xác 
định đúng một mặt bao quanh che khuất tất cả các mặt còn lại khác. Việc kiểm tra 
thêm nữa sẽ được thực hiện để xác định mặt đơn che phủ vùng, tuy nhiên, thuật toán sẽ 
Trang 149 
Chương 7: Khử các mặt kuất và đường khuất 
nhanh hơn nếu ta phân chia vùng hơn là tiếp tục làm các kiểm tra phức tạp. Khi các 
mặt bên ngoài và mặt bao quanh vừa được xác định cho một vùng, chúng nó sẽ còn lại 
các mặt bên ngoài và bao quanh cho tất cả các phần phân chia của vùng. Hơn nữa, vài 
mặt bên trong và mặt nằm chồng có thể đang chờ để bị loại bỏ khi quá trình phân chia 
tiếp tục, để các vùng trở nên dễ dàng hơn cho phân tích. Trong trường hợp đã đi đến 
giới hạn, kích thước vùng chia chỉ còn là 1 pixel, ta đơn giản đi tính độ sâu của mỗi 
mặt có liên quan ở điểm đó và chuyển giá trị độ sáng của mặt gần nhất vào vùng đệm 
khung. 
Hình 7-19 
Vùng A được phân c
thành A1 và A2 bằn
hia 
g 
 cách 
t S trên dùng biên của mặ
mặt phẳng chiếu. 
zv
xv
Vùng A 
A2
yv
S 
A1
• 
• 
• 
Như một thay đổi lên quá trình phân chia cơ bản, ta có thể phân chia các vùng 
dọc theo biên của mặt thay vì chia chúng làm 2. Nếu các mặt vừa được sắp theo độ 
sâu nhỏ nhất, ta có thể dùng mặt có giá trị z nhỏ nhất để phân chia một vùng được cho. 
Hình 7-19 minh họa phương pháp này để phân chia các vùng. Hình chiếu của biên mặt 
S được dùng để phân chia vùng ban đầu thành các phần A1 và A2. Mặt S sau đó trở 
thành mặt bao quanh của A1 và các phép kiểm tra 2 và 3 có thể được áp dụng để xác 
định xem việc phân chia thêm nữa có cần thiết không. Trong trường hợp tổng quát, sự 
phân chia ít hơn được cần dùng tiếp cận này, tuy nhiên nhiều xử lý thêm nữa sẽ được 
cần để chia vùng và phân tích mối liên hệ giữa các mặt với các biên vùng chia. 
7.7. Các phương pháp Octree (Octree Methods) 
Khi biểu diễn octree được dùng cho các không gian quan sát, việc khử các mặt 
khuất được thực hiện bằng cách chiếu các nút octree lên mặt quan sát theo thứ tự từ 
trước ra sau. Trong hình 7-20, mặt phía trước của vùng không gian (mặt hướng về phía 
Trang 150 
Chương 7: Khử các mặt kuất và đường khuất 
người quan sát) được hình thành với các phần tám (octant) 0, 1, 2, 3. Mặt trước của 
các octant này được nhìn thấy bởi người quan sát. Bất kỳ mặt nào hướng về phía sau 
của các octant phía trước này hoặc các octant ở đằng sau (4, 5, 6, và 7) có thể bị che 
khuất bởi các mặt phía trước. 
Các mặt phía sau bị loại bỏ, với 
hướng quan sát như trong hình 7-20, 
bằng cách xử lý các phần tử dữ liệu tại 
các nút octree theo thứ tự 0, 1, 2, 3, 4, 
5, 6, 7. Điều này tạo ra kết quả du hành 
theo độ sâu của octree, để các octant 0, 
1, 2, và 3 của toàn vùng được viếng 
thăm trước các octant 4, 5, 6, và 7. 
Tương tự, bốn octant con trước của 
octant 0 sẽ được viếng thăm trước bốn 
octant con phía sau. Cuộc du hành của 
octree sẽ tiếp tục theo thứ tự này cho mỗi phần 
chia octant. 
0 
1 
2 
3 
4 
5 
7 
6 
Các Octant được đánh số 
của một vùng 
Hướng qua
Hình 7-20 
Các đối tượng trong các octant 0, 1, 2, và 3 che
khuất các octant phía sau (4, 5, 6, 7) khi hướ
quan sát như trong hình. 
n sát 
ng 
Khi giá trị màu được gặp tại một nút của 
octree, vùng pixel trong vùng đệm khung tương 
ứng với nút này được gán giá trị màu đó chỉ nếu 
không giá trị nào được lưu trước đó trong vùng 
này. Không gì được nạp nếu một vùng trống rỗng. 
Bất kỳ nút nào được phát hiện là bị che khuất 
hoàn toàn thì sẽ bị loại bỏ khỏi các xử lý trong 
tương lai, để các các cây con của nó không được 
truy cập vào. 
1 
2 3 
4 
5 
7 
6 
0
Các octant trong không gian 
Hình 7-21 
Sự phân chia octant cho một vùng 
không gian và mặt các phần tư tương 
ứng. 
1 
2 3 
Các quang cảnh khác nhau của đối tượng 
được biểu diễn như octree có thể đạt được bằng 
cách áp dụng các phép biến đổi đến sự biểu diễn octree để làm thay đổi đối tượng theo 
hướng quan sát. Ta giả sử rằng biểu diễn octree luôn được xây dựng sao cho các octant 
0, 1, 2, và 3 của một vùng hình thành nên mặt phía trước (xem hình 7-20). 
0 
Các quadrant (góc 1/4) trong 
mặt phẳng quan sát 
Trang 151 
Chương 7: Khử các mặt kuất và đường khuất 
Một phương pháp để hiển thị một octree từ trước ra sau là đầu tiên ánh xạ octree 
vào một quadtree của các vùng nhìn thấy được bằng cách duyệt qua các nút của octree 
từ trước ra sau trong một quá trình đệ quy. Sau đó biểu diễn quadtree của các mặt nhìn 
thấy được được nạp vào trong vùng đệm khung. Hình 7-21 mô tả các octant trong một 
vùng không gian và các quadtree tương ứng trên mặt phẳng quan sát. Các phần tạo 
thành quadtree 0 lấy từ octant 0 và 4. Các giá trị màu trong góc phần tư 1 (quadrant 1) 
có được từ các mặt trong octant 1 và 5, và các giá trị trong mỗi của hai quadrant còn 
lại được sinh ra từ cặp octant thẳng hàng với mỗi quadrant này. 
Việc xử lý đệ quy của các nút octree được trình bày trong thủ tục 
convert_oct_to_quad, nơi nhận vào một mô tả octree và tạo ra các biểu diễn quadtree 
cho các mặt nhìn thấy được trong vùng. Trong hầu hết các trường hợp, cả octant phía 
trước và phía sau phải được xem xét để xác định màu đúng cho một quadrant. Tuy 
nhiên, ta có thể bỏ qua quá trình xử lý octant phía sau nếu octant phía trước được tô 
đồng nhất với vài màu. Đối với các vùng không đồng nhất, thủ tục được gọi đệ quy, 
với các đối số mới – con của octant không đồng nhất và nút quadtree được tạo mới. 
Nếu octant phía trước rỗng, chỉ cần xử lý con của octant phía sau. Ngược lại, hai lời 
gọi đệ quy được làm, một cho octant phía sau và một 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ử các mặt kuất và đườ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 của một octree (với các octant 0, 1, 2, 
3 ở phía trước) và, khi biểu diễn này được hiển thị, biến đổi nó thành 
một quatree. Nhận một octree như input, nơi mà mỗi phần tử của 
octree là một giá trị màu (homogeneous = true và octant được tô với 
màu này) hoặc là con trỏ đến một nút octant con (homogeneous = 
false).} 
procedure convert_oct_to_quad(octree: oct_node; 
var quadtree: quad_node); 
 var k: integer; 
 begin 
 for k:=0 to 3 do 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 và 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ử các mặt kuất và đường khuất 
 end 
 else begin {trước không đồng nhất, sau không được 
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ỏ các đường bị che khuất 
Khi chỉ các phác họa của một đối tượng được hiển thị, các phương pháp khử 
đường khuất được dùng đến để loại bỏ các viền của đối tượng, cái bị che khuất bởi các 
mặt ở gần mặt phẳng quan sát hơn. Các phương pháp để loại bỏ các đường khuất có 
thể được phát triển bằng cách xem xét các viền của đối tượng một cách trực tiếp hay 
bằng cách chỉnh sửa lại các phương pháp khử mặt khuất. 
Một tiếp cận trực tiếp để loại bỏ các đường khuất là so sánh mỗi đường với mỗi 
mặt trong ảnh. Quá trình này tương tự như clipping các đường bởi một cửa sổ có hình 
dạng bất kỳ, chỉ khác ở chổ là bây giờ chúng ta muốn cắt bỏ các phần bị che khuất bởi 
các mặt. Đối với mỗi đường, các giá trị độ sâu được so sánh với các mặt để xác định 
xem phần đoạn thẳng nào không nhìn thấy được. Chúng ta có thể dùng các phương 
pháp cố kết để xác định các phần bị che khuất mà không cần kiểm tra toàn bộ các vị trí 
tọa độ. Nếu cả hai giao điểm của đường thẳng với hình chiếu của một biên bề mặt có 
độ sâu lớn hơn độ sâu của mặt ở các điểm này, đoạn thẳng giữa các giao điểm sẽ hoàn 
Hình 7-22 
Phần đoạn thẳng bị che
khuất (nét đứt) của các
đường thẳng: (a) đi qua phía 
sau một mặt và (b) đâm 
xuyên qua một mặt. 
Trang 154 
Chương 7: Khử các mặt kuất và đường khuất 
toàn bị che khuất, như hình 7-22 (a). Khi đường thẳng có độ sâu lớn hơn độ sâu ở một 
giao điểm với biên và có độ sâu nhỏ hơn độ sâu của mặt ở các giao điểm với biên còn 
lại, đường thẳng phải đi xuyên qua mặt như hình 7-22 (b). Trong trường hợp này, 
chúng ta tính tọa độ giao điểm của đường với mặt bằng cách dùng phương trình mặt và 
chỉ hiển thị các phần được nhìn thấy của đường thẳng. 
Vài phương pháp khử mặt khuất dễ dàng được áp dụng để khử các đường khuất. 
Dùng phương pháp mặt sau (back-face), chúng ta có thể nhận biết được các mặt sau 
của một đối tượng và chỉ hiển thị các biên của các mặt nhìn thấy được. Với phương 
pháp sắp xếp theo độ sâu, các mặt được vẽ vào trong vùng đệm làm tươi để phần bên 
trong của mặt có độ sáng nền, trong khi đó các biên có độ sáng là độ sáng vẽ. Bằng 
cách xử lý các mặt từ sau đến trước, các đường khuất bị xóa bởi các mặt ở gần hơn. 
Phương pháp chia vùng có thể được áp dụng để khử các đường khuất bằng cách chỉ 
hiển thị các biên của các mặt nhìn thấy được. Các phương pháp scan-line có thể được 
dùng để hiển thị các đường nhìn thấy được bằng cách bố trí các điểm dọc theo các 
đường quét, các điểm này trùng với các biên của các mặt nhìn thấy được. Bất kỳ 
phương pháp khử mặt khuất nào dùng các đường quét đều có thể được thay đổi thành 
phương pháp khử đường khuất theo cách tương tự (xem hình 7-23). 
V1
V2
V3
V4
•
•
• 
S1
•
• V5
S2
E1
E2
E2
E6
E6
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
Hình 7-23 
Các bảng dữ liệu hình học cho 
một đối tượng ba chiều được 
biểu diễn bởi hai mặt phẳng, 
được hình thành với sáu cạnh 
và năm đỉnh. 
Trang 155 
Chương 7: Khử các mặt kuất và đường khuất 
7.9. Tổng kết chương 7 
 So sánh các phương pháp khử mặt khuất 
Hiệu quả của các phương pháp khử mặt khuất phụ thuộc vào đặc tính của từng 
ứng dụng cụ thể. Nếu một mặt trong ảnh nằm trải ra trên hướng z để có rất ít sự nằm 
chồng theo độ sâu, phương pháp sắp xếp theo độ sâu có thể tốt nhất. Với các ảnh có 
những mặt nằm tách biệt theo chiều ngang, phương pháp scan-line hoặc phân chia 
vùng có thể là một lựa chọn tốt. Trong các phương pháp được chọn này, kỹ thuật sắp 
xếp và cố kết đem đến những thuận lợi do các thuộc tính tự nhiên của ảnh. 
Vì sắp xếp và cố kết là quan trọng đến hiệu quả toàn diện của một phương pháp 
khử mặt khuất, các kỹ thuật để thực hiện các thao tác này cần được chọn lựa cẩn thận. 
Khi nào các đối tượng được biết theo thứ tự chính xác, như danh sách động chứa các 
cạnh trong bảng các cạnh được dùng trong phương pháp scan-line, một sắp xếp bubble 
sort sẽ hiệu quả để thực hiện việc đổi chỗ. Tương tự, kỹ thuật cố kết được áp dụng để 
quét đường, vùng, hay các khung (frame) có thể là công cụ hữu hiệu làm tăng hiệu quả 
các phương pháp khử mặt khuất. 
Như một quy tắc tổng quát, phương pháp sắp xếp theo độ sâu là một tiếp cận có 
hiệu quả cao cho các ảnh chỉ có vài mặt. Điều này do các ảnh này thường có vài mặt 
nằm chồng theo độ sâu. Phương pháp scan-line cũng thực hiện tốt khi ảnh chứa ít mặt. 
Dù vậy phương pháp scan-line hay sắp xếp theo độ sâu có thể được dùng hiệu quả cho 
các ảnh có đến vài ngàn mặt. Với các ảnh có hơn vài ngàn mặt, tiếp cận vùng đệm độ 
sâu hoặc octree thực hiện tốt nhất. Phương pháp vùng đệm độ sâu có một thời gian xử 
lý hằng, độc lập với số lượng mặt trong ảnh. Điều này bởi vì kích thước của các vùng 
mặt giảm khi số lượng mặt trong ảnh tăng. Do đó, một cách tương đối, phương pháp 
sắp xếp theo độ sâu thể hiện sự thực hiện kém khi ảnh đơn giản và thực hiện hiệu quả 
khi ảnh phức tạp. Tiếp cận này thì đơn giản để cài đặt, tuy nhiên, nó cần nhiều bộ nhớ 
hơn tất cả các phương pháp khác. Vì lý do này, một phương pháp khác, như octree 
hoặc phân chia vùng có thể được dùng cho các ảnh có nhiều mặt. 
Khi phương pháp octree được dùng trong hệ thống, việc xử lý loại bỏ các mặt 
khuất sẽ nhanh và đơn giản. Chỉ cần dùng các phép cộng và trừ, không cần sắp xếp 
hoặc tìm các giao điểm. Một thuận lợi khác của octree là chúng lưu nhiều mặt hơn. 
Trang 156 
Chương 7: Khử các mặt kuất và đường khuất 
Toàn bộ hình thể ba chiều của đối tượng có thể được hiển thị, điều này làm cho 
phương pháp octree hữu ích để thu được các lát cắt của các hình thể ba chiều. 
Ta có thể kết hợp và cài đặt các phương pháp khử mặt khuất khác nhau theo các 
cách khác nhau. Hơn nữa, các thuật toán được cài đặt trong phần cứng, và các hệ thống 
xử lý song song đặc biệt được tận dụng để làm tăng hiệu quả của các phương pháp 
này. Các hệ thống phần cứng đặt biệt thường được dùng khi tốc độ xử lý được xem là 
quan trọng, ví dụ, trong việc tạo ra các hình ảnh động của các mô phỏng bay. 
7.10. Bài tập chương 7 
1. Phát triển một thủ tục, dựa trên kỹ thuật khử mặt sau, để xác định tất cả các mặt 
trước của một khối đa diện lồi với các mặt có màu khác nhau liên hệ đến mặt 
quan sát. Giả sử rằng đối tượng được định nghĩa trong hệ quan sát bàn tay trái 
với mặt xy dùng làm mặt quan sát. 
2. Cài đặt thủ tục trong bài 1 vào một chương trình để chiếu trực giao các mặt 
nhìn thấy được của đối tượng lên một cửa sổ trong mặt phẳng quan sát. Để đơn 
giản, giả sử rằng tất cả các phần của đối tượng nằm ở phía trước mặt phẳng 
quan sát. Ánh xạ cửa sổ lên một vùng quan sát màn hình để hiển thị. 
3. Cài đặt thủ tục trong bài 1 vào một chương trình để tạo ra một hình chiếu phối 
cảnh của các mặt nhìn thấy được của đối tượng lên một cửa sổ trong mặt phẳng 
quan sát. Để đơn giản, giả sử rằng đối tượng nằm phía trước mặt phẳng quan 
sát. Ánh xạ cửa sổ lên một vùng quan sát màn hình để hiển thị. 
4. Viết một chương trình để cài đặt thủ tục của bài 1 cho một ứng dụng động, quay 
đối tượng một cách tăng dần xung quanh một trục, cái đâm xuyên qua đối 
tượng và song song với với mặt phẳng quan sát. Giả sử rằng đối tượng nằm 
hoàn toàn phía trước mặt phẳng quan sát. Dùng một phép chiếu song song trực 
giao để ánh xạ thành công các ảnh lên màn hình. 
5. Dùng phương pháp vùng đệm độ sâu để hiển thị các mặt nhìn thấy được của 
một đối tượng bất kỳ, cái được định nghĩa trong hệ tọa độ chuẩn ở phía trước 
vùng quan sát. Các phương trình (7-4) và (7-5) sẽ được dùng để thu được các 
giá trị độ sâu cho tất cả các điểm trên mặt mỗi khi một độ sâu khởi tạo vừa 
Trang 157 

File đính kèm:

  • pdfgiao_trinh_thuat_toan_ve_va_to_cac_duong_co_ban.pdf