Các vấn đề
Các vấn đề ccủa Đồủa Đồ hhọa máy tínhọa máy tính 1.
1. ĐồĐồhhọa là gì? Các ứọa là gì? Các ứng dng dụụng cng của đồủa đồhhọa máy tính?ọa máy tính? 2.
2. Các công nghệCác công nghệhihiểển thn thịị? T? Tại sao các thuật toán dựa trên đường quét (scanline) lại phù hợ ại sao các thuật toán dựa trên đường quét (scanline) lại phù hợ pp v
vớ ớ i kii kiến trúc phầến trúc phần cn cứứng cng của máy tính hiệủa máy tính hiện tn tạại? Vi? Với các thuật toán vẽới các thuật toán vẽ đườ đườ ng thng thẳng trên k ẳng trên k iiến trúcến trúc ph
phầần cn cứứng ng ccủa máy tính hiệủa máy tính hiện tn tạại, chi, chỉỉ loloại đườ ại đườ ng thng thẳng nào đượ ẳng nào đượ c c vvẽẽ ra mra mớ ớ i i ththựực sc sựự ththẳẳng? Yng? Yếếuu
điể
điểm cm củủa thia thiếết bt bịị mành?mành? 3.
3. Trình bày thuật toán tô phủTrình bày thuật toán tô phủ loang? Nhược điểloang? Nhược điểm cm củủa thua thuật toán.ật toán. 4.
4. Trình bày thuật toán tô phủTrình bày thuật toán tô phủloang Smith?loang Smith? 5.
5. Trình bày thuật toán FishkinTrình bày thuật toán Fishkin?? 6.
6. Định lý Jordan hay việĐịnh lý Jordan hay việc kic kiểm tra 1 điểm có thuộểm tra 1 điểm có thuộc mic miền trong đa giác hay không?ền trong đa giác hay không? 7.
7. ThThếế nào là một đườ nào là một đườ ng thng thẳng lý tưở ẳng lý tưở ng?ng? 8.
8. Trình bày cách thểTrình bày cách thểhihiện đườ ện đườ ng thng thẳng dướ ẳng dướ i di dạạng tham sng tham sốố t.t. 9.
9. Trình bày thuật toán vẽTrình bày thuật toán vẽ đoạđoạn thn thẳẳng DDA?ng DDA? 10.
10.Trình bày thuật toán vẽTrình bày thuật toán vẽ đoạđoạn thn thẳẳng Bresenham?ng Bresenham? 11.
11.Trình bày cách kiểTrình bày cách kiểm tra mm tra một điểột điểm nm nằằmm ở ở phía nào đườ phía nào đườ ng thng thẳẳng?ng? 12.
12.Trình bày thuật toán vẽTrình bày thuật toán vẽ đoạđoạn thn thẳng điểẳng điểm gim giữữa?a? 13.
13.Trình bày thuật toán vẽTrình bày thuật toán vẽ đường tròn bằđường tròn bằng thung thuật toán điểật toán điểm gim giữữa?a? 14.
14.Các phép biến đổi? Trình bày phép tịCác phép biến đổi? Trình bày phép tịnh tinh tiến 2D, co giãn 2D theo gốến 2D, co giãn 2D theo gốc tc tọa độọa độ, quay 2D, quay 2D
quanh tâm? quanh tâm?
15.
15. TTọa độọa độ đồđồng nhng nhấất? Tt? Tại sao ngườ ại sao ngườ i ta si ta sửử ddụụng tng tọa độọa độthuthuầần nhn nhấất ?t ? 16.
16.Các phép biến đổCác phép biến đổi vi vớ ớ i ti tọa độọa độ đồđồng nhng nhấất?t? 17.
17. KKếết ht hợp các phép biến đổợp các phép biến đổi?i? 18.
18.Trình bày phép kéo?Trình bày phép kéo? 19.
19. BiBiểểu diu diễễn ma trn ma trậận cn của các phép biến đổủa các phép biến đổi 3D?i 3D? 20.
20.Phép chiếu là gì? Phân loại phép chiếPhép chiếu là gì? Phân loại phép chiếu?u? 21.
21.Phép cPhép chihiếếu phu phốối ci cảảnh?nh? ĐiểĐiểm bim biếến mn mấất?t? 22.
22.Phép chiếPhép chiếu song song?u song song? 23.
23.Các thuật toán xác địCác thuật toán xác định bnh bềềmmặặt hit hiệện?n? 24.
24. ThuThuật toán xác địật toán xác định mnh mặt quay vào trong?ặt quay vào trong? 25.
25. ThuThuật toán ưu tiên theo danh sách Schumacker?ật toán ưu tiên theo danh sách Schumacker? 26.
26. ThuThuật toán sắật toán sắp xp xếếp theo chip theo chiều sâu Newellều sâu Newell-Newell-Sancha.-Newell-Sancha. 27.
27. ThuThuật toán BSP?ật toán BSP? 28.
28. ThuThuậật tot toán Warnock?án Warnock? 29.
29. ThuThuật toán Weiler ật toán Weiler -Atherton?-Atherton? 30.
30. ThuThuật toán bộật toán bộ đệđệm Z?m Z? 31.
31. TTạại sao thui sao thuật toán bộật toán bộ đệđệm Z lm Z lạại thong di thong dụụng?ng? 32. 32.Mô hình ánh sáng ? Mô hình tạo bóng ?Mô hình ánh sáng ? Mô hình tạo bóng ? 33. 33.Mô hình sáng cụMô hình sáng cục bc bộộ?? 34. 34.Mô hình sáng toàn cụMô hình sáng toàn cục?c? 35. 35.Các mô hình tạo bóng?Các mô hình tạo bóng? Tr Trảảllờ ờ i:i:
Chƣơng 1: Giớ
Chƣơng 1: Giớ
i thii thiệệ
uu1
1. Đồ. Đồhhọa máy tínhọa máy tính làlà
Các ứ
Các ứ ng dng dụụng cng của đồủa đồhhọa máy tínhọa máy tính là:là:
-- Trong các giao diện ngườ Trong các giao diện ngườ i si sửử ddụng trên màn hình máy tính.ụng trên màn hình máy tính. -- VVẽẽbibiểu đồểu đồtrong kinh doanh, khoa htrong kinh doanh, khoa học và công nghệọc và công nghệ..
-- VVẽẽbbản đồản đồ..
-- Trong y hTrong y học: siêu âm, chiếọc: siêu âm, chiếu chu chụụp,..p,..
-- CáCác hc hệệththống đa phương tiệống đa phương tiện, phimn, phim ảảnh, truynh, truyền hình,...ền hình,... 2. 2. -- CácCác công nghệcông nghệhihiểển thn thịị:: có 2 công nghệcó 2 công nghệ chính là:chính là: Các thiế Các thiết bt bịịhihiểển thn thịị vécvéc--tơ.tơ. Các thiế Các thiết bt bịịhihiểển thn thịị mành.mành. (Các thiế
(Các thiết bt bịị hihiểển thn thịị tinh thtinh thểểllỏng là mới được áp dụỏng là mới được áp dụng gng gần đây.)ần đây.)
-- Các thuật toán đườ Các thuật toán đườ ng qung quét phù hợ ét phù hợ p vp vớ ớ i kii kiến trúc phầến trúc phần cn cứứng cng của máy tính hiệủa máy tính hiện tn tại vìại vì m
mộột st sốố ƣu điểƣu điểmm sau:sau:
Không tố
Không tốn nhin nhiềều bu bộộnhnhớ ớ .. Kh
Khảả năng tô phủnăng tô phủ các vùng hiểcác vùng hiển thn thịị vvớ ớ i mi một màu hoặột màu hoặc mc mộột mt mẫẫu nhu nhất định là tốt và giá thànhất định là tốt và giá thành th
thấấp.p.
-- Các loại đƣờ Các loại đƣờ ng thng thẳng đƣợ ẳng đƣợ c vc vẽẽ ra thra thậật st sự ự ththẳng làẳng là: các đườ : các đườ ng thng thẳẳng song song vng song song vớ ớ ii tr
trụục tc tọa độọa độ hay các đườ hay các đườ ng thng thẳng có góc 45 độẳng có góc 45 độso vso vớ ớ i tri trụục tc tọa độọa độ,, -- YYếu điểếu điểm cm củủa thia thiếết bt bịị mành:mành:
Có sự
Có sựrrờ ờ i ri rạc đượ ạc đượ c tc tạo ra do cách biểạo ra do cách biểu diu diễn thông qua điểễn thông qua điểm.m. X
Xảảy ra hiy ra hiện tượ ện tượ ng llng ỗỗi i llấấy my mẫu đượ ẫu đượ c c ggọi là răng cưa khi vẽọi là răng cưa khi vẽ các đườ các đườ ng thng thẳng, đa giác…độẳng, đa giác…độ
chính xác phụ
chính xác phụthuthuộc vào độộc vào độ phân giả phân giải ci củủa thia thiếết bt bịị đầđầu ra.u ra.
Chƣơng 2: Các khái niệm cơ bả
Chƣơng 2: Các khái niệm cơ bả
nn2.
2. ĐoạĐoạn thn thẳng lý tƣởng là:ẳng lý tƣởng là:
-- ĐoạĐoạn thn thẳng trông phảẳng trông phải thi thẳẳng.ng.
-- PhPhảải bi bắt đầu và kết thúc đúng điểắt đầu và kết thúc đúng điểm.m. -- PhPhải có mật độải có mật độ điểm đềđiểm đều nhau.u nhau.
-- PhPhải có mật độải có mật độ điểm không phụđiểm không phụthuthuộc vào độ dài và hệộc vào độdài và hệ ssốố góc của đoạgóc của đoạn thn thẳẳng.ng. -- PhPhải đượ ải đượ c vc vẽẽra mra một cách nhanh chóng.ột cách nhanh chóng.
3. 3. Các bƣớ Các bƣớ c xc xử ử lý đồlý đồ hhọọa:a: Các thuậ Các thuật ngt ngữữ:: Các bƣớ Các bƣớ c xc xử ử lý luồng đồlý luồng đồhhọọa 3D:a 3D:
Các bƣớ c xử lý đồ họa 2D:
Chƣơng 3: Các thuật toán mành hóa
5. Thuật toán tô phủ (Fill Problem)
Bài toán tô phủloang(Flood fill problem): V ới hai màu khác nhau c và c’, một t ập các
điểm A có cùng màu c đượ c bao quanh bởi các điểm có màu khác với c và c’, tìm thuật toán thay
màu của t ấ t cả các điể m thuộc A và chỉ các điểm này thành màu c’. Thuật toán tô phủ:
void BFA(int x, int y){ if Inside(x, y) {
Set(x,y) ;
BFA(x, y-1) ; BFA(x, y+1); BFA(x-1, y) ; BFA(x+1, y); }
}
Thuật toán này dùng để tô phủ, với hàm Inside là đểkiểm tra xem điểm (x,y) có thuộc vùng cần tô phủ không. Nếu (x,y) thuộcvùng tô phủ thì tô phủ nó và kiểm tra 4 điểm ở xung quanh nó.
Nhược điểm của thuật toán này là phải dùng đến 4 lần gọi đệquy.
Cải tiến của thuật toán tô phủ đơn giản này là thuật toán tô phủSmith vớ i hai lần gọi đệ quy.
// Các biến toàn cục Int x, y, lx, rx ;
Fill (int seedx, int seedy){ x := seedx; y := seedy;
if not (Inside(x, y)) then exit; // N ếu (x, y) không thuộc vùng tô phủ thì thoát push(x, y); // push (x,y) vào stack
while StackNotEmpty() do { // đến khi stack còn không rỗ ngthì pop điể m (x,y) ra pop(x, y);
if Inside(x, y) { // N ế u (x,y) thuộc vùng tô phủ
ScanHi(); ScanLo(); //Quét các đoạn trên và dưới đoạn hiện t ại }
} }
FillRight(){ // Tô phủ các điểm bên phải điểm đang xét đến điể m phải nhấ t của đoạn int tx;
tx := x;
//Đi từ trái sang phải và thiế t lập các điể m của đoạn trong khi đi While Inside(tx, y) and (tx < = XMAX) do
Set(tx, y); tx := tx +1; }
rx := tx -1; // Ghi lại chỉ số của điể m phải nhấ t tron g đoạn }
FillLeft(){ //Tô phủ các điểm bên trái điểm đang xét đến điểm trái nhấ t của đoạn int tx;
tx := x;
//Đi từ phải sang trái và thiế t lập các điể m của đoạn trong khi đi While Inside(tx, y) and (tx >= XMIN) do {
Set(tx, y); tx:= tx -1; }
lx := tx +1; //Ghi lại chỉ số của điểm trái nhất trong đoạn }
ScanHi(){// Quét các điể m giữa lx và rx trong dòng quét,Cho vào ngăn xếp đoạn trái nhất //trong các đoạn tìm thấy, không thiế t lậ p bấ t cứ điểm nào trong giai đoạn này
int tx;
if y+1 > YMAX then exit; // nếu điểm đang xét vượt ra ngoài biên thì thoát tx := lx; //Đặt tx là bằng điểm trái nhấ t
while tx <= rx do{ // Đi từ điểm trái nhất sang điể m phải nhấ t
while( not Inside(tx, y+1) and (tx <= rx) )do tx := tx +1; //bỏqua nhữ ng
điểm không thuộc vùng tô phủ
if(tx <= rx){
push(tx, y+1); //Chỉ lưu điểm đầu tiên của đoạn while Inside(tx, y+1) and (tx <= rx) do tx := tx + 1;
//Quét tấ t cả các điểm trong đoạn }
} }
ScanLo(){// Quét các điể m giữa lx và rx trong dòng quét,Cho vào ngăn xếp đoạn trái nhất //trong các đoạn tìm thấy, không thiế t lậ p bấ t cứ điểm nào trong giai đoạn này
int tx;
if y -1 < YMIN then exit; // nếu điểm đang xét vượt ngoài biên dưới thì thoát tx := lx; //Đặt tx là bằng điểm trái nhấ t
while tx <= rx do { // Đi từ điể m trái nhất sang điể m phải nhấ t
while not Inside(tx, y-1) and (tx <= rx) do tx := tx +1; // Bỏqua nhữ ng
if(tx <= rx){
push(tx, y-1); //chỉ lưu điểm đầu tiên của đoạn while Inside(tx, y-1) and (tx <= rx) do tx:= tx + 1; }
} }
Ví dụvềthuật toán Smith:
6. Thuật toán vẽ đƣờ ng thẳng đơn giản - Dựa vào phương trình đườ ng thẳng :
y = mx + b
- Ta có cách tiếp cận đơn giản là: tăng x rồi tính y
- Đây là cách đơn giản nhất nhưng cũng bộc lộ các nhược điểm, đó là phải sử dụng các phép
tính toán vớ i số thực, và làm tròn tọa độ nên đô chính xác không cao. 7. Thuật toán vẽ đoạn thẳng DDA
DDA – digital diferential analyzer (phân tích số hóa vi phân)
- Xét đườ ng thẳng theo phương trình tham số theo t đi qua 2 điểm (x1, y1) và (x2, y2) x(t) = x1 + t(x2 – x1)
y(t) = y1 + t(y2 - y1) - Bắt đầu vớ i t = 0.
- Tại mỗi bước tăng t thêm một lượ ng dt - Chọn dt = max(|dx|, |dy|)
- Ta có: xmớ i= xcũ+ dx/dt ; ymớ i= ycũ+ dy/dt ;
line (int x1, int y1, int x2, int y2){ float x,y ;
int dx = x2-x1 ; int dy = y2 – y1; int n = max(asb(dx), asb(dy)) ;
float dt = n; float dxdt = dx/dt; float dydt = dy/dt; x = x1; y = y1;
while(n--) // V ẽ các điể m cho hế t {
point(round(x), round(y)); // V ẽ các đ iểm (x,y) sau khi dã được làm tròn x += dxdt; y += dydt;
} }
Trong thuật toán này thì x hoặc y luôn tăng lên 1 và vẫn phải dùng đến các phép cộng số thực và 2 phép làm tròn.
Ví dụ: vẽ đoạn thẳng qua 2 điểm (1,2) và (6,5) dx = 6-1 = 5; dy = 5-2 = 3
n = max(5,3) = 5; dt = 5; dxdt = 5/5=1; dydt = 3/5 Vẽ:
x 1 2 3 4 5 6
y 2 2 3 4 4 5
8. Thuật toán vẽ đoạn thẳng Bresenham
- Giảsử đoạn thẳng đượ cvẽ ởgóc phần tám thứnhất thì x luôn tăng lên 1, ta chỉcần tính y. - Giảthiết đoạn thẳng chúng ta cần vẽ là từ (0,0) đến (a,b) với a, b là số nguyên, và 0 <= b
<= a (vì (a,b) nằm ở góc phần tám thứnhất). Ta có: xi = xi-1+ 1 = i
yi = yi-1+ b/a = i*b/a
- Ở đây chỉcần làm tròn y tớ i số nguyên gần nhất
- Y bắt đầu với giá trị 0, vậy tới giá trị nào thì ybắt đầu tăng lên 1, ta phải so sánh
y(hay là b/a, 2b/a, 3b/a….) với giá trị ½, đến khi nào y > ½ thì tăng y lên 1. Và y vẫn giữ nguyên
giá trị 1 cho đến khi giá trị đó lớn hơn 3/2 ….
- Ta chọn giá trị ban đầu là d = 2b – a, sau mỗi lần thì cộngthêm 2b vào.
Khi d >0 thì ta kiểm tra xem d có lớn hơn 2a, tiếp tục lấy d-2a, để kiểm tra xem d có lớn hơn
0 hay không.
*) Thuật toán
Bresenham(int a, int b){ // vẽ đoạn thẳ ng theo thuật toán Bresenham int d, x, y; d = 2b – a; x = 0; y = 0 ; while true do { draw(x,y); // vẽ(x, y) if x = a then exit ; if (d >= 0) { y = y +1; // N ếu d > 0 thì tăng y lên 1 và tính d sau đó cậ p nhật lại d = d – 2a; }
x = x+1; // T ại mỗi bước ta đều tăng x lên 1 và tăng d lên 2b để kiểm tra d có lớn hơn
0 không
d = d + 2b; }
}
Ví dụ: Vẽ đoạn thẳng đi qua 2 điểm (0,0) và (6,5)
Ta có d = 2b – a = 2*5 – 6 = 4 x y d 0 0 4 1 1 2 2 2 0 3 3 -2 4 3 8 5 4 6 6 5 4
9. Kiểm tra một điểm nằm trên hay dƣớ i một đoạn thẳng
Giảthiết L là một đoạn thẳng không thẳng đứng được định nghĩa bở i phương trình: F(x,y) = ax + by + c = 0
Vớ i 0 <= a <= - b , đoạn thẳng này có hệ số góc từ 0 đến 1. Ta có một hệquả quan trọng
là F(x,y) > 0 vớ i những điểm nằm trên đoạn thẳng và F(x,y) < 0 vớ i những điểm nằm dưới đoạn thẳng.
10. Thuật toán vẽ đoạn thẳng điểm giữ a
Giảthiết L là một đoạn thẳng không thẳng đứng được định nghĩa bở i phương trình:
F(x,y) = ax + by + c = 0 (1)
Vớ i 0 <= a <= - b , đoạn thẳng này có hệ số góc từ 0 đến 1. Ta có một hệquả quan trọng
là F(x,y) > 0 vớ i những điểm nằm trên đoạn thẳng và F(x,y) < 0 vớ i những điểm nằm dưới đoạn thẳng.
Các điểm pi (xi, yi) được sinh ra có tính chất là tọa độ x luôn được tăng lên 1 mỗi lần:
xi+1 = xi + 1; do đó chỉcần tính yi
Mặt khác ta có phương trình đt: y = mx + c (2)
Trong đó m là hệsố góc của phương trình, ta có:
m = dy / dx = (y2 – y1) / (x2 – x1); (3)
Thay (3) vào (2) ta có: y = dy/dx * x + c (4)
- ydx + xdy +c = 0 (5) Đồng nhất thức (1) và (5) ta có : ax + by + c = 0 và xdy – ydx + c = 0 = > a = dy và b = -dx Ta có: D0 = F(x0 ,+1, y0+ 0,5) = F(x0 , y0 ) + a + b/2 = F(x0 , y0 ) + dy – dx/2 ;nhưng vì (x0, y0) nằm trên đoạn thẳng nên F(x0, y0) = 0và D0= dy – dx/2 ; Vớ i di <= 0 ta có: Di= F(xi+2, yi+ 0,5) = F(xi, y ) + a = d i i+ dy ; Vớ i di > 0 ta có: Di= F(xi+2, yi+ 1,5) = F(xi, y ) + a + b = d i i+ dy - dx ;
Đại lượng ban đầu là d = dy – dx/2, vì không muốn làm phép chia nên ta nhân 2 với các đại
lượng ta có: d = 2dy – dx; *) Thuật toán:
DrawLine(int x0, int y0, int x1, int y1){ Int x, y, dx, dy, d, posInc, negInc;
dx = x1 – x0; dy = y1 – y0; d = 2dy – dx; posInc = 2dy; // Giá trị tăng them khi d <=0
negInc = 2(dy - dx); // Giá trị tăng them khi d >0 x = x0; y = y0; draw(x, y); while(x < x1) do { if(d <= 0) d = d + posInc; else{ d = d + negInc; y = y +1; } x = x + 1; Draw(x,y); } }
Ví dụ: Vẽ đoạn thẳng qua 2 điểm (1,2) và (6,5)
Ta có: dx = 6-1 = 5 và dy = 5-2 = 3 và d = 1 posInc = 6 và negInc =-4 x y d 1 2 1 2 3 -3 3 3 3 4 4 -1 5 4 5 6 5 1
11. Thuật toán vẽ đƣờ ng tròn điểm giữ a
Ta cũng sửdụng đại lượ ng quyết định đểquyết định xem nên chọn điểm nào đểvẽ:
Phương trình đường tròn : f(x, y) = (x - xc)2 + (y - yc)2 – r2 ; Ta vẽ đường tròn trong đoạn có hệsố góc từ 0 đến -1, vớ i x chạy từ 0 đến y ; vớ i mỗi bướ c tiếp theo của (x, y) ta sẽ có điểm tiếp theo là (x+1, y) hay (x+1, y -1) Kiểm tra : M nằm trong đường tròn(f < 0) chọn điểm tiếp theo là E M nằm ngoài (f>0) chọn điểm tiếp theo là SE SE đượ c chọn nếu dmớ i = dcũ + (2xp - 2 yp+5) = dcũ + 2 ((x+1) – (y-1) +1) E đượ c chọn nếu dmớ i = dcũ + (2xp +3) = dcũ + 2 (x+1) +1 D ban đầu bằng d0= f(1, r-1/2) = 5/4 – r đặt P = D - 1/4 nênP0 = 1- r ; *) Thuật toán :
Chƣơng 4 : Các thuật toán cắt xén
Các thuật toán cắt xén chia làm hai loại : Cắt xén đoạn thẳng – thực hiện việc cắt các đoạn thẳng bằng một hình chữ nhật hoặc một đa giác lồi và cắt xén đa giác – cắt toàn bộ đa giác bằng một đa giác khác.Thuật toán Cohen-Sutherland là thuật toán dùng cách mã hóa các đầu đoạn thẳng.
12. Thuật toán cắt xén đoạn
thẳng Cohen-Sutherland
Bài toán : Cho một đoạn [P1, P2], phải cắt nó vớ i một cử a sổ hình chữ nhật và trảvề
đoạn đƣợ c cắt [Q1, Q2] hoặc trảvề đoạn rỗng nếu đoạn [P1,P2] nằm hoàn toàn ngoài cử a sổ cắt.
Bắt đầu bằng mã hóa chín khu vực phân chia bởi đườ ng thẳng chứa các cạnh của cửa sổ bằng mã 4 bit. Nếu một điểm bất k ỳ, c(P) = x3x2x1x0 vớ i xi bằng 0 hoặc 1 theo mã này.
0110 0010 0011
0100 0000 0001
1100 1000 1001
Các bit xi có ý nghĩa như sau:
x0 = 1 khi và chỉ khi P nằm hoàn toàn bên phải của đường biên phải.
x1 = 1 khi và chỉ khi P nằm hoàn toàn bên trên của đường biên trên.
x2 = 1 khi và chỉ khi P nằm hoàn toàn bên trái của đường biên trái.
x3 = 1 khi và chỉ khi P nằm hoàn toàn bên dướ i của đường biên dướ i. *) Thuật toán có 3 bước như sau :
Bƣớ c 1 : Mã hóa P1 và P2. Đặt c1 = c(P1) và c2 = c(P2)
Bƣớ c 2 : Kiểm tra xem một đoạn có thểloại bỏ một cách dễ dàng bằng toán tửOR hay AND :
(a) c1 OR c2 = 0 hoặ c (b) c1 AND c2 != 0
Trong trườ ng hợp (a), đoạn đó nằm hoàn toàn trong cửa sổ vì cả hai đầu của đoạn nằm trong cửa sổ và cửa sổ là hình lồi. TrảvềQ1 = P1, Q2 = P2 .
Trong trườ ng hợp (b), đoạn đó nằm hoàn toàn ngoài cửa sổ, vì cả hai đầu của đoạn nằmở một nửa của mặt phẳng không chứa cửa sổ. Trảvề đoạn rỗng.
Bƣớ c 3 : Nếu một đoạn không đượ c loại bỏmột cách dễ dàng thì ta tiến hành chưa đoạn đó
ra, sau đó lại quay lại với bướ c 1.
(a) Trướ c hết, tìm điểm đầu mút P sẽ xác định đườ ng sẽ sử dụng đểcắt. N ếu c1 = 0000, thì P1 không cần clip và đặt P là P2 và Q là P1. N ế u c1!= 0000, thì đặt P là P1 và Q là P2.
(b) Đườ ng thẳng dùng để clip được xác định bằng bit bên trái nhất mà khác không trong c(P).
(c) Lặp lại Bướ c 1-3 cho đoạn vừa cắt.
Ví dụ: Ta có c(P1) = 0110 và c(P2) = 1001
Vì c(P1) và c(P2) không bị loại bỏmột cách đơn giản nên ta phải chia P1 P2 thành các đoạn.
Ta có c(P1) = 0110 != 0 nên đặt P1 P2 thành P Q.
Đoạn thẳng dùng để clip được xác định bằng bit trái nhất khác 0 trong c(P1) là bít x2, tức là
đường biên trái. Vậy đường biên trái cắt P Q tại A(0010)
Tiếp tục cắt thì ta có bit trái nhất của Aở đây là x1, tức là đường biên trên. Vậy đường biên
trên cắt AQ tại B (0000).
Tại B(0000) thì c(B) = 0000 nên ta đặt B là P2 và Q là P1. Làm tương tự ta có các điểm cắt C, D.
Vậy sau khi cắt thì ta còn đoạn BD là nằm bên trong cửa sổ.
Thuật toán cắt xén đa giác Sutherland-Hodgman
Thực hiện bằng cách cắt toàn bộ đa giác vớ i một cạnh của cửa sổ ( chính xác là bằng nửa mặt phẳng chứa đa giác xác định bở i cạnh của cửa sổ ) , sau đó cắt tiếp đa giác mớ i vớ i cạnh tiếp
theo , và tiếp tục đến khi đa giác đượ c cắt hết bở i bốn cạnh của cửa sổ .
Có 4 trườ ng hợp tính số điểm giao của cạnh cửa số với đa giác (ko hiểu tại sao ở đây lại tính cả hướ ng ?)
Case 1 : toàn bộ tia AB là nằm trong cửa sổ-> lấy toàn bộ cạnh này Case 2 : lấy tia AB’ điểm k ết quả là B’
Case 3 : toàn bộ tia AB nằm ngoài cửa sổ -> không có điểm k ết quả Case 4 : lấy tia A’B điểm k ết quả là A’,B
CHƢƠNG 5 CÁC PHÉP CHIẾU VÀ BIẾN ĐỔI Các loại phép biến đổi Bảo tồn khoảng cách (Isometry) + Phản xạ + Quay + Tịnh tiến Bảo tồn góc (Similarity) + Co giãn đồng nhất
Bảo tồn các đườ ng thẳng song song (Affine)
+ Co giãn không đồng nhất Bảo tồn đườ ng thẳng (Collineation) + Phép chiếu phối cảnh Không bảo tồn đườ ng thẳng + Vặn + Biến hình
Xét điểm P(x,y) thực hiện biến đổi để trở thành điểm P’(x’,y’) Tịnh tiến 2D
P=
P’=′′
T=
P’ = P + TCo giãn 2D theo gốc tọa độ S=
0
0
P’= S * P tức′′
=
0
0
∗
Quay 2D ngượ c chiều kim đồng hồ quanh tâm
Sử dụng tọa độ đồng nhất đểk ết hợp 3 phép biển đối trên lại cùng bằng phép nhân.2 tọa
độ (x,y,W) và (x/W,y/W,1) thể hiện cùng mộtđiểm.
Phải có ít nhất 1 tọa độ khác 0 , (0,0,0) không xác định .Nếu W=0 , điểm đó ở vô cùng
Phép tịnh tiến 2D trong tọa độ đồng nhất
T =
1 0
0 1
0 0 1
Phép co giãn 2D tại gốc tọa độtrong tọa độ đồng nhất
S =
0 0
0
00 0 1
Phép quay ngượ c chiều kim đồng hồtại gốc tọa độ 2D trong tọa độ đồng nhất
R =
−
0
00 0 1
Phép kéo 2D trong tọa độ đồng nhất
SHx =
1
0 0 1 0 0 0 1
đối vớ i trục x SHy=
1 0 0
1 0 0 0 1
đối vớ i trục yKết hợp các phép biến đổi 2D: Đểquay 1 vật thể quanh điểm P1 ,sử dụng chuỗi 3 phép biến đổi cơ bản : Tịnh tiến sao cho P1 trùng gốc tọa độ- Quay – Tịnh tiến sao cho điểm gốc tọa
độtrở vềP1 Tịnh tiến 3D trong hệ tọa độ đồng nhất T =
1 0 0
0 1 0
0 0 1
0 0 0 1
Co giãn 3D tại gốc tọa độtrong hệ tọa độ đồng nhất
S =
0 0 0
0
0 00 0
00 0 0 1
Rz=
−
0 0
0 0 0 0 1 0 0 0 0 1
đối vớ i trục z Ry=
1 0 0 0 0 −
0 0
0 0 0 0 1
đối vớ i trục y Rx=
0
0 0 1 0 0−
0
0 0 0 0 1
đối vớ i trục x PHÉP CHIẾUPhép chiếu của đối tượng 3D được xác định bởi các tia chiếu xuất phát từ tâm chiếu đi
qua các điểm của đối tượng và giao vớ i mặt phẳng chiếu .
Nếu khoảng cách từ tâm chiếu đến mặt phẳng chiếu là hữu hạn thì phép chiếu là phối cảnh , nếu khoảng cách đó là vô hạn thì đó là phép chiếu song song. Phép chiếu phối cảnh có tâm
ở vô cùng sẽtrở thành phép chiếu song song.
Khi xác định phép chiếu phối cảnh , phải xác định chính xác tâm chiếu . Khi xác định
phép chiếu song song , phải xác định chính xác hướ ng chiếu.
Phép chiếu phối cảnh có khuynh hướ ng cho ảnh giống thật , tuy nhiên nói chung là không bảo toàn được góc cũng như các đườ ng thằng song song nên không để dùng đểbiểu diễn chính
xác bềmặt hoặc kích thước đối tượ ng.
Phép chiếu song song sử dụng để xác định chính xác kích thước và các đườ ng thằng song
song vì qua phép chiếu chúng vẫn song song với nhau , tuy nhiên nói chung các góc không đượ c bảo toàn.
a. Phép chiếu phối cảnh
Phep chiếu phối cảnh được đặc trưng bởi định luật phối cảnh xa gần và điểmảo (điểm biến mất). Phối cảnh xa gần chỉ ra rằng kích thướ c của hình chiếu sẽnhỏ đi nếu khoảng cách từ
Tập các đườ ng thẳng song song qua phép chiếu phối cảnh sẽ giao nhauở một điểm .Các
điểm này đượ c gọi là điểm biến mất.
Điểmảo chính được xác định bở i giao của các đườ ng thằng song song vớ i một trong ba trục chính x,y,z. Các phép chiếu phối cảnh được phân loại theo số điểm ảo chính : 1 điểm , 2
điểm , 3 điểm .
Phép chiếu phối cảnh 2 chiều ( có 2 điểm ảo chính) b. Phép chiếu song song
Phép chiếu trực giao đặc trưng bởi hướ ng chiếu vuông góc vớ i mặt phẳng chiếu . Khi
hướ ng chiếu song song vớ i trục chính thì tạo ra các phép chiếu mặt bằng cạnh . Phép chiếu trực
lượng là 1 trườ ng hợ p của trực giao khi mà hướ ng chiếu không song song với các trục chính .
Phép chiếu khi mà hướ ng chiếu không vuông góc vớ i mặt phẳng chiếu là phép chiếu xiên
Phép chiếu song song được đặc trưng bở i vec-to hướ ng chiếu V và mặt phẳng quan sát . Mặt phẳng quan sát được xác định bởi điểm nhìn tham chiêu Ro và vec-to pháp tuyến N . Nếu V
có cùng hướ ng với N (song song, cùng chiều) thì có phép trực giao , nếu không ta có phép chiếu
xiên.
Trực giao (mặt bên)
Phép chiếu trực giao có trục đo ( trực lượ ng ? ) sửdụng mặt phẳng chiếu không vuông
góc vớ i trục tọa độ , do đó có thẻ cho phép nhìn thấy nhiều mặt của vật thể cùng một lúc .Các
1. Phép chiếu phối cảnh
2. Phép chiếu song song – trực giao – có trục đo – cùng kích thướ c 3. Phép chiếu song song – trực giao – có trục đo
4. Phép chiếu song song – trực giao – có trục đo 5. Phép chiếu song song – xiên
6. Phép chiếu song song – xiên
Phép chiếu cùng kích thước có véc-tơ pháp tuyến của mặt phẳng chiếu tạo với các trục tọa độ các góc bằng nhau. Chỉ có 8 hướ ng thỏa mãn điều kiện.Ảnh chiếu từng cặp tạo vớ i nhau
các góc 120 độ.
c. Cơ sở toán học của các phép chiếu
Điểm P trên đối tượng có tọa độ(x,y,z) ta cần xác định tọa độ điểm ảnh (x’,y’,z’) nằm
trên mặt phẳng chiếu.Để đơn giản ta giảthiết mặt phẳng vuông góc vớ i trục z.
- Với phép chiếu phối cảnh , ta chiếu điểm P lên mặt phẳng chiếu đặt tại z=d và tâm chiếu
x’=
∗
=
/
y’=
∗
=
/
Ma trận biến đổi P = Mper * P′′′
=
1
0
0
0
0
1
0
0
0
0
1
0
0
0
1/
0
∗
1
- Vớ i một phép chiếu phối cảnh khác , ta đặt tâm chiếu trên tại z=-d , mặt phẳng chiếu tại z=0
x’=
∗
+
=
+1
y’=
∗
+
=
+1
Ma trận biến đổi P = Mper* P′′′
=
1
0
0
0
0
1
0
0
0
0
0
0
0
0
1/
1
∗
1
Công thức này cho phép d tiến tới vô cùng đểtrở thành phép chiếu song song
- Phép chiếu song song lên mặt phẳng chiếu z=0 với hướ ng chiếu trùng với véc-tơ Oz Tọa độ điểm P’(x’,y’,z’)
x’=x ; y’=y; z=0 ;
′′′
=
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
∗
1
CHƢƠNG 6 MÔ HÌNH HÓA ĐỐI TƢỢ NGCó hai nhiệm vụ chính trong việc tạo ra bứcảnh của một cảnh ba chiều đó là mô hình hóa
và kết xuất . Mô hình hóa phải ra tạo ra được các mô hình mô tả chính xác được hình dạng và diện mạo của đối tượ ng . Kết xuất đồhọa , lấy các mô hình làm đầu vào và tạo ra các giá trị điểm
ảnh cuối cùng .
Cấu trúc mành của các thiết bị hiển thị, thuật toán dựa trên đường quét hoạt động hiệu quảvới các điểm , cạnh , đa giác . Vì thế , phương pháp hiệu quảnhất hiện nay trong việc mô
hình hóa là mô hình hóa bằng đa giác . Ưu điểm chính của phương pháp này là có khả năng xử lý
dễ và nhanh . Nếu trong các thể hiện bằng đa giác , mà chỉ quan tâm đến các cạnh mà không
quan tâm đến các mặt thì đó là mô hình khung lưới . Ưu điểm của mô hình khung lưới là đơn giản , nhanh chóng , dễ dàng hình dung kết cấu nhưng lại không cho phép người dùng hình dung
toàn bộchi tiết của vật thể.
Khi một vật thể được mô hình hóa bằng đa giác , phải đảm bảo các đa giác liền k ềnhau
thì chung cạnh , các cạnh chung đỉnh thì phải có tọa độ định giống nhau . Vì thế , ngườ i ta sử dụng kiểu cấu trúc dữliệu con trỏ , trong đó con trỏ lưu trừ giá trị các đỉnh , trỏ đến danh sách
các cạnh , các cạnh trỏ đến các điểm.
Tạo lưới là quá trình phân tách một bềmặt phức tạp , các đa giác nhiều cạnh thành các
đối tượng đơn giản hơn như tam giác , tức giác. Trong đó tam giác là phù hợ p nhất vì nằm trên một mặt phẳng , có thểdễ dàng mành hóa .Các đa giác thường đượ c chuyển thành các quạt tam
giác bằng cách giữmột đỉnh làm đỉnh chung của mọi tam giác, dùng đỉnh đó là 2 đỉnh tiếp theo tạo thành một tam giác.
Tách đa giác thành các tam giác: dùng cách kiểm tra điểm nằm ở mặt phẳng nào , có thể
tách đa giác thành các tam giác . Nếu mọi điểm nằm ngoài tam giác -> lưu lại tam giác , bỏ đỉnh
đó và tiếp tục với đỉnh trái nhất tiếp theo . Nếu có một đỉnh nằm trong , tạo nên một tam giác mớ i với điểm nằm trong trái nhất .
CHƢƠNG 7 XÁC ĐỊNH CÁC BỀ MẶT HIỆN
Đểtiết kiệm thời gian và bộnhớ , chúng ta cần loại các thành phần không đóng góp vào bứcảnh cuối cùng . Một đối tượng có thể không hữu hình vì 3 lý do:
- Nằm ngoài vùng hiển thị - Quay vào trong
- Bị che bởi các đối tượng khác gần người quan sát hơn.
Có 3 dạng của thuật toán xác định mặt hiện : - Chính xác theo đối tượ ng
- Chính xác theo ảnh - Ưu tiên theo danh sách
a. Trước tiên , thự c hiện bướ c tiề n xử lý là loại bỏmặt quay vào trong
V: véc-to hướng nhìn . N véc tơ pháp tuyến của cạnh đa giác V*N >0 : mặt sau (mặt quay vào trong)
V*N <0 : mặt trướ c
V*N =0 : song song với hướng nhìn
b. Thuật toán ưu tiên theo danh sách Schumacker - Gán thứtự ưu tiên cho các mặt
- Xác định điểm nhìn
- Loại bỏmặt quay vào trong
Vấn đềcủa thuật toán là xác định thứ tự- vì thế không phải lúc nào cũng thực hiện đượ c c.Thuật toán BSP tree
BSP nguyên bản có 2 bướ c :
+ Tiền xử lý chuyển danh sách đa giác đầu vào sang dạng cấu trúc cây nhị phân gọi là cây BSP.
+ Thuật toán duyệt sẽ duyệt qua cây BSP và vẽ các đa giác ra bộ đệm khung theo thứtự từ sau ra trướ c.
Xây dựng cây BSP :
- Chọn đa giác bất k ỳ P và đặt vào gốc
- Kiểm tra các đa giác còn lại , nếu nằm cùng phía với điểm nhìn , gán chúng vào cành
bên trái . Nếu nằm khác phía với điểm nhìn , gán chúng vào cành bên phải . Nếu đa giác giao vớ i mặt phẳng chứa P thì cắt ra làm đôi và gắn mỗi nửa đa giác vào cành con
Duyệt cây đa giác và vẽ đa giác ra bộ đệm
Ở đây ta đang xét hướng nhìn là phía trướ c của P nên ta cần quan tâm đến biểu thức trong if
Chọn 4 là gốc , duyệt cây theo thứtựsau
1 4 5 2 3 1a 1b 5a 5b 3a 3b Điểm nhìn 4 1a 1b 5a 5b 3a 3b 2 Show BSP(v,T){
if T is empty then return; P:= root of T
if viewer is in front of P {
show BSP (back subtree of T) draw P
show BSP (front subtree of T) }
else {
show BSP (front subtree of T) draw P
show BSP (back subtree of T) }
Thứ tựvẽ đa giác :
3b -> 5b -> 3a -> 2 -> 1b -> 5a -> 4 -> 1a (Tại sao lại này thì đi mà hỏi cái thằng nghĩ ra
cái thuật toán)
Các loại bề mặt hiện khác – ông nào giỏi thì tự đi mà học . Hiểu đượ c chết liền .
ĐƢỜ NG CONG
Mục đính của các thuật toán là vẽ các đường cong thõa mãn một số ràng buộc trong đó quan trọng là ràng buộc nội suy , ràng buộc độ trơn tức là g(x j) = f(x j) tại một số điểm x jcố định
và đạo hàm của g và f bằng nhau tại x j N ội suy Hermite
Ta xây dựng đườ ng cong bậc ba f(t) =
3 +
2 +
+
đi qua 2 điểm P0 x0 , P1x1và có đạo hàm tại 2 điểm P0 P1là x’0 ,x’1
Đưa f(t) vềdạng ma trận F(t) =
3
2
1
*
F’(t) = 3
2 + 2
+
Vớ i t=0 -> x0=f(0) = d x’0=f’(0) = c ; Vớ i t=1 -> x1=f(1) = a + b + c + d x’1=f’(1) = 3a + 2b +c ; Ta có phép nhân ma trận
0 0 0 1 1 1 1 1 0 0 1 0 3 2 1 0
*
=
0
1′
0′
1
Ta xây dựng ma trận Hermit Mhbằng cách nghịch đảo ma trậnở trên Mh=
2−
2 1 1−
3 3−
2−
1 0 0 1 0 1 0 0 0
Ta có phương trình tính đườ ng cong bậc baở trên F(t) = tT* Mh* Gh =
3
2
1
*
2−
2 1 1−
3 3−
2−
1 0 0 1 0 1 0 0 0∗
0
1′
0′
1
Các hàm cơ sở của phép nội suy Hermit đượ c suy ra bằng cách nhân ma trân tTvớ i ma trận Hermit F(1) = 2
3−
3
2 + 1 F(2) =−
2
3 + 3
2 F(3) =
3−
2
2 +
F(4) =
3−
2 Đườ ng cong BezierTa vẽ đường cong đi qua 2 điểm P0 , P1 và 2 điểm nằm trên đườ ng tiếp tuyến đi qua P0 ,
P1 là P2 và P3 . Hai điểm này đượ c gọi là điểm điều khiển .
F(t) = tT* Mh* Gh = tT* Mh* Mhb* Gb Trong đó Gh=
0
1′
0′
1
Gb =
0
2
3
1
Gh = Mhb* GbTa có x’0 và x’1 là hệsố góc của tiếp tuyến tại điểm P0 và P1 . Vì thế
′
0 =∗
2−
0
;
′
1 =∗
1−
3
Do P2 , P3 là 2 điểm tùy ý chạy trên tiếp tuyến nên ta có thểchọn alpha , beta tùy ý
Do trong sách chọn
= 3
= 3nên tao cũng thế. Ta có Mhb=
1 0 0 0 0 0 0 1−
3 3 0 0 0 0−
3 3
Nhân ma trận Hermit Mhvới ma trân Mhbta đượ c ma trận Bezier
Mb = Mh* Mhb =
−
1 3
−
3 13
−
6 3 0−
3 3 0 01 0 0 0
Tương tự Hermit , các hàm cơ sở của Bezier đượ c suy ra bằng cách nhân ma trận Bezier vớ i ma trận tT.
CHƢƠNG 9: ÁNH SÁNG
Các mô hình sáng là các luật đơn giả
n vềtương tác giữ
a vậ
t thểvà ánh sáng.
Mô hình tạ
o bóng là để
thiế
t lập màu sắc và cường độsáng tạ
i tấ
t cảcác điểm trên bề
mặ
t.một nguồn sáng hữu hình. Nó bỏ qua sự phản
quang gi qua s truy
x
Mô hình sáng cục b
Mô hình sáng cục bộ là mộ hình sáng trực tiếp từ
ữa đối tượng và bỏ ự ền ánh sáng trong môi trườ ng.
Mô hình sáng cục bộdựa trên lý thuyết tia, coi ánh sáng phản quang có 3 thành phần:
thành phần môi trường(ambient), thành phần khuếch tán(diffuse) và thành phần phản
Ánh sáng môi trường là một thiết lập ánh sáng có cường độ không đổi trong một cảnh vật. Ánh sáng môi trường là một kiểu mô hình tự phát sáng đểbắt chướ c sự phản quang giữa vật thể.
Thành phần ánh sáng môi trường có dạ ng:
(
)
(
)trong đó
(
) cường độ ánh sáng môi trườ ng với bước sóng
và
(
)
[0, 1]là hệsố phản quang của môi trườ ngThành phần ánh sáng khuếch tán có dạ ng :
(
)
(
)
trong đó
(
) cường độnguồn sáng đến điểm p và
(
)
[0, 1]là hệsố phản quang khuếch tán của môi trường và
là hệsố khuếch tán.Thành phầ n phả n chiếu có dạ ng :
(
)
Trong đó
là hệsố phản chiếu và
là hệsố phản chiếu , là một hàm của góc theeta,nhưng thường được đặt từ 0 đến 1.
a) Mô hình sáng Bouknight: là mô hình sáng chỉ quan tâm đến ánh sáng môi trường và
ánh sáng khuếch tán.
I(
) =
(
)
(
) +
(
)
(
)
b) Mô hình phản chiếu Phong: là mô hình sáng quan tâm đến cả ánh sáng môi trườ ng,
ánh sáng k huếch tán và ánh sáng phản chiếu. I(
) =
(
)
(
) +
(
)(
(
)
+
)Mô hình sáng toàn cục:
Mô hình truyền ánh sáng toàn cục tính đến sự truyền ánh sáng gián tiếp có phản quang trong cảnh vật.
Các mô hình tạo bóng:
Trong đó chủyếu xéttạo bóng Gouraud và tạo bóng Phong.
a) T ạo bóng Gouraud: là sự mô phỏng các bề mặ t nhẵn và mờ .
Đặc điểm là tính vectơ pháp tuyến ở các đỉnh, tiếp theo tính cường độ của mỗi đỉnh đa
giác và sau đó nội suy ra toàn bộ đa giác.
Đặc trưng của mô hình tạo bóng Gouraud là chỉ quan tâm tới giá trị độ sángtại một điểm A mà không quan tâm đến vecto pháp tuyến tại A.(nội suy cường độ ánh sáng tại mỗi đỉ nh của
Ví dụ:giảsử đã biết độ sáng tại I1, I2, I3, ta tính độ sáng tại điểm I theo thuật toán dòng
quét. Tatính độ sáng tại điểm A, B bằng nội suy tuyến tính các giá trị độ sáng tại I1-I3 và I2-I3. Giảsửtỷlệkhoảng cách giữa các đỉnh được quy định như hình vẽ.
Ta tính được độ sáng: Tại A:
=α
1 + (1-α)
3 Tại B:
=β
2 + (1-β)
3 Vậy tại I ta tính được độ sáng: I =φ
+ (1-φ)
=φα
1 + (β -φβ)
2 + (φβ – φα- β)
3 + 1 b) T ạo bóng Phong: là sự mô phỏng các bề mặt bóngĐặc điểm là tính vecto pháp tuyến tại tất cả các điểm (còn gọi là t ạo bóng nội suy vecto
pháp tuyế n).
Đặc trưng của mô hình tạo bóng Phong là quan tâm tới giá trị độ sángtại một điểm Avà cả đến vecto pháp tuyến tại A.