Tải bản đầy đủ (.pdf) (162 trang)

Bài giảng chi tiết về đồ họa máy tính

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.99 MB, 162 trang )

ĐỒ HỌA MÁY TÍNH

Hiển thò đối tượng hai chiều
Một số khái niệm
• Cửa sổ (window) là một vùng được chọn để hiển thò
trong hệ tọa độ thế giới thực.
• Vùng quan sát (viewport) là vùng được chọn trên
thiết bò hiển thò để các đối tượng ở trong cửa sổ ánh
xạ vào.
• Cửa sổ xác đònh cái gì được thấy trên thiết bò hiển
thò, còn vùng quan sát xác đònh nơi nào nó sẽ được
hiển thò.
• Quá trình ánh xạ một vùng đònh nghóa trong hệ tọa
độ thế giới thực vào một vùng trong hệ tọa độ thiết
bò được gọi là phép biến đổi hệ quan sát (viewing
transformation).

Window

Viewport

ywmax

yvmax

yvmin

ywmin

xwmin


Dương Anh Đức, Lê Đình Duy

xwmax

xvmin

xvmax

Hiển thò đối tượng hai chiều 1/7


ĐỒ HỌA MÁY TÍNH

Qui trình hiển thò đối tượng hai chiều
• Trước tiên, các đối tượng sẽ được mô tả bằng các đối
tượng đồ họa cơ sở và các thuộc tính của chúng trong
từng hệ tọa độ cục bộ (modeling coordinates - MC)
nhằm đơn giản hóa và tận dụng các đặc trưng riêng
của từng loại.
• Sau đó, chúng ta sẽ dùng các phép biến đổi hệ tọa độ
để chuyển các mô tả từ các hệ tọa độ cục bộ này
sang một hệ tọa độ thế giới thực (world coordinates WC) duy nhất chứa toàn bộ các đối tượng thành
phần. Phép chuyển đổi này được gọi là phép chuyển
đổi mô hình (modeling coordinates transformation).
• Tiếp theo, chúng ta sẽ đònh một hệ tọa độ quan sát
(viewing coordinates - VC), là hệ tọa độ mô tả vò trí
của người quan sát đối tượng. Nhờ việc sử dụng hệ
tọa độ này mà cùng một mô tả, các đối tượng có thể
được quan sát ở nhiều góc độ và vò trí khác nhau.
• Sau khi chuyển các mô tả đối tượng từ hệ tọa độ thế

giới thực sang hệ tọa độ quan sát, chúng ta sẽ đònh
nghóa cửa sổ trong hệ tọa độ này, đồng thời đònh
nghóa vùng quan sát trong hệ tọa độ thiết bò chuẩn
(normalized device coordinates - NDC) có tọa độ các
chiều thay đổi trong khoảng từ 0 đến 1.
• Sau khi thực hiện phép ánh xạ từ cửa sổ sang vùng
quan sát, tất cả các phần của đối tượng nằm ngoài
vùng quan sát sẽ bò xén (clip) và toàn bộ những gì
nằm trong vùng quan sát sẽ được ánh xạ sang hệ tọa
độ thiết bò (device coordinates - DC).
Dương Anh Đức, Lê Đình Duy

Hiển thò đối tượng hai chiều 2/7


ĐỒ HỌA MÁY TÍNH

• Việc đưa ra hệ tọa độ thiết bò chuẩn nhằm giúp cho
việc tương thích dễ dàng với nhiều loại thiết bò hiển
thò khác nhau.
• Bằng cách thay đổi vò trí của vùng quan sát chúng ta
có thể quan sát các đối tượng tại các vò trí khác nhau
trên màn hình hiển thò, đồng thời, bằng cách thay
đổi kích thước của vùng quan sát, chúng ta có thể
thay đổi kích thước và tính cân xứng của các đối
tượng được hiển thò.
• Chúng ta có thể thực hiện các hiệu ứng thu phóng
bằng cách ánh xạ các cửa sổ có kích thước khác nhau
vào vùng quan sát có kích thước cố đònh. Khi các
cửa sổ được thu nhỏ, phần nằm trong cửa sổ sẽ được

