19
Các vấn đề của Đồ họa máy tính 1. Đồ họa là gì? Các ứng dng của đồ họa máy tính? 2. Các công nghệ hin th? Tại sao các thuật toán dựa trên đường quét (scanline) lại phù hợp vi kiến trúc phần cng của máy tính hiện ti? Với các thuật toán vẽ đường thẳng trên kiến trúc phần cng của máy tính hiện ti, chloại đường thẳng nào được vra mi thc sthng? Yếu điểm ca thiết bmành? 3. Trình bày thuật toán tô phủ loang? Nhược điểm ca thuật toán. 4. Trình bày thuật toán tô phủ loang Smith? 5. Trình bày thuật toán Fishkin? 6. Định lý Jordan hay việc kiểm tra 1 điểm có thuộc miền trong đa giác hay không? 7. Thế nào là một đường thẳng lý tưởng? 8. Trình bày cách thể hiện đường thẳng dưới dng tham st. 9. Trình bày thuật toán vẽ đoạn thng DDA? 10. Trình bày thuật toán vẽ đoạn thng Bresenham? 11. Trình bày cách kiểm tra một điểm nm phía nào đường thng? 12. Trình bày thuật toán vẽ đoạn thẳng điểm gia? 13. Trình bày thuật toán vẽ đường tròn bằng thuật toán điểm gia? 14. Các phép biến đổi? Trình bày phép tịnh tiến 2D, co giãn 2D theo gốc tọa độ, quay 2D quanh tâm? 15. Tọa độ đồng nht? Tại sao người ta sdng tọa độ thun nht ? 16. Các phép biến đổi vi tọa độ đồng nht? 17. Kết hợp các phép biến đổi? 18. Trình bày phép kéo? 19. Biu din ma trn của các phép biến đổi 3D? 20. Phép chiếu là gì? Phân loại phép chiếu? 21. Phép chiếu phi cnh? Điểm biến mt? 22. Phép chiếu song song? 23. Các thuật toán xác định bmt hin? 24. Thuật toán xác định mặt quay vào trong? 25. Thuật toán ưu tiên theo danh sách Schumacker? 26. Thuật toán sắp xếp theo chiều sâu Newell-Newell-Sancha. 27. Thuật toán BSP? 28. Thut toán Warnock? 29. Thuật toán Weiler-Atherton? 30. Thuật toán bộ đệm Z? 31. Ti sao thuật toán bộ đệm Z li thong dng? 32. Mô hình ánh sáng ? Mô hình tạo bóng ? 33. Mô hình sáng cục b? 34. Mô hình sáng toàn cục? 35. Các mô hình tạo bóng? Trli: Chƣơng 1: Giới thiu 1. Đồ họa máy tính Các ứng dng của đồ họa máy tính là: - Trong các giao diện người sdụng trên màn hình máy tính. - Vbiểu đồ trong kinh doanh, khoa học và công nghệ. - Vbản đồ. - Trong y học: siêu âm, chiếu chp,.. - Mô phỏng và hoạt nh cho trực quan hóa khóa học.

De cuong DHMT

Embed Size (px)

Citation preview

Page 1: De cuong DHMT

Các vấn đề của Đồ họa máy tính

1. Đồ họa là gì? Các ứng dụng của đồ họa máy tính?

2. Các công nghệ hiển thị? Tại sao các thuật toán dựa trên đường quét (scanline) lại phù hợp

với kiến trúc phần cứng của máy tính hiện tại? Với các thuật toán vẽ đường thẳng trên

kiến trúc phần cứng của máy tính hiện tại, chỉ loại đường thẳng nào được vẽ ra mới thực

sự thẳng? Yếu điểm của thiết bị mành?

3. Trình bày thuật toán tô phủ loang? Nhược điểm của thuật toán.

4. Trình bày thuật toán tô phủ loang Smith?

5. Trình bày thuật toán Fishkin?

6. Định lý Jordan hay việc kiểm tra 1 điểm có thuộc miền trong đa giác hay không?

7. Thế nào là một đường thẳng lý tưởng?

8. Trình bày cách thể hiện đường thẳng dưới dạng tham số t.

9. Trình bày thuật toán vẽ đoạn thẳng DDA?

10. Trình bày thuật toán vẽ đoạn thẳng Bresenham?

11. Trình bày cách kiểm tra một điểm nằm ở phía nào đường thẳng?

12. Trình bày thuật toán vẽ đoạn thẳng điểm giữa?

