Bài giảng Công nghệ đồ họa và hiện thực ảo - Bài 3: Giải thuật sinh các thực thể cơ sở - Trịnh Thành Trung

Polygon scan conversion là giải thuật chung

kinh điển cho các loại khác nhau

• Cho mỗi đoạn thẳng quét, chúng ta xác định các

cạnh của đa giác cắt đoạn thẳng

Giải thuật đường quét sinh đa giác25

• Dùng giải thuật (trung điểm) để

xác định các điểm biên cho mỗi

đa giác theo thứ tự tăng của x.

• Các điểm phải:

– Không bị chia sẻ bởi các đa

giác lân cận

– Các đa giác chỉ toàn các

điểm cạnh (điểm biên)

• Đảm bảo các đa giác chia sẻ

điểm biên mà không chia sẻ

các điểm ảnh bên trong của

mình.

Giải thuật đường quét sinh đa giác26

• Thủ tục chung:

– Xác định giao của đường thẳng quét với cạnh

đa giác

– Sắp xếp các giao điểm theo mức độ tăng dần

của x value

– Điền các điểm ảnh vào giữa cặp các điểm x

pdf 32 trang kimcuc 10040
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Công nghệ đồ họa và hiện thực ảo - Bài 3: Giải thuật sinh các thực thể cơ sở - Trịnh Thành Trung", để 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: Bài giảng Công nghệ đồ họa và hiện thực ảo - Bài 3: Giải thuật sinh các thực thể cơ sở - Trịnh Thành Trung

Bài giảng Công nghệ đồ họa và hiện thực ảo - Bài 3: Giải thuật sinh các thực thể cơ sở - Trịnh Thành Trung
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
Bài 3 
GIẢI THUẬT SINH 
CÁC THỰC THỂ CƠ SỞ 
1 
Trịnh Thành Trung 
trungtt@soict.hust.edu.vn 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
- 
NỘI DUNG 
1. Biểu diễn đoạn thẳng 
a) Thuật toán DDA 
b) Giải thuật Bresenham 
c) Giải thuật trung điểm 
2. Biểu diễn đường tròn 
3. Biểu diễn đường ê-líp 
4. Giải thuật sinh ký tự 
2 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
3 
• Là tiến trình sinh các đối tượng hình học cơ sở 
bằng phương pháp xấp xỉ dựa trên lưới phân giải 
của màn hình 
• Tính chất các đối tượng cần đảm bảo : 
– mượt - smooth 
– liên tục - continuous 
– đi qua các điểm xác định 
– độ sáng đồng nhất 
– hiệu quả - efficient 
Rời rạc hóa điểm ảnh 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
- 
BIỂU DIỄN ĐOẠN THẲNG 
1 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
•Biểu diễn tường minh 
(y-y1)/( x-x1) = ( y2-y1)/( x2-x1) 
y = kx + m 
– k = (y2-y1)/( x2-x1) 
– m = y1- kx1 
– y = k x 
Biểu diễn đoạn thẳng 
5 
m 
P(x1, y1) 
P(x2 , y2) 
u 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
•Biểu diễn không tường 
minh 
(y2-y1)x - (x2-x1)y + x2y1 - x1y2 = 0 
hay rx + sy + t = 0 
– s = -(x2-x1 ) 
– r = (y2-y1) và t = x2y1 - x1y2 
6 
m 
P(x1, y1) 
P(x2 , y2) 
u 
Biểu diễn đoạn thẳng 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
•Biểu diễn tham biến 
P(u) = P1 + u(P2 - P1) 
u [0,1] 
X = x1 + u( x2 - x1 ) 
Y = y1 + u( y2 - y1 ) 
7 
m 
P(x1, y1) 
P(x2 , y2) 
u 
Biểu diễn đoạn thẳng 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
Giải thuật DDA 
Với 0 < k < 1 
xi+1 = xi + 1 
yi+1 = yi + k 
với i=1,2,3.... 
Thuậttoán ddaline (x1, y1, x2, y2) 
 x1, y1, x2, y2 : tọa độ 2 điểm đầu cuối 
 k : hệ số góc 
 x,y,m :biến 
 begin 
 m =(x2-x1)/(y2-y1); 
 x = x1; 
 y = y1; 
 k = 1/m; 
 putpixel(x,y); 
while x<x2 
 begin 
 x = x+1; 
 y = y+k; 
putpixel(x,round(y)); 
 end; end; 
Thuật toán DDA 
(Digital Differential Analyzer) 8 
Giải thuật thông thường 
DrawLine(int x1,int y1, 
int x2,int y2, int color) 
{ 
 float y; 
 int x; 
 for (x=x1; x<=x2; x++) 
 { 
 y = y1 + (x-
x1)*(y2-y1)/(x2-x1) 
 WritePixel(x, 
Round(y), color ); 
 }} 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