phóng to giúp chúng ta dễ dàng quan sát các chi tiết
mà không thể thấy được trong các cửa sổ lớn hơn.
MC

Chuyển đổi từ hệ
tọa độ cục bộ
sang hệ tọa độ
thế giới thực

WC

Chuyển đổi từ hệ
tọa độ thế giới thực
sang hệ tọa độ
quan sát

Dương Anh Đức, Lê Đình Duy

VC

Chuyển đổi từ hệ tọa
độ quan sát sang hệ
tọa độ thiết bò chuẩn

NDC

Ánh xạ từ hệ tọa
độ thiết bò
chuẩn sanghệ
tọa độ thiết bò


DC

Hiển thò đối tượng hai chiều 3/7


ĐỒ HỌA MÁY TÍNH

Hệ tọa độ quan sát
• Hệ tọa độ quan sát :
♦ Chọn điểm P0 (x 0 , y0 ) trong hệ tọa độ thế giới thực làm
gốc tọa độ.
♦ Vector V mô tả hướng quan sát để đònh hướng cho trục
tung yv của hệ tọa độ. Vector V được gọi là view-up
vector.

• Từ V chúng ta có thể tính được các vector đơn vò
v = (v x , v y ) và u = (u x , u y ) tương ứng cho các trục tung
yv và trục hoành x v của hệ tọa độ. Các vector đơn vò
này sẽ được dùng để tạo thành hai dòng đầu tiên của
ma trận quay M R để đưa các trục x v y v trùng với
các trục x w yw của hệ trục tọa độ thế giới thực.

• Ma trận của phép chuyển một điểm trong hệ tọa độ
thế giới thực sang hệ tọa độ quan sát :
M WC ,VC = M T M R , với MT là phép tònh tiến gốc tọa độ
hệ quan sát về gốc tọa độ hệ tọa độ thế giới thực.
yworld

yworld


yview

yv
iew

y0
T

xview
x0

xworld

xworld

R

xv
iew

(a)

Dương Anh Đức, Lê Đình Duy

(b)

Hiển thò đối tượng hai chiều 4/7



ĐỒ HỌA MÁY TÍNH

Hệ tọa độ thiết bò chuẩn
• Do cách đònh nghóa của các hệ tọa độ thiết bò khác
nhau nên một hình ảnh hiển thò được trên thiết bò
này chưa chắc hiển thò chính xác trên thiết bò kia.
Chính vì vậy cần phải xây dựng hệ tọa độ thiết bò
chuẩn đại diện chung cho các thiết bò để có thể mô
tả các hình ảnh của thế giới thực mà không phụ
thuộc vào bất cứ thiết bò nào.
• Trong hệ tọa độ này, các tọa độ x, y sẽ được gán các
giá trò trong khoảng từ 0 đến 1. Như vậy, vùng
không gian của hệ tọa độ thiết bò chuẩn chính là
hình vuông đơn vò có góc trái dưới là (0,0) và góc
phải trên (1,1).
y

1

(1,1)

1

Dương Anh Đức, Lê Đình Duy

x

Hiển thò đối tượng hai chiều 5/7



ĐỒ HỌA MÁY TÍNH

Chuyển đổi từ cửa sổ sang vùng quan sát
• Phép chuyển đổi từ cửa sổ sang vùng quan sát bao
gồm 3 phép biến đổi :
♦ Phép tònh tiến để dòch chuyển góc trái dưới về gốc tọa độ
(hình a)
♦ Phép biến đổi tỉ lệ để chỉnh kích thước của cửa sổ về
cùng kích thước của vùng quan sát (hình b, hình c)
♦ Phép tònh tiến dòch chuyển về góc trái dưới của vùng
quan sát (hình d).

y

y

v

v

(xmax,ymax)

(umax,vmax)

(xmin,ymin)

(umin,vmin)
x

x


(a)

(b)

u
(c)

u
(d)

• Ta có ma trận của phép biến đổi :
u
− u min vmax − vmin
M WV = M TW (− x min ,− y min )M S  max
,
x

x
y max − y min
min
 max





