Giáo trình Kỹ thuật đồ họa (Phần 2)

Có hai phương pháp cơ bản để chiếu các đối tượng ba chiều lên bề mặt quan sát

hai chiều. Tất cả các điểm của đối tượng có thể được chiếu lên bề mặt theo các đường

thẳng song song, hoặc các điểm có thể được chiếu theo các đường hội tụ về một điểm

được gọi là tâm chiếu (the center of projection). Hai phương pháp này được gọi là

phép chiếu song song (parallel projection) và phép chiếu phối cảnh (perspective

projection) (xem hình 6-1). Trong cả hai trường hợp, giao điểm của đường chiếu với bề

mặt quan sát xác định các tọa điểm của điểm được chiếu lên mặt phẳng chiếu này. Chúng

ta giả sử rằng mặt phẳng chiếu là mặt z = 0 của hệ tọa độ bàn tay trái (left-handed

coordinate system) (xem hình 6-2)

pdf 62 trang kimcuc 13580
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Kỹ thuật đồ họa (Phần 2)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Kỹ thuật đồ họa (Phần 2)

Giáo trình Kỹ thuật đồ họa (Phần 2)
Chương 6: Quan sát ảnh ba chiều 
 Chương 6 : QUAN SÁT ẢNH BA CHIỀU 
6.1. Tổng quan 
• Mục tiêu 
Học xong chương này sinh viên cần phải nắm bắt được các vấn đề sau: 
- Cơ chế của 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 3 chiều 
• Kiến thức cơ bản 
 Kiến thức toán học : các khái niệm cơ bản về vị trí tương đối của đường 
thẳng và mặt phẳng trong 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 3 chiều 
6.2. Các phép chiếu 
Trong đồ họa hai chiều, các thao tác quan sát biến đổi các điểm hai chiều trong 
mặt phẳng tọa độ thế giới thực thành các điểm hai chiều trong mặt phẳng hệ tọa độ thiết 
bị. Sự định nghĩa đối tượng, bị cắt bởi một cửa sổ, được ánh xạ vào một vùng quan sát. 
Các hệ tọa độ thiết bị chuẩn hóa này sau đó được biến đổi sang các hệ tọa độ thiết bị, và 
đối tượng được hiển thị lên thiết bị kết xuất. Đối với đồ họa ba chiều, việc làm này phức 
tạp hơn một chút, vì bây giờ có vài chọn lựa để có thể quan sát ảnh như thế nào. Chúng ta 
có thể quan sát ảnh từ phía trước, từ phía trên, hoặc từ phía sau. Hoặc chúng ta có thể tạo 
ra quang cảnh về những gì chúng ta có thể thấy nếu chúng ta đang đứng ở trung tâm của 
Trang 98 
Chương 6: Quan sát ảnh ba chiều 
một nhóm các đối tượng. Ngoài ra, sự mô tả các đối tượng ba chiều phải được chiếu lên 
bề mặt quan sát của thiết bị xuất. Trong chương này, trước hết chúng ta sẽ thảo luận các 
cơ chế của phép chiếu. Sau đó, các thao tác liên quan đến phép biến đổi cách quan sát, và 
đầy đủ các kỹ thuật quan sát ảnh ba chiều sẽ được phát triển. 
Có hai phương pháp cơ bản để chiếu các đối tượng ba chiều lên bề mặt quan sát 
hai chiều. Tất cả các điểm của đối tượng có thể được chiếu lên bề mặt theo các đường 
thẳng song song, hoặc các điểm có thể được chiếu theo các đường hội tụ về một điểm 
được gọi là tâm chiếu (the center of projection). Hai phương pháp này được gọi là 
phép chiếu song song (parallel projection) và phép chiếu phối cảnh (perspective 
projection) (xem hình 6-1). Trong cả hai trường hợp, giao điểm của đường chiếu với bề 
mặt quan sát xác định các tọa điểm của điểm được chiếu lên mặt phẳng chiếu này. Chúng 
ta giả sử rằng mặt phẳng chiếu là mặt z = 0 của hệ tọa độ bàn tay trái (left-handed 
coordinate system) (xem hình 6-2). 
(a) 
Phép chiếu song song 
P2
P1
P’2
P’1
Mặt phẳng 
chiếu 
• 
• • 
• 
(b) 
Phép chiếu phối cảnh 
P2
P1
P’2
P’1
Mặt phẳng 
chiếu 
•
••
• 
• Tâm chiếu 
Hình 6-1 Hai phương pháp chiếu một đoạn thẳng lên bề mặt của mặt phẳng chiếu
Bề mặt 
quan sát 
y 
z 
Hình 6-2 
Một bề mặt quan sát được 
định nghĩa trong mặt z=0 của 
hệ tọa độ bàn tay trái. 
x
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ệ về chiều của các đối tượng, và đây là 
kỹ thuật được dùng trong việc phác thảo để tạo ra các bức vẽ tỷ lệ của các đối tượng ba 
chiều. Phương pháp này được dùng để thu các hình ảnh chính xác ở các phía khác nhau 
của một đối tượng. Tuy nhiên, phép chiếu song song không cho một hình ảnh thực tế của 
các đối tượng ba chiều. Ngược lại, phép chiếu phối cảnh tạo ra các hình ảnh thực nhưng 
không bảo tồn các chiều liên hệ. Các đường ở xa được chiếu sẽ nhỏ hơn các đường ở gần 
mặt phẳng chiếu, như trong hình 6-3 (xem hình 6-3). 
Hình 6-3 
Hai đoạn thẳng dài bằng nhau, trong 
phép chiếu phối cảnh, đoạn nào ở xa mặt 
phẳng chiếu hơn sẽ có kích thước nhỏ 
Mặt phẳng 
chiếu 
Tâm chiếu 
6.2.1. Các phép chiếu song song 
 Các hình ảnh được hình thành bằng phép chiếu song song có thể được xác định 