9 
• 1960 Bresenham thuộc IBM 
• điểm gần với đường thẳng 
dựa trên độ phân giai hưu 
hạn 
• loại bỏ được các phép toán 
chia và phép toán làm tròn 
như ta đã thấy trong gỉai 
thuật DDA 
• Xét đoạn thẳng với 0 < k < 1 
Giải thuật Bresenham 
0 1 2 
0 
1 
2 
d1 
d2 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
d2 = y - yi = k(xi +1) + b - yi 
d1 = yi+1 - y = yi + 1 - k(xi + 
1) - b 
if d1 d2 => yi+1 = yi + 1 
else d1 > d2 => yi+1 = yi 
D = d1 - d2 
 = -2k(xi + 1) + 2yi - 2b + 1 
Pi = xD = x (d1 - d2) 
Giải thuật Bresenham 
10 
0 1 2 
0 
1 
2 
d1 
d2 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
Pi = -2 yxi + 2 xyi + c 
Pi+1 - Pi 
 = -2 y(xi+1 - xi) + 2 x(yi+1 - yi) 
•Nếu Pi 0 yi+1 = yi + 1 
 Pi+1 = Pi - 2 y + 2 x 
•Nếu Pi > 0 yi+1 = yi 
 Pi+1 = Pi - 2 y 
P1 = x(d1 - d2) 
P1 = -2 y + x 
11 
P > 0
B¾t ®Çu
x = x1 ;
y = y1;
dx = x2 - x1;
dy = y2 - y1;
P = dx - 2dy;
Putpixel (x ,y);
x < x2
KÕt thóc
P = P - 2dy
P = P - 2dy + 2dx
y = y + 1
yes
no
No
yes
x = x + 1
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
•Jack Bresenham 1965 / Pitteway 
1967 
•VanAken áp dụng cho việc sinh các 
đường thẳng và đường tròn 1985 
•Các công thức đơn giản hơn, tạo 
được các điểm tương tự như với 
Bresenham 
A 
M 
B 
Giải thuật trung điểm 
12 
 yi+1 
 M 
 ( xi , yi ) 
 xi xi+1 
•d = F (xi + 1, yi + 1/2) là trung điểm của đoạn AB 
•Việc so sánh, hay kiểm tra M sẽ được thay bằng việc xét giá trị d. 
– Nếu d > 0 điểm B được chọn, yi+1 = yi 
– nếu d < 0 điểm A được chọn. yi+1 = yi + 1 
– Trong trường hợp d = 0 chúng ta có thể chọn điểm bất kỳ hoặc A, 
hoặc B. 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
13 
• Sử dụng phương pháp biểu diễn không tường minh 
• Tại mỗi trung điểm của đoạn thẳng giá trị được tính 
là: 
• Chúng ta gọi di là biến quyết định của bước thứ i 
Giải thuật trung điểm 
0 cbyax
 iiii
iiii
iiii
yxcbyax
yxcbyax
yxcbyax
,0
,0
,0
 on line 
above line 
below line 
 cybxad iii 
2
1
1
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
14 
• If di > 0 then chọn điểm A trung điểm tiếp 
theo sẽ có dạng: 
Giải thuật trung điểm 
bad
cybxadyx
i
iiiii
2
3
2
2
3
,2 1
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
15 
Giải thuật trung điểm 
if di < 0 then chọn điểm B và trung điểm mới là 
Ta có: 
Ðiểm đầu 
 
2
2
1
1
2
1
,1
b
acbyax
cybxadyx
startstart
startstartstartstartstart
2
0
b
a 
ad
cybxadyx
i
iiiii
2
1
2
2
1
,2 1
Cx
x
y
y
xCc
xxxb
yyya
startend
startend



 where
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
16 
Giải thuật trung điểm 
dx = x_end-x_start 
dy = y_end-y_start 
d = 2*dy-dx 
x = x_start 
y = y_start 
while x < x_end 
 if d <= 0 then 
 d = d+(2*dy) 
 x = x+1 
 else 
 d = d+2*(dy-dx) 
 x = x+1 
 y = y+1 
 endif 
 SetPixel(x,y) 
endwhile 
initialisation 
choose B 
choose A 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
17 
• d = a(xi + 1) + b(yi + 1/2) + c 
• Nếu điểm được chọn là B thi M sẽ tang theo x một đơn vị 
– di +1 = F(xi +2, yi + 1/2) 
– = a(xi +2) + b(yi + 1/2) + c 
– di = a(xi + 1) + b(yi + 1/2) + c 
• Nếu điểm A được chọn thì M tăng theo 2 hướng x và y với 
cùng một đơn vị. 
– di + 1 = F (xi + 2, yi + 3/2) 
– = a(xi + 2) + b(yi +3/2) + c 
– di + 1 = di + a + b. 
• Với a + b = dy - dx. 
Giải thuật trung điểm 
d <= 0
B¾t ®Çu
x = x1 ;
y = y1;
dx = x2 - x1;
dy = y2 - y1;
d = dy - dx/2;
Putpixel (x ,y);
x < x2
K Õt thóc
d = d + dy
d = d + dy - dx
y = y + 1
yes
no
No
yes
x = x + 1
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
- 
BIỂU DIỄN ĐƯỜNG TRÒN 
VÀ ĐƯỜNG Ê-LÍP 
2 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
19 
• Sử dụng phương pháp biểu diễn không tường minh trong giải 
thuật 
• Thực hiện giải thuật trên 1/8 đường tròn và lấy đối xứng xho các 
góc còn lại. 
• Với di là giá trị của đường tròn tại một điểm bất kỳ ta có 
Giải thuật trung điểm cho 
đường tròn 
 0222 ryyxx cc