=



 − x min


u max − u min
x max − x min

0

0
u max − u min
+ u min
x max − x min

Dương Anh Đức, Lê Đình Duy


 M TV (u min , vmin )



− y min

vmax
y max
vmax
y max

− vmin
− y min
− vmin

+ vmin
− y min


0


0


1


Hiển thò đối tượng hai chiều 6/7


ĐỒ HỌA MÁY TÍNH

• Như vậy nếu P (x, y) là điểm trong cửa sổ thì nó sẽ có
tọa
độ
trong
vùng
quan
sát
là:
(sx(x − x min ) + umin , sy( y − ymin ) + vmin )
u max − u min
v
− vmin

sx
=
sy = max
,
với
x max − x min
y max − y min .



sx, sy là các hệ số tỉ lệ của các kích thước của cửa sổ
và vùng quan sát. Khi sx = sy = 1 , các đối tượng qua

phép chuyển đổi sẽ được giữ nguyên hình dáng và
tính cân xứng.

Dương Anh Đức, Lê Đình Duy

Hiển thò đối tượng hai chiều 7/7


ĐỒ HỌA MÁY TÍNH

ĐỒ HỌA 3 CHIỀU

Dương Anh Đức, Lê Đình Duy

Giới thiệu về đồ họa 3 chiều 1/8



ĐỒ HỌA MÁY TÍNH

Dẫn nhập
• 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.
• Muốn có các hình ảnh 3 chiều ta cần 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ò:

Modeling
Transformation
Trivial
Rejection
Illumination

Biến đổi từ hệ toạ độ đối tượng sang
hệ toạ độ thế giới thực
Loại bỏ các đối tượng không nhìn
thấy được

Chiếu sáng đối tượng

Viewing
Transformation

Chuyển từ world space sang eye space

Clipping


Loại bỏ phần nằm ngoài viewing frustum

Projection

Chiếu từ eye space xuống screen space

Rasterization

Display

Dương Anh Đức, Lê Đình Duy

Chuyển đối tượng sang dạng pixel

Hiển thò đối tượng

Giới thiệu về đồ họa 3 chiều 2/8


ĐỒ HỌA MÁY TÍNH

Các vật thể 3D được biểu diễn như thế nào ?
• Point

• Vector

• Line

• Ray


• Triangle

• Polygon

• Quadric curve

• Spline

• Quadric solid

• Curved surface

• v.v…

Điểm trong không gian 3 chiều
• Mô tả một vò trí trong không gian
typedef struct{
Coordinate x ;
Coordinate y ;
Coordinate z ;
}Point3D ;

(x,y,z)

3D vector
• Mô tả một hướng và biên độ (magnitude)
♦ Xác đònh bởi 3 toạ độ dx, dy, dz
_

♦ Magnitude V = dx 2 + dy 2 + dz2

♦ Không có vò trí trong không gian

• Tích vô hướng của 2 vector


V1 • V2 = dx 1 dx 2 + dy 1 dy 2 + dz1 dz 2



V1 • V2 = V1 V1 cos(Θ )

Dương Anh Đức, Lê Đình Duy

typedef struct {
Coordinate dx;
Coordinate dy;
Coordinate dz;
}Vector;

Giới thiệu về đồ họa 3 chiều 3/8


ĐỒ HỌA MÁY TÍNH

Đoạn thẳng trong không gian 3 chiều
• Biểu diễn tổ hợp tuyến tính của 2 điểm.
♦ Biểu diễn dạng tham số của đoạn thẳng
P = P1 + t (P2 - P1 ), (0 ≤ t ≤ 1)
typedef struct {
Point P1;

Point P2;
}Segment;

P2
P1

Tia (Ray)
• Là một đoạn thẳng với một đầu nằm ở vô cực.
♦ Biểu diễn dạng tham số của tia
P = P1 + t V, (0 ≤ t < ∞)
typedef struct {
Point P1;
Vector V;
}Ray;

P

V