13. Trình bày thuật toán vẽ đường tròn bằng thuật toán điểm giữa?

14. Các phép biến đổi? Trình bày phép tịnh tiến 2D, co giãn 2D theo gốc tọa độ, quay 2D

quanh tâm?

15. Tọa độ đồng nhất? Tại sao người ta sử dụng tọa độ thuần nhất ?

16. Các phép biến đổi với tọa độ đồng nhất?

17. Kết hợp các phép biến đổi?

18. Trình bày phép kéo?

19. Biểu diễn ma trận của các phép biến đổi 3D?

20. Phép chiếu là gì? Phân loại phép chiếu?

21. Phép chiếu phối cảnh? Điểm biến mất?

22. Phép chiếu song song?

23. Các thuật toán xác định bề mặt hiện?

24. Thuật toán xác định mặt quay vào trong?

25. Thuật toán ưu tiên theo danh sách Schumacker?

26. Thuật toán sắp xếp theo chiều sâu Newell-Newell-Sancha.

27. Thuật toán BSP?

28. Thuật toán Warnock?

29. Thuật toán Weiler-Atherton?

30. Thuật toán bộ đệm Z?

31. Tại sao thuật toán bộ đệm Z lại thong dụng?

32. Mô hình ánh sáng ? Mô hình tạo bóng ?

33. Mô hình sáng cục bộ?

34. Mô hình sáng toàn cục?

35. Các mô hình tạo bóng?

Trả lời:

Chƣơng 1: Giới thiệu

1. Đồ họa máy tính là

Các ứng dụng của đồ họa máy tính là:

- Trong các giao diện người sử dụng trên màn hình máy tính.

- Vẽ biểu đồ trong kinh doanh, khoa học và công nghệ.

- Vẽ bản đồ.

- Trong y học: siêu âm, chiếu chụp,..

- Mô phỏng và hoạt ảnh cho trực quan hóa khóa học.

Page 2: De cuong DHMT

- Các hệ thống đa phương tiện, phim ảnh, truyền hình,.....

2.

- Các công nghệ hiển thị: có 2 công nghệ chính là:

Các thiết bị hiển thị véc-tơ.

Các thiết bị hiển thị mành.

(Các thiết bị hiển thị tinh thể lỏng là mới được áp dụng gần đây.)

- Các thuật toán đường quét phù hợp với kiến trúc phần cứng của máy tính hiện tại vì

một số ƣu điểm sau:

Không tốn nhiều bộ nhớ.

Khả năng tô phủ các vùng hiển thị với một màu hoặc một mẫu nhất định là tốt và

giá thành thấp.

- Các loại đƣờng thẳng đƣợc vẽ ra thật sự thẳng là: các đường thẳng song song với

trục tọa độ hay các đường thẳng có góc 45 độ so với trục tọa độ,

- Yếu điểm của thiết bị mành:

Có sự rời rạc được tạo ra do cách biểu diễn thông qua điểm.

Xảy ra hiện tượng lỗi lấy mẫu được gọi là răng cưa khi vẽ các đường thẳng, đa

giác…độ chính xác phụ thuộc vào độ phân giải của thiết bị đầu ra.

Chƣơng 2: Các khái niệm cơ bản

2. Đoạn thẳng lý tƣởng là:

- Đoạn thẳng trông phải thẳng.

- Phải bắt đầu và kết thúc đúng điểm.

- Phải có mật độ điểm đều nhau.

- Phải có mật độ điểm không phụ thuộc vào độ dài và hệ số góc của đoạn thẳng.

- Phải được vẽ ra một cách nhanh chóng.

3. Các bƣớc xử lý đồ họa:

Các thuật ngữ:

Các bƣớc xử lý luồng đồ họa 3D:

Page 3: De cuong DHMT

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ộc vù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ỗng thì pop điểm (x,y) ra

pop(x, y);

if Inside(x, y) { // Nếu (x,y) thuộc vùng tô phủ

FillRight(); FillLeft(); // Tô phủ các đoạn có chứa điểm

ScanHi(); ScanLo(); //Quét các đoạn trên và dưới đoạn hiện tại

Page 4: De cuong DHMT

}

}

}

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 trong đ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

điểm không thuộc vùng tô phủ

if(tx <= rx){

Page 5: De cuong DHMT

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 ;

*) Thuật toán :

Page 6: De cuong DHMT

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ì y bắ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ộng thê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;