dựa vào góc hợp bởi hướng của phép chiếu hợp với mặt phẳng chiếu. Khi hướng của 
phép chiếu vuông góc với mặt phẳng, ta có phép chiếu trực giao (hay phép chiếu 
vuông góc - orthographic projection). Một phép chiếu có thể không vuông góc với mặt 
phẳng chiếu được gọi là phép chiếu xiên (oblique projection). 
Các phép chiếu trực giao hầu như được dùng để tạo ra quang cảnh nhìn từ phía 
trước, bên sườn, và trên đỉnh của đối tượng (xem hình 6-4). Quang cảnh phía trước, bên 
sườn, và phía sau của đối tượng được gọi là “mặt chiếu” (elevation), và quang cảnh phía 
trên được gọi là “mặt phẳng” (plane). Các bản vẽ trong kỹ thuật thường dùng các phép 
chiếu trực giao này, vì các chiều dài và góc miêu tả chính xác và có thể đo được từ bản 
vẽ. 
Trang 100 
Chương 6: Quan sát ảnh ba chiều 
Quang cảnh phía trước 
(Front View) 
Quang cảnh bên sườn 
(SideView) 
Quang cảnh trên đỉnh 
(Top View) 
Hình 6-4 
Ba phép chiếu trực giao 
của một đối tượng. 
Chúng ta cũng có thể xây dựng các phép chiếu trực giao để có thể quan sát nhiều 
hơn một mặt của một đối tượng. Các quang cảnh như thế được gọi là các 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 được dùng là phép chiếu cùng kích thước (isometric projection). Một phép 
chiếu cùng kích thước được thực hiện bằng việc sắp xếp song song mặt phẳng chiếu mà 
nó cắt mỗi trục tọa độ ở nơi đối tượng được định nghĩa (được gọi là các trục chính) ở các 
khoảng cách như nhau từ ảnh gốc. Hình 6-5 trình bày phép chiếu cùng kích thước. Có 
tám vị trí, một trong tám mặt, đều có kích thước bằng nhau. Tất cả ba trục chính được vẽ 
thu gọn bằng nhau trong phép chiếu cùng kích thước để kích thước liên hệ của các đối 
tượng được bảo tồn. Đây không là trường hợp phép chiếu trực giao trục lượng học tổng 
quát, khi mà các hệ số tỷ lệ theo ba trục chính có thể khác nhau. 
Các phương trình biến đổi để thực hiện một phép chiếu song song trực giao thì dễ 
hiểu. Đối với điểm bất kỳ (x, y, z), điểm chiếu (xp, yp, xp) trên bề mặt chiếu được tính như 
sau: 
 xp = x, yp = y, zp = 0 (6-1) 