Đường thẳng (Line)
• Là một đoạn thẳng với cả hai đầu nằm ở vô cực.
♦ Biểu diễn dạng tham số của đường thẳng
P = P1 + t V, (-∞ < t < ∞)
typedef struct {
Point P1;
Vector V;
}Line;

Dương Anh Đức, Lê Đình Duy


P

V

Giới thiệu về đồ họa 3 chiều 4/8


ĐỒ HỌA MÁY TÍNH

Mặt phẳng (Plane)
• Là một đoạn thẳng với cả hai đầu nằm ở vô cực.
♦ Biểu diễn của mặt phẳng
P.N + d = 0 hoặc
ax + by + cz + d = 0
typedef struct {
Vector
N;
Distance d;
}Plane;

Đa giác (Polygon)
• Là một vùng giới hạn bởi dãy các điểm đồng phẳng.
♦ Tam giác,
♦ Tứ giác,
♦ Đa giác lồi,
♦ Đa giác lõm,
♦ Đa giác tự cắt,
♦ Đa giác có lỗ
typedef struct {
Point *Points;

int
nPoints;
}Polygon;
♦ Các điểm được cho theo thứ tự ngược chiều kim đồng hồ

Dương Anh Đức, Lê Đình Duy

Giới thiệu về đồ họa 3 chiều 5/8


ĐỒ HỌA MÁY TÍNH

Modeling transformation
• Biến đổi từ Hệ tọa độ đối tượng sang Hệ tọa độ thế giới
thực.
• Mỗi đối tượng được mô tả trong một hệ tọa độ riêng
được gọi là Hệ tọa độ đối tượng.
z
5
10

4

9
3

8
1
6


2
1

x

1

7

1

y

• Có hai cách mô hình hóa đối tượng :
♦ Solid modeling: mô tả các vật thể (kể cả bên trong)
♦ Boudary representation: chỉ quan tâm đến bề mặt đ/tg

• Các đối tượng có thể được biểu diễn bằng mô hình WireFrame
• Nhận xét
♦ Khi biểu diễn đối tượng, ta có thể chọn gốc tọa độ và đơn
vò đo lường sao cho việc biểu diễn thuận lợi nhất. Thường
thì người ta chuẩn hóa kích thước của đối tượng khi biểu
diễn.
♦ Boudary representation cho phép xử lý nhanh còn silid
modeling cho hình ảnh đầy đủ và xác thực hơn.
Dương Anh Đức, Lê Đình Duy

Giới thiệu về đồ họa 3 chiều 6/8



ĐỒ HỌA MÁY TÍNH

Trivial Rejection
• Loại bỏ các đối tượng hoàn toàn không thể nhìn thấy
trong cảnh.
• Thao tác này giúp ta lược bỏ bớt các đổi tượng không
cần thiết hiển thò
giảm chi phí xử lý.

Illumination
• Gán cho các đối tượng màu sắc dựa trên các đặc tính của
các chất tạo nên chúng và các nguồn sáng tồn tại trong
cảnh.
• Có nhiều mô hình chiếu sáng và tạo bóng : constantintensity, interpolate (Gouraud), phong, ….

Viewing transformation
• Thực hiện một phép biến đổi hệ tọa độ để đặt vò trí
quan sát (viewing position) về gốc tọa độ và mặt phẳng
quan sát (viewing plane) về một vò trí mong ước.
• Hình ảnh hiển thò phụ thuộc vào vò trí quán sát và góc
nhìn.
• Hệ qui chiếu có gốc đặt tại vò trí quan sát và phù hợp
với hướng nhìn sẽ thuận lợi cho các xử lý nhất.

Dương Anh Đức, Lê Đình Duy

Giới thiệu về đồ họa 3 chiều 7/8


ĐỒ HỌA MÁY TÍNH


Clipping
• Thực hiện việc xén (clip) các đối tượng trong cảnh để
cảnh nằm gọn trong một phần không gian hình chóp cụt
giới hạn vùng quan sát mà ta gọi là viewing frustum.
• Viewing frustum có trục trùng với tia nhìn, kích thước
y=top
x=left
y

z
VCS

z=-near

z=-far

x
y=bottom

x=right

giới hạn bởi vùng ta muốn quan sát.