Page 7: De cuong DHMT

}

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) = 0 và D0 = dy – dx/2 ;

Với di <= 0 ta có:

Di = F(xi+2, yi + 0,5) = F(xi, yi) + a = di + dy ;

Với di > 0 ta có:

Di = F(xi+2, yi + 1,5) = F(xi, yi) + a + b = di + 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;

Page 8: De cuong DHMT

*) 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ên P0 = 1- r ;

Page 9: De cuong DHMT

*) 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

Page 10: De cuong DHMT

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ổ.

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

Page 11: De cuong DHMT

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 + T

Co giãn 2D theo gốc tọa độ

S= 𝑠𝑥 00 𝑠𝑦

P’= S * P tức 𝑥′𝑦′

= 𝑠𝑥 00 𝑠𝑦

∗ 𝑥𝑦

Quay 2D ngược chiều kim đồng hồ quanh tâm

R= 𝑐𝑜𝑠𝛳 −𝑠𝑖𝑛𝛳𝑠𝑖𝑛𝛳 𝑐𝑜𝑠𝛳

P’= R * P tức 𝑥′𝑦′

= 𝑐𝑜𝑠𝛳 −𝑠𝑖𝑛𝛳𝑠𝑖𝑛𝛳 𝑐𝑜𝑠𝛳

∗ 𝑥𝑦

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 00 𝑠𝑦 0

0 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𝑠𝑖𝑛𝛳 𝑐𝑜𝑠𝛳 0

0 0 1

Phép kéo 2D trong tọa độ đồng nhất

SHx = 1 𝑎 00 1 00 0 1

đối với trục x

SHy = 1 0 0𝑏 1 00 0 1

đối với trục y

Page 12: De cuong DHMT

Kế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 00 𝑠𝑦 0 0

0 0 𝑠𝑧 00 0 0 1

Quay 3D tại gốc tọa độ trong hệ tọa độ đồng nhất : cần xác định trục quay

Rz =

𝑐𝑜𝑠𝛳 −𝑠𝑖𝑛𝛳 0 0𝑠𝑖𝑛𝛳 𝑐𝑜𝑠𝛳 0 0

0 0 1 00 0 0 1

đối với trục z

Ry =

1 0 0 00 𝑐𝑜𝑠𝛳 −𝑠𝑖𝑛𝛳 00 𝑠𝑖𝑛𝛳 𝑐𝑜𝑠𝛳 00 0 0 1

đối với trục y

Rx =

𝑐𝑜𝑠𝛳 0 𝑠𝑖𝑛𝛳 00 1 0 0

−𝑠𝑖𝑛𝛳 0 𝑐𝑜𝑠𝛳 00 0 0 1

đối với trục x

PHÉP CHIẾU

Phé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.

Page 13: De cuong DHMT

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âm chiếu đến mặt phẳng chiếu tăng lên và ngược lại.

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

Page 14: De cuong DHMT

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

đường song song được bảo toàn , tuy nhiên các góc thì không .

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

Page 15: De cuong DHMT

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

đặt tại gốc tọa độ

x’=𝑑∗𝑥

𝑧 =

𝑥

𝑧/𝑑 y’=

𝑑∗𝑦

𝑧 =

𝑦

𝑧/𝑑

Ma trận biến đổi P = Mper * P

𝑥′𝑦′

𝑧′𝑊

=

1 0 0 00 1 0 00 0 1 00 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

Page 16: De cuong DHMT

Ma trận biến đổi P = Mper * P

𝑥′𝑦′

𝑧′𝑊

=

1 0 0 00 1 0 00 0 0 00 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 ;

Ma trận biến đổi

𝑥′𝑦′

𝑧′𝑊

=

1 0 0 00 1 0 00 0 0 00 0 0 1

𝑥𝑦𝑧1

CHƢƠNG 6 MÔ HÌNH HÓA ĐỐI TƢỢNG

Có 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.

Page 17: De cuong DHMT

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

Page 18: De cuong DHMT

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 sắp xếp theo chiều sâu Newell-Newell-Sancha

Sắp xếp các đối tượng theo chiều sâu dựa trên giá trị z.

d. 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

- Lặp lại với các cành con

Duyệt cây đa giác và vẽ đa giác ra bộ đệm

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)

}

}

Page 19: De cuong DHMT

Ở đâ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

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)

1

4 5

2

3

1a

1b

5a

5b

3a 3b

Điểm

nhìn

4

1a 1b

5a 5b

3a 3b

2