Trang 101 
Chương 6: Quan sát ảnh ba chiều 
z 
x 
y 
Mặt phẳng chiếu 
(Projection plane) 
Hình 6-5 Phép chiếu cùng kích thước 
của một đối tượng lên bề mặt quan sát 
Một phép chiếu xiên đạt được bằng việc chiếu các điểm theo các đường thẳng 
song song, các đường thẳng này 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 của điểm (x, y, z) theo một đường thẳng chiếu đến vị trí (xp, yp). Các 
tọa độ chiếu trực giao trên mặt phẳng chiếu là (x, y). Đường thẳng của phép chiếu xiên 
tạo một góc α với đường thẳng trên mặt phẳng chiếu (đây là đường nối điểm (xp, yp) với 
điểm (x, y)). Đường này, có chiều dài L, hợp một góc φ với phương ngang trên mặt 
phẳng chiếu. Chúng ta có thể diễn tả các tọa độ chiếu qua các số hạng x, y, L, và φ: 
xp = x + L cosφ (6-2) 
yp = y + L sinφ 
Hình 6-6 Phép chiếu vuông góc của 
điểm (x, y, z) thành điểm (xp, yp) lên 
mặt phẳng chiếu 
x 
Mặt phẳng chiếu 
z 
(x,y) 
y 
α 
φ 
(x, y, z) 
• (xp, yp) 
L 
 Phương chiếu có thể định nghĩa bằng việc chọn các giá trị cho góc α và φ. Các 
chọn lựa thông thường cho góc φ là 30o và 45o, là các góc hiển thị một quang cảnh của 
mặt trước, bên sườn, và trên đỉnh (hoặc mặt trước, bên sườn, và dưới đáy) của một đối 
Trang 102 
Chương 6: Quan sát ảnh ba chiều 
tượng. Chiều dài L là một hàm của tọa dộ z, và chúng ta có thể tính tham số này từ các 
thành phần liên quan. 
 tan α = L
z = 
1
1
L
 (6-3) 
ở đây L1 là chiều dài của các đường chiếu từ (x, y) đến (xp, yp) khi z = 1. 
Từ phương trình 6-3, chúng ta có 
 L = z L1 (6-4) 
và các phương trình của phép chiếu xiên 6-2 có thể được viết lại như sau 
xp = x + z(L1 cosφ) (6-5) 
yp = y + z(L1 sinφ) 
 Ma trận biến đổi để tạo ra bất kỳ việc chiếu song song có thể được viết như sau 