Projection
• Thực hiện việc chiếu cảnh 3 chiều từ không gian quan
sát xuống không gian màn hình.
• Có hai phương pháp chiếu:
♦ Chiếu song song
♦ Chiếu phối cảnh


• Khi chiếu ta phải tiến hành việc khử mặt khuất để có
thể nhận được hình ảnh trung thực.
• Khử mặt khuất cho phép xác đònh vò trí (x,y) trên màn
hình thuộc về đối tượng nào trong cảnh.
Dương Anh Đức, Lê Đình Duy

Giới thiệu về đồ họa 3 chiều 8/8


ĐỒ HỌA MÁY TÍNH

Các thuật toán tô màu
Dẫn nhập
• Một vùng tô thường được xác đònh bởi một đường
khép kín nào đó gọi là đường biên. Dạng đường biên
đơn giản thường gặp là đa giác.
• Có hai dạng vùng tô thường gặp : tô bằng một màu
thuần nhất (solid fill) và tô theo một mẫu tô (fillpattern) nào đó.
• Việc tô màu thường được chia làm hai công đoạn :
♦ Xác đònh vò trí các điểm cần tô màu.
♦ Quyết đònh tô các điểm trên bằng màu nào. Công đoạn
này thực sự phức tạp khi ta cần tô theo một mẫu tô nào
đó chứ không phải tô thuần một màu.

• Có hai cách tiếp cận chính : tô màu theo dòng quét
và tô màu dựa theo đường biên.
♦ Phương pháp tô màu dựa theo dòng quét sẽ xác đònh
phần giao của các dòng quét kế tiếp nhau với đường biên
của vùng tô, sau đó sẽ tiến hành tô màu các điểm thuộc

phần giao này. Cách này thường được dùng để tô màu đa
giác, đường tròn, ellipse và một số đường cong đơn giản
khác.
♦ Phương pháp tô màu dựa theo đường biên sẽ bắt đầu từ
một điểm bên trong vùng tô và từ đó loang dần ra cho
đến khi gặp điểm biên. Cách này thường được dùng cho
các dạng đường biên phức tạp.
Dương Anh Đức, Lê Đình Duy

Các thuật toán tô màu 1/16


ĐỒ HỌA MÁY TÍNH

Thuật toán tô theo dòng quét
Bài toán đặt ra : Cần tô màu một đa giác cho bởi N đỉnh
Pi (x i , y i ), i = 0,... N − 1 . Đa giác này có thể là đa giác lồi, đa
giác lõm, và cả đa giác tự cắt, …

Tóm tắt các bước chính của thuật toán
• Tìm y top , ybottom lần lượt là giá trò lớn nhất, nhỏ
nhất của tập các tung độ của các đỉnh của đa giác đã
cho: y top = max {y i , (x i , y i ) ∈ P} , ybottom = min{yi , (x i , yi ) ∈ P} .
• Ứng với mỗi dòng quét y = k , với k thay đổi từ

ybottom đến y top , lặp :

♦ Tìm tất cả các hoành độ giao điểm của dòng quét y = k
với các cạnh của đa giác.
♦ Sắp xếp các hoành độ giao điểm theo thứ tự tăng dần :


x0 , x1 , x2 ,...,
♦ Tô màu các đoạn thẳng trên đường thẳng y = k lần lượt
được giới hạn bởi các cặp (x 0 , x1 ), (x1 , x 2 ),..., (x 2 k , x 2 k +1 ) .
y

ytop

0

1

2

3

ybottom

O
Dương Anh Đức, Lê Đình Duy

x
Các thuật toán tô màu 2/16


ĐỒ HỌA MÁY TÍNH

Các vấn đề đặt ra
• Hạn chế được số cạnh cần tìm giao điểm ứng với mỗi
dòng quét vì ứng với mỗi dòng quét, không phải lúc