circle outside is , if 0
circleon is , if 0
circle inside is , if 0
ii
ii
ii
i
yx
yx
yx
d
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
20 
Giải thuật trung điểm cho 
đường tròn 
d = 1-r 
x = 0 
y = r 
while y < x 
 if d < 0 then 
 d = d+2*x+3 
 x = x+1 
 else 
 d = d+2*(x-y)+5 
 x = x+1 
 y = y-1 
 endif 
 SetPixel(cx+x,cy+y) 
endwhile 
initialisation 
choose B 
choose A 
Translate to the circle center 
stop at diagonal end of octant 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
21 
• Tương tự hình tròn 
• Áp dụng giải thuật cho ¼ đường ê-líp, sau đó lấy 
đối xứng cho các vị trí còn lại 
• Phương trình đường ê-líp 
– 2a: đường kính ngang 
– 2b: đường kính dọc 
Giải thuật trung điểm cho 
đường ê-líp 
2 2 2 2 2 2( , ) 0F x y b x a y a b 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
- 
BIỂU DIỄN ĐA GIÁC 
3 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
23 
• Tồn tại rất nhiều giải thuật sinh đa giác. 
• Mỗi giải thuật phục vụ cho 1 loại đa giác nhất 
định: 
• Một số giải thuật chỉ sử dụng được với các tam 
giác 
• Một số giải thuật đòi hỏi đa giác là lồi, không tự 
cắt chính nó và không có lỗ hổng bên trong 
Giải thuật đường quét sinh đa giác 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
24 
• Polygon scan conversion là giải thuật chung 
kinh điển cho các loại khác nhau 
• Cho mỗi đoạn thẳng quét, chúng ta xác định các 
cạnh của đa giác cắt đoạn thẳng 
Giải thuật đường quét sinh đa giác 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
25 
• Dùng giải thuật (trung điểm) để 
xác định các điểm biên cho mỗi 
đa giác theo thứ tự tăng của x. 
• Các điểm phải: 
– Không bị chia sẻ bởi các đa 
giác lân cận 
– Các đa giác chỉ toàn các 
điểm cạnh (điểm biên) 
• Đảm bảo các đa giác chia sẻ 
điểm biên mà không chia sẻ 
các điểm ảnh bên trong của 
mình. 
Giải thuật đường quét sinh đa giác 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
26 
• Thủ tục chung: 
– Xác định giao của đường thẳng quét với cạnh 
đa giác 
– Sắp xếp các giao điểm theo mức độ tăng dần 
của x value 
– Điền các điểm ảnh vào giữa cặp các điểm x 
Giải thuật đường quét sinh đa giác 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
27 
Giải thuật đường quét sinh đa giác 
rounded down for A 
rounded up for B 
integer x value is on 
right = exterior 
ymax not 
included 
horizontal edge 
removed 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
- 
BIỂU DIỄN KÝ TỰ 
4 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
29 
• Trên cơ sỏ định nghĩa mỗi ký tự với một font chư 
cho trước là một bitmap chữ nhật nhỏ 
• Font/typeface: set of character shapes 
Giải thuật sinh ký tự 
ab 
• fontcache 
– các ký tự theo chuỗi liên tiếp 
nhau trong bộ nhớ 
• Dạng cơ bản 
– (thường N, nghiêng I, đậm B, 
nghiêng đậm B+I) 
• Thuộc tính 
– Also colour, size, spacing 
and orientation 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
Cấu trúc font chữ 
30 
Typedef struct 
{ 
int leftx, 
int width; 
} Char location; //Vị trí 
Typedef struct 
{ 
CacheId; 
Heiglit; // Độ rộng chữ 
CharSpace; // Khoảng cách 
 // giữa các ký tự 
Charlocation Table [128]; 
} fontcache 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
31 
• Xây dựng theo phương 
pháp định nghĩa các ký 
tự bởi đường cong mềm 
bao ngoài của chúng. 
• Tốn kém nhất về mặt 
tính toán 
• Chất lượng cao 
Ký tự vector 
©
 C
o
p
yrigh
t Sh
o
w
eet.co
m
• Đơn giản trông việc sinh ký 
tự (copypixel) 
• Lưu trữ lớn 
• Các phép biến đổi (I,B, scale) 
đòi hỏi lưu trữ thêm 
• Kích thước không đổi 
• Phức tạp (Tính toán 
phương trình) 
• Lưu trữ gọn nhẹ 
• Các phép biến đổi dựa vào 
các công thức biến đổi 
• Kích thước phụ thuôc vào 
môi trường ( không có kích 
thước cố định) 
So sánh 
32 

File đính kèm:

  • pdfbai_giang_cong_nghe_do_hoa_va_hien_thuc_ao_bai_3_giai_thuat.pdf