Pparallel = (6-6) 
⎥⎥
⎥⎥
⎦
⎤
⎢⎢
⎢⎢
⎣
⎡
1000
00sincos
0010
0001
11 ϕϕ LL
Một phép chiếu trực giao có thể đạt được khi L1 = 0 (xảy ra ở góc chiếu α=90o). 
Các phép chiếu xiên được sinh ra 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 của phép làm biến dạng theo trục z. Thực tế, kết quả của ma trận chiếu 
này là làm biến dạng mặt phẳng của hằng z và chiếu chúng lên mặt phẳng quan sát. Các 
giá trị tọa độ x và y trong mỗi mặt của hằng z bị thay đổi bởi một hệ số tỷ lệ đến giá trị z 
của mặt phẳng để các góc, các khoảng cách, và các đường song song trong mặt phẳng 
được chiếu chính xác. Hiệu quả này được thể hiện trong hình 6-7, ở đây mặt sau của hình 
hộp bị biến dạng và bị nằm đè bởi mặt trước trong phép chiếu đến bề mặt quan sát. Một 
cạnh của hình hộp, cái nối mặt trước với mặt sau, được chiếu thành đoạn chiều dài L1, cái 
hợp thành một góc φ với đường ngang trong mặt phẳng chiếu. 
Trang 103 
z 
y 
LB1B 
Hình 6-7 
Phép chiếu xiên 
của một hình 
hộp lên bề mặt 
quan sát tại mặt 
Chương 6: Quan sát ảnh ba chiều 
Hai góc được dùng phổ biến trong phép chiếu xiên là các góc có tgφ =1 và tgφ=2. 
Trường hợp đầu, φ = 45o và quang cảnh đạt được được gọi là phép chiếu cavalier. Tất cả 
các đường vuông góc v ới mặt phẳng chiếu được chiếu với chiều dài không thay đổi. Các 
ví dụ của phép chiếu cavalier đối với một hình lập phương được cho trong hình 6-8. 
Khi góc chiếu đuợc chọn để tgφ = 2, kết quả quang cảnh được gọi là phép chiếu 
cabinet. Góc phép chiếu này xấp xỉ 63.4o làm cho các đường chiếu vuông góc với bề mặt 
chiếu được chiếu ở một nữa chiều dài của chúng. 
Các phép chiếu cabinet cho hình ảnh thực hơn phép chiếu cavalier vì sự thu giảm 
chiều dài của các đường song song. Hình 6-9 trình bày phép chiếu cabinet cho hình lập 
phương. 
(a) 
φ=45o
(b) 
φ=30o
Hình 6-8 
Phép chiếu cavalier của
một hình lập phương lên 
bề mặt chiếu với hai giá
trị góc φ. Độ sâu của 
phép chiếu bằng với
chiều rộng và chiều cao. 
Trang 104 
Chương 6: Quan sát ảnh ba chiều 
(a) 
φ=45o
Hình 6-9 
Phép chiếu cabinet của
một hình lập phương lên 
bề mặt chiếu với hai giá
trị góc φ. Độ sâu của 
phép chiếu bằng 1/2
chiều rộng và chiều cao. 
(b) 
φ=30o
6.2.2. Các phép chiếu phối cảnh 
 Để đạt được phép chiếu phối cảnh của đối tượng ba chiều, chúng ta chiếu các điểm 
theo đường thẳng chiếu để các đường này gặp nhau ở tâm chiếu. Trong hình 6-10, tâm 
chiếu trên trục z và có giá trị âm, cách một khoảng d phía sau mặt phẳng chiếu. Bất kỳ 
điểm nào cũng có thể được chọn làm tâm của phép chiếu, tuy nhiên việc chọn một điểm 
dọc theo trục z sẽ làm đơn giản việc tính toán trong các phương trình biến đổi. 
Hình 6-10 
Phép chiếu phối cảnh
của điểm P ở tọa độ
(x, y, z) thành điểm 
(xp, yp, 0) trên mặt 
phẳng chiếu. 
x 
Mặt phẳng chiếu 
z 
(xp,yp) 
y 
•
•
• 
P(x,y,z) 
Tâm chiếu d
 Chúng ta có thể đạt được các phương trình biến đổi cho phép chiếu phối cảnh từ 
các phương trình tham số mô tả các đường chiếu từ điểm P đến tâm chiếu (xem hình 6-
10). Các tham số xây dựng các đường chiếu này là 
 x’ = x – xu 
 y’ = y – yu (6-7) 
 z’ = z - (z + d)u 
 Tham số u lấy giá trị từ 0 đến 1, và các tọa độ (x’, y’, z’) thể hiện cho bất kỳ điểm 
nào 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 kia của đường thẳng u =1, và chúng ta có các tọa độ của tâm chiếu, 
Trang 105 
Chương 6: Quan sát ảnh ba chiều 
(0, 0, d). Để thu được các tọa độ trên mặt phẳng chiếu, chúng ta đặt z’ = 0 và tìm ra tham 
số u: 
 u = 
dz
z
+ (6-8) 
 Giá trị của tham số u tạo ra giao điểm của đường chiếu với mặt phẳng chiếu tại 
(xp, yp, 0). Thế phương trình 6-8 vào phương trình 6-7, ta thu được các phương trình biến 
đổi của phép chiếu phối cảnh. 
 xp = x ⎟⎠
⎞⎜⎛ = x⎝ + dz
d ⎟⎠
⎞⎜⎝
⎛
+1/
1
dz
yp = y ⎟⎠
⎞⎜⎛ = y⎝ + dz
d
⎟⎟⎠
⎞
⎜⎜⎝
⎛
+1
1
dz
 (6-9) 
zp = 0 
Dùng biểu diễn hệ tọa độ thuần nhất ba chiều (three-dimentional homogeneous 
coordinate representation), chúng ta có thể viết phép biến đổi phối cảnh theo hình thức 
ma trận: 
Trong biểu diễn này, 
[xh yh xh w] = [x y z 1] (6-10) 
⎥⎥
⎥⎥
⎦
⎤
⎢⎢
⎢⎢
⎣
⎡
1000
/1000
0010
0001
d
và các tọa độ chiếu trên mặt phẳng chiếu được tính từ các tọa độ thuần nhất như sau 
 [xp yp zp 1] = [xh/w yh/w zh/w 1] (6-12) 
 Khi các đối tượng ba chiều đựợc chiếu lên một mặt phẳng dùng các phương trình 
biến đổi phối cảnh, bất kỳ tập hợp các đường thẳng song song nào của đối tượng mà 
không song song với mặt phẳng chiếu được chiếu thành các đường hội tụ (đồng quy). 
Các đường thẳng song song với mặt phẳng khi chiếu sẽ tạo ra các đường song song. 
Điểm mà tại đó tập hợp các đường thẳng song song được chiếu xuất hiện hội tụ về đó 
được gọi là điểm ảo (vanishing point). Mỗi tập hợp các đường thẳng song song được 
chiếu như thế sẽ có một điểm ảo riêng (xem hình 6.11). 
w = z + 1 (6-11) 
d
Trang 106 
Chương 6: Quan sát ảnh ba chiều 
Hình 6-11 
Các quang cảnh phối 
cảnh của một hình lập 
phương. 
(a) 
Mô tả tọa độ 
(c) 
Phép phối cảnh 
Hai -điểm 
• •Điểm ảo trục x 
Điểm ảo 
trục z 
(b) 
Phép phối cảnh 
Một - điểm 
Điểm ảo 
(Vanishing •
x 
y 
z 
Điểm ảo cho bất kỳ tập các đường thẳng, tức các đường song song với một trong 
các trục tọa độ thế giới thực được nói đến như một điểm ảo chính (principal vanishing 
point). Chúng ta quản lý số lượng các điểm ảo chính (một, hai, hoặc ba) với hướng của 
mặt phẳng chiếu, và các phép chiếu phối cảnh được phân loại dựa vào đó để có các phép 
chiếu: một-điểm (one-point), hai-điểm (two-point), hoặc ba-điểm (three-point). Số lượng 
các điểm ảo chính trong một phép chiếu được xác định bởi số lượng các trục của hệ tọa 
độ thế giới thực cắt mặt phẳng chiếu. Hình 6-11 minh họa hình ảnh của các phép chiếu 
phối cảnh một-điểm và hai-điểm của 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 để chỉ có trục z bị cắt. Phương này tạo ra phép 
chiếu phối cảnh một-điểm với một điểm ảo trên trục z. Với quang cảnh trong hình 6-
11(c), mặt phẳng chiếu cắt cả hai trục x và z nhưng không cắt trục y. Kết quả, phép chiếu 
phối cảnh hai-điểm này chứa cả hai điểm ảo: trên trục x và trên trục z. 
6.3. Biến đổi hệ tọa độ quan sát (hệ quan sát) 
 Việc tạo ra quang cảnh của một đối tượng trong không gian ba chiều thì tương tự 
như việc chụp ảnh. Chúng ta có thể đi vòng quanh và chụp các bức ảnh từ bất kỳ góc 
Trang 107 
Chương 6: Quan sát ảnh ba chiều 
nhìn nào, ở các khoảng cách khác nhau, và với các hướng camera khác nhau. Những gì 
xuất hiện trong kính ngắm được chiếu lên bề mặt film phẳng. Kiểu len của camera, cái 
mà chúng ta dùng để xác định phần nào của đối tượng hoặc cảnh vật xuất hiện trên bức 
ảnh sau cùng. Các ý tưởng này đựợc kết hợp chặt chẽ trong một gói đồ họa. Chúng ta yêu 
cầu người sử dụng chỉ rõ một điểm để từ đó quan sát các đối tượng và chỉ ra bao nhiêu 
cảnh cần được chứa đựng vào trong hiển thị sau cùng. 
6.3.1. Xác định mặt phẳng quan sát 
 Người dùng chỉ định rõ cách nhìn cụ thể cảnh bằng việc định nghĩa một mặt 
phẳng quan sát (view plane). Mặt phẳng quan sát là bề mặt để ta chiếu quang cảnh của 
một đối tượng lên đó. Chúng ta có thể nghĩ về nó như film trong một camera, cái được bố 
trí và được định hướng để đặt các bức ảnh được yêu cầu vào. Mặt phẳng quan sát được 
xây dựng bằng việc định rõ hệ quan sát (view coordinate system), như được trình bày 
trong hình 6-12. Các vị trí trên hệ tọa độ thế giới thực s ... nt ở đằ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 
Chương 7: Khử các mặt kuất và đường khuất 
được xác định. Sự đòi hỏi không gian lưu trữ cho vùng đệm độ sâu có thể được 
xác định như thế nào từ định nghĩa các đối tượng để được hiển thị? 
6. Phát triển một chương trình cài đặt thuật toán scan-line để hiển thị các mặt nhìn 
thấy được của một đối tượng được định nghĩa bất kỳ nằm trước vùng quan sát. 
Dùng các bảng đa giác và bảng cạnh (polygon table, edge table) để lưu trữ sự 
định nghĩa của đối tượng, và dùng kỹ thuật cố kết để tính các điểm dọc theo và 
giữa các đường quét. 
7. Cài đặt một chương trình để hiển thị các mặt nhìn thấy được của một khối đa 
diện lồi, dùng các thuật toán của họa sĩ (painter’s algorithm). Tức là, các bề 
mặt phải được sắp theo độ sâu và được vẽ lên màn hình từ sau đến trước. 
8. Mở rộng chương trình của bài 7 để hiện thị một đối tượng được định nghĩa bất 
kỳ với các mặt phẳng, dùng các kiểm tra sắp xếp độ sâu (depth-sorting checks) 
để có các mặt theo thứ tự sắp hợp lý. 
9. Cho các ví dụ về các trường hợp mà tại đó hai phương pháp đã được thảo luận 
về kiểm tra 3 trong các thuật toán phân chia vùng sẽ thất bại để từ đó chỉ ra một 
cách đúng đắn một mặt bao quanh có thể che khuất tất cả các mặt. 
10. Phát triển một thuật toán có thể kiểm tra một mặt được cho tương tác với một 
vùng chữ nhật để quyết định xem nó là một mặt bao quanh, nằm chồng, bên 
trong, hay nằm ngoài. 
11. Mở rộng các phương pháp trong bài tập 10 thành một thuật toán để sinh ra một 
biểu diễn quadtree cho các mặt nhìn thấy được của đối tượng bằng cách áp 
dụng các kiểm tra vùng con (area-subdivision tests) để xác định các giá trị của 
các phần tử quadtree. 
12. Cài đặt một thuật toán để nạp biểu diễn quadtree của bài tập 11 thành đường 
quét (raster) để hiển thị. 
13. Viết một chương trình lên hệ thống của bạn để hiển thị một biểu diễn octree cho 
một đối tượng để các mặt khuất bị loại bỏ. 
14. Phát triển một thuật toán để loại bỏ các đường khuất bằng cách so sánh mỗi 
đường trong ảnh với mỗi mặt. 
Trang 158 
Chương 7: Khử các mặt kuất và đường khuất 
15. Thảo luận làm thế nào việc tháo bỏ các đường khuất có thể được thực hiện với 
các phương pháp khử mặt khuất khác nhau. 
16. Cài đặt một thủ tục để hiển thị các cạnh bị che khuất của một đối tượng chứa 
các mặt phẳng thành những đường nét đứt. 
HẾT 
Trang 159 

File đính kèm:

  • pdfgiao_trinh_ky_thuat_do_hoa_phan_2.pdf