nào tất cả các cạnh của đa giác cũng tham gia cắt
dòng quét.
• Xác đònh nhanh hoành độ giao điểm vì nếu lặp lại
thao tác tìm giao điểm của cạnh đa giác với mỗi
dòng quét bằng cách giải hệ phương trình sẽ tốn rất
nhiều thời gian.
• Giải quyết trường hợp số giao điểm ứng với trường
hợp dòng quét đi ngang qua đỉnh : Nếu số giao điểm
tìm được giữa các cạnh đa giác và dòng quét là lẻ thì
việc nhóm từng cặp giao điểm kế tiếp nhau để hình
thành các đoạn tô có thể sẽ không chính xác. Điều
này chỉ xảy ra khi dòng quét đi ngang qua các đỉnh
của đa giác.
• Ngoài ra, việc tìm giao điểm của dòng quét với các
cạnh nằm ngang là một trường hợp đặc biệt cần
phải có cách xử lí thích hợp

y=k2
0

1,2

3

y=k1
0

Dương Anh Đức, Lê Đình Duy

1,2


3

4

Các thuật toán tô màu 3/16


ĐỒ HỌA MÁY TÍNH

Tổ chức cấu trúc dữ liệu và thuật toán
• Danh sách các cạnh (Edge Table – ET) : chứa toàn
bộ các cạnh của đa giác (đã loại đi các cạnh nằm
ngang) được sắp theo thứ tự tăng dần của y Min .

• Danh sách các cạnh kích hoạt (Active Edge Table –
AET) : chứa các cạnh của đa giác có thể cắt ứng với
dòng quét hiện hành, các cạnh này được sắp theo
thứ tự tăng dần của hoành độ giao điểm giữa cạnh
và dòng quét.
• Khi dòng quét đi từ bottom đến top, các cạnh thỏa
điều kiện sẽ được di chuyển từ ET sang AET:
♦ Khi dòng quét y = k bắt đầu cắt một cạnh, nghóa là

k ≥ y Min , cạnh này sẽ được chuyển từ ET sang AET.

♦ Khi dòng quét không còn cắt cạnh này nữa, nghóa là

k > yMax , cạnh này sẽ bò loại ra khỏi AET.


♦ Khi không còn cạnh nào trong ET hay AET nữa, quá
trình tô màu kết thúc.

• Để tìm giao điểm giữa cạnh đa giác và dòng quét
hiện hành nhanh, ta có nhận xét :
x k +1 − x k =

1
((k + 1) − k) = 1 hay x k+1 = x k + 1 .
m
m
m

y=k+1
xk+1
y=k
xk
Dương Anh Đức, Lê Đình Duy

Các thuật toán tô màu 4/16


ĐỒ HỌA MÁY TÍNH

Đề xuất cấu trúc dữ liệu của một cạnh (EDGE)
deltaY

y=k
xIntersect


yMin



y Min : giá trò tung độ nhỏ nhất trong 2 đỉnh của
cạnh.



xInter sec t : hoành độ giao điểm của cạnh với dòng
quét hiện hành.



DxPerScan : giá trò 1/m (m là hệ số góc của cạnh).



deltaY : khoảng cách từ dòng quét hiện hành tới đỉnh

y Max .

Lúc
deltaY ≤ 0 .

này

điều

kiện


k > yMax

trở

thành

• Giá trò xInter sec t được khởi gán ban đầu là hoành độ
của đỉnh có tung độ là y Min , và giá trò deltaY được
khởi gán ban đầu là y Max − y Min + 1 .

Dương Anh Đức, Lê Đình Duy

Các thuật toán tô màu 5/16


ĐỒ HỌA MÁY TÍNH

Giải quyết trường hợp dòng quét đi qua đỉnh
• Tính một giao điểm nếu chiều của hai cạnh kề của
đỉnh đó có xu hướng tăng hay giảm.
• Tính hai giao điểm nếu chiều của hai cạnh kề của
đỉnh đó có xu hướng thay đổi, nghóa là tăng-giảm
hay giảm-tăng.
Pi+1

Pi-1
Pi

Pi-1


Pi

Pi+1
Pi

Pi-1

Pi+1

Pi+1

Pi-1

Pi

(a)

(b)

• Khi cài đặt để khỏi phải xét điều kiện này cho phức
tạp, khi xây dựng dữ liệu cho mỗi cạnh trước khi đưa
vào ET, người ta sẽ xử lí các cạnh có đỉnh tính hai
giao điểm bằng cách loại đi một pixel trên cùng của
một trong hai cạnh.
Pi+1

y=k
y=k-1


Pi+1

Pi-1

y=k
y=k-1

Pi

Pi-1

Pi

Pi*

Pi-1

Pi-1

Dương Anh Đức, Lê Đình Duy

Pi*

Pi+1

Pi+1

Các thuật toán tô màu 6/16



ĐỒ HỌA MÁY TÍNH

Minh họa thuật toán
Top

F
C

D

E
yG* =yG+1

G

yG
yB

B

yB* =yB-1
yH*=yH+1

I

A

H

yH


Bottom

• Ban đầu :
♦ ET : AB*, AI, H*G, BC, G*F, DC, EF. (loại IH và DE)
♦ AET : NULL.

• Khi dòng quét đạt y=yA
♦ ET : H*G, BC, G*F, DC, EF. (chuyển AB*, AI sang AET)
♦ AET : AB*, AI.

• Khi dòng quét đạt y=yH*
♦ ET : BC, G*F, DC, EF. (chuyển H*G sang AET)
♦ AET : AB*, H*G. (loại AI vì không còn cắt dòng quét)

Dương Anh Đức, Lê Đình Duy

Các thuật toán tô màu 7/16


ĐỒ HỌA MÁY TÍNH

• Khi dòng quét đạt y=yB
♦ ET : G*F, DC, EF. (chuyển BC sang AET)
♦ AET : BC, H*G. (loại AB*, sắp xếp lại H*G và BC)

• Khi dòng quét đạt y=yG*
♦ ET : DC, EF. (chuyển G*F sang AET)
♦ AET : BC, G*F. (loại H*G vì không còn cắt dòng quét)


• Khi dòng quét đạt y=yD
♦ ET : NULL. (chuyển DC, EF sang AET)
♦ AET : BC, DC, EF, G*F. (sắp xếp lại BC, GF*, DC, EF)

• Khi dòng quét đạt y=yC+1
♦ ET : NULL.
♦ AET : EF, G*F. (loại BC, DC vì không còn cắt dòng quét)

• Khi dòng quét đạt y=yF+1
♦ ET : NULL.
♦ AET : NULL. (loại EF, G*F vì không còn cắt dòng quét).

• Thuật toán dừng tại đây.

Dương Anh Đức, Lê Đình Duy

Các thuật toán tô màu 8/16


ĐỒ HỌA MÁY TÍNH

Lưu đồ thuật toán tô màu theo dòng quét
Begin

Tạo danh sách tất cả các cạnh ET

i=BottomScan

i

No

Yes
Cập nhật danh sách các cạnh
kích hoạt AET

Tìm hoành độ giao điểm và sắp xếp
theo thứ tự tăng dần

Tô màu các đoạn giao được tạo bởi
từng cặp hoành độ kế tiếp nhau

Cập nhật lại thông tin của các cạnh
để sử dụng cho dòng quét kế tiếp

i=i+1

End

Dương Anh Đức, Lê Đình Duy

Các thuật toán tô màu 9/16


ĐỒ HỌA MÁY TÍNH

Một số hướng dẫn cài đặt
#define MAXVERTEX
#define MAXEDGE
#define TRUE

#define FALSE

20
20
1
0

typedef struct {
int x;
int y;
}POINT;
typedef struct{
int
NumVertex;
POINT aVertex[MAXVERTEX];
}POLYGON;
typedef struct {
int
NumPt;
float
xPt[MAXEDGE];
}XINTERSECT;
typedef struct
{
int
yMin; // Gia tri y nho nhat cua 2 dinh
float
xIntersect; // Hoanh do giao diem cua canh & dong quet
float
dxPerScan; // Gia tri 1/m

int
DeltaY;
}EDGE;
typedef struct
{
int NumEdge;
EDGE aEdge[MAXEDGE];
}EDGELIST;

Dương Anh Đức, Lê Đình Duy

Các thuật toán tô màu 10/16


×