Bài giảng Đồ họa hiện thực ảo - Bài 2: Các giải thuật sinh các thực thể cơ sở - Lê Tấn Hưng

Giải thuật xây dựng các

thực thể cơ sở

„ Giải thuật sinh đường thẳng – Line

„ Giải thuật sinh đường tròn - Circle

„ Giải thuật VanAken sinh Ellipse

„ Giải thuật sinh đa giác

„ Giải thuật sinh ký tự

Bài giảng Đồ họa hiện thực ảo - Bài 2: Các giải thuật sinh các thực thể cơ sở - Lê Tấn Hưng trang 1

Trang 1

Bài giảng Đồ họa hiện thực ảo - Bài 2: Các giải thuật sinh các thực thể cơ sở - Lê Tấn Hưng trang 2

Trang 2

Bài giảng Đồ họa hiện thực ảo - Bài 2: Các giải thuật sinh các thực thể cơ sở - Lê Tấn Hưng trang 3

Trang 3

Bài giảng Đồ họa hiện thực ảo - Bài 2: Các giải thuật sinh các thực thể cơ sở - Lê Tấn Hưng trang 4

Trang 4

Bài giảng Đồ họa hiện thực ảo - Bài 2: Các giải thuật sinh các thực thể cơ sở - Lê Tấn Hưng trang 5

Trang 5

Bài giảng Đồ họa hiện thực ảo - Bài 2: Các giải thuật sinh các thực thể cơ sở - Lê Tấn Hưng trang 6

Trang 6

Bài giảng Đồ họa hiện thực ảo - Bài 2: Các giải thuật sinh các thực thể cơ sở - Lê Tấn Hưng trang 7

Trang 7

Bài giảng Đồ họa hiện thực ảo - Bài 2: Các giải thuật sinh các thực thể cơ sở - Lê Tấn Hưng trang 8

Trang 8

Bài giảng Đồ họa hiện thực ảo - Bài 2: Các giải thuật sinh các thực thể cơ sở - Lê Tấn Hưng trang 9

Trang 9

Bài giảng Đồ họa hiện thực ảo - Bài 2: Các giải thuật sinh các thực thể cơ sở - Lê Tấn Hưng trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 28 trang xuanhieu 5200
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Đồ họa hiện thực ảo - Bài 2: Các giải thuật sinh các thực thể cơ sở - Lê Tấn Hưng", để 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 Đồ họa hiện thực ảo - Bài 2: Các giải thuật sinh các thực thể cơ sở - Lê Tấn Hưng

Bài giảng Đồ họa hiện thực ảo - Bài 2: Các giải thuật sinh các thực thể cơ sở - Lê Tấn Hưng
Bài 2:
 Các giảithuậtsinh 
 các thực thể cơ sở
 Le Tan Hung
 hunglt@it-hut.edu.vn
 (c) SE/FIT/HUT 2002
Giảithuậtxâydựng các
thựcthể cơ sở
„ Giảithuậtsinhđường thẳng – Line
„ Giảithuậtsinhđường tròn - Circle
„ Giảithuật VanAken sinh Ellipse
„ Giảithuậtsinhđagiác
„ Giảithuậtsinhkýtự
 (c) SE/FIT/HUT 2002 2
Rờirạchoáđiểm ảnh
(Scan Conversion rasterization)
„ Scan Conversion rasterization
„ Tính chất các đốitượng cần đảmbảo:
 „ smooth
 „ continuous
 „ pass through specified points
 „ uniform brightness
 „ efficient
 (c) SE/FIT/HUT 2002 3
Biểudiễn đoạnthẳng
 „ Biểudiễntường minh
 (y-y1)/( x-x1) = ( y2-y1)/( x2-x1)1 P(x2 , y2)
 y = kx + m
 „ Biểudiễnkhôngtường minh u
 (y2-y1)x - (x2-x1)y + x2y1 - x1y2 = 0
 hay rx + sy + t = 0 
 P(x1, y1)
 „ Biểudiễnthambiến
 P(u) = P1 + u(P2 - P1)
 u [0,1]
 m
 (c) SE/FIT/HUT 2002 4
 ThuậttoánDDA 
 (Digital Differential Analizer)
Giảithuật thông thường
DrawLine(int x1,int y1, int x2,int y2, GiảithuậtDDA
int color) „ Với 0 < k < 1 
 x = x + 1 
{ i+1 i
 y = y + k
 float y; i+1 i
 int x; với i=1,2,3....
 for (x=x1; x<=x2; x++) 
 {
 y = y1 + (x-x1)*(y2-y1)/(x2-x1)
 WritePixel(x, Round(y), color );
 }}
 (c) SE/FIT/HUT 2002 5
 GiảithuậtBresenham
„ 1960 Bresenham thuộcIBM 
„ điểmgầnvới đường thẳng dựa
 2
 trên độ phân giai hưuhạn d1
„ loạibỏđược các phép toán d2
 chia và phép toán làm tròn 1
 như ta đãthấy trong giảithuật
 DDA 0
„ Xét đoạnthẳng với 0 < k < 1
 012
 (c) SE/FIT/HUT 2002 6
 GiảithuậtBresenham
 d2 = y - yi = k(xi +1) + b - yi
 A d1 = yi+1 - y = yi + 1 - k(xi + 1) - b
y +1
 i d1
 d2
 yi
 B
 xi
 xi+1
 (c) SE/FIT/HUT 2002 7
Giảithuật Bresenham
 (c) SE/FIT/HUT 2002 8
Giảithuậttrungđiểm-Midpoint 
„ 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 đơngiảnhơn, tạo đượccác
 điểmtương tự như với Bresenham
 yi+1 A
 M
„ d = F (xi + 1, yi + 1/2) là trung điểmcủa
 đoạnAB B
„
 Việc so sánh, hay kiểmtraM sẽđượcthay (xi , yi ) 
 bằng việcxétgiátrị d.
 x x
 „ Nếud > 0 điểmB đượcchọn, yi+1 = yi i i+1
 „ nếud < 0 điểmA đượcchọn. yi+1 = yi + 1
 „ Trong trường hợp d = 0 chúng ta có thể
 chọn điểmbấtkỳ hoặcA, hoặcB.
 (c) SE/FIT/HUT 2002 9
Bresenham’s Algorithm: 
Midpoint Algorithm
 „ If di > 0 then chọn điểm A ⇒ trung điểmtiếptheosẽ có dạng:
  3  3
 xi +2, yi +  ⇒ di+1 = a()xi +2 +b yi + +c
  2  2
 = di +a +b
 (c) SE/FIT/HUT 2002 10
Midpoint Line Algorithm
 dx = x_end-x_start
 dy = y_end-y_start
 d = 2*dy-dx initialisation
 x = x_start
 y = y_start
 while x < x_end 
 if d <= 0 then
 d = d+(2*dy) choose B
 x = x+1
 else
 d = d+2*(dy-dx)
 x = x+1 choose A
 y = y+1
 endif
 SetPixel(x,y)
 endwhile
 (c) SE/FIT/HUT 2002 11
Giảithuật B¾t ®Çu
 x = x1 ;
Bresenham's Midpoint y = y1;
 dx = x2 - x1;
 dy = y2 - y1;
 d = dy - dx/2;
 Putpixel (x ,y);
 No
 d <= 0
 d = d + dy - dx
 x = x + 1
 yes
 d = d + dy y = y + 1
 yes x < x2
 no
 KÕt thóc
 (c) SE/FIT/HUT 2002 12
 Sinh đường tròn
 Scan Converting Circles
 „ Explicit: y = f(x)
 yRx=±22 −
 Usually, we draw a quarter circle by 
 incrementing x from 0 to R in unit steps 
 and solving for +y for each step.
 „ Parametric:
 xR= cosθ - by stepping the angle from 0 to 90
 yR= sinθ - avoids large gaps but still insufficient.
„ Implicit: f(x) = x2+y2-R2
 If f(x,y) = 0 then it is on the circle.
 f(x,y) > 0 then it is outside the circle.
 f(x,y) < 0 then it is inside the circle.
 (c) SE/FIT/HUT 2002 13
 Midpoint Circle Algorithm
„ Sử dụng phương pháp biểudiễn không
 tường minh trong giảithuật
„ Thựchiệngiảithuậttrên1/8 đường
 tròn và lấy đốixứ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ểmbấtkỳ ta có
 (c) SE/FIT/HUT 2002 14
Midpoint Circle Algorithm
„ As with the line, we determine the value of the decision variable by 
 substituting the mid-point of the next pixel into the implicit form of the 
 circle: 2
 2  1 2
 di = ()xi +1 + yi −  −r
  2
„ If di < 0 we choose pixel A otherwise we choose pixel B
 „ Note: we currently assume the circle is centered at the origin
 (c) SE/FIT/HUT 2002 15
Midpoint Circle Algorithm
 d = 1-r
 x = 0 initialisation
 y = r stop at diagonal ⇒ end of octant
 while y < x 
 if d < 0 then
 d = d+2*x+3
 choose
 x = x+1 A
 else
 d = d+2*(x-y)+5
 x = x+1 choose B
 y = y-1
 endif
 SetPixel(cx+x,cy+y)
 endwhile
 Translate to the circle center
 (c) SE/FIT/HUT 2002 16
 Scan Converting Ellipses
 Fxybxayab(, )=+−=22 22 22 0
„ 2a is the length of the major axis along the x axis.
„ 2b is the length of the minor axis along the y axis.
„ The midpoint can also be applied to ellipses.
„ For simplicity, we draw only the arc of the ellipse that lies 
 in the first quadrant, the other three quadrants can be drawn 
 by symmetry
 (c) SE/FIT/HUT 2002 17
 Scan Converting Ellipses: Algorithm
 A
 M tiep tuyen = -1
 B gradient
 B C
 M
 i
„ Firstly we divide the quadrant into two regions
„ Boundary between the two regions is
 „ the point at which the curve has a slope of -1
 „ the point at which the gradient vector has the i and j components of equal 
 magnitude 
 grad F(, x y )=∂Fx / ∂i +∂ F / ∂y j = 2bx22i + 2 ay j
 (c) SE/FIT/HUT 2002 18
 Ellipses: Algorithm (cont.)
 2 2
„ At the next midpoint, if a (yp-0.5)2
„ In region 1, choices are E and SE
 2 2
 „ Initial condition: dinit = b +a (-b+0.25)
 2
 „ For a move to E, dnew = dold+DeltaE with DeltaE = b (2xp+3)
 „ For a move to SE, dnew = dold+DeltaSE with 
 2 2
 DeltaSE = b (2xp+3)+a (-2yp+2)
„ In region 2, choices are S and SE
 2 2 2 2 2
 „ Initial condition: dinit = b (xp+0.5) +a ((y-1) -b )
 2
 „ For a move to S, dnew = dold+Deltas with Deltas = a (-2yp+3)
 „ For a move to SE, dnew = dold+DeltaSE with 
 2 2
 DeltaSE = b (2xp+2)+a (-2yp+3)
„ Stop in region 2 when the y value is zero. 
 (c) SE/FIT/HUT 2002 19
 Ký tự Bitmap
„ Trên cơ sỏđịnh nghĩamỗikýtự với
 một font chư cho trướclàmột
 bitmap chữ nhậtnhỏ
„ Font/typeface: set of character 
 shapes
„ fontcache
 „ các ký tự theo chuỗiliêntiếp nhau trong
 bộ nhớ
„ Dạng cơ bản ab
 „ (thường N, nghiêng I, đậm B, nghiêng
 đậmB+I) 
„ Thuộc tính
 „ Also colour, size, spacing and 
 orientation
 (c) SE/FIT/HUT 2002 20
Cấu trúc font chữ
 (c) SE/FIT/HUT 2002 21
 Ký tự vector
„ 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ốnkémnhấtvề mặttính
 toán
„ Chất lượngcao
 (c) SE/FIT/HUT 2002 22
 So sánh
 „ Phứctạp (Tính toán phương
„ Đơngiản trông việcsinhkýtự trình)
 ( copypixel) 
 „ Lưutrữ gọnnhẹ
„ Lưutrữ lớn
 „ Các phép biến đổidựa vào các
„ Các phép biến đổi (I,B, scale) công thứcbiến đổi
 đòi hỏilưutrữ thêm „ Kích thướcphụ thuôc vào môi
„ Kích thước không dổi trường ( ko có kích thướccố
 định)
 (c) SE/FIT/HUT 2002 23
Giải thuật đường quét sinh đa giác
Polygon Scan Conversion
„ 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:
 „ some algorithms allow triangular polygons only
 „ others require that the polygons are convex and non self-
 intersecting and have no holes
 triangular convex non-convex self-intersecting religious
 (c) SE/FIT/HUT 2002 24
 Polygon Scan Conversion
„ 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 compute spans representing the interior portions of the 
 polygons along this scan-line and fill the associated pixels.
„ This represents the heart of a scan-line rendering algorithm used in 
 many commercial products including Renderman and 3D Studio 
 MAX.
 (c) SE/FIT/HUT 2002 25
Polygon Scan Conversion
„ Dùng giảithuật (trung điểm) để xác
 định các điểmbiênchomỗi đagiác
 theo thứ tự tăng củax.
„ Các diểmphải:
 „ Không bị chia sẻ bởicácđagiáclân
 cận
 „ Các đagiácchỉ toàn các điểmcạnh( 
 điểmbiên)
„ Đảmbảo các đagiácchiasẻđiểmbiên
 mà không chia sẻ các điểm ảnh bên
 trong củamình.
 (c) SE/FIT/HUT 2002 26
 Polygon Scan Conversion
„ 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
„ Need to handle 4 cases to prevent pixel sharing:
 „ if intersection has fractional x value, do we round up or down?
 • if inside (on left of span) round up, if outside (on right) round down
 „ what happens if intersection is at an integer x value?
 • if on left of span assume its interior otherwise exterior
 „ how do we handle shared vertices?
 • ignore pixel associated with ymax of an edge 
 „ how do we handle horizontal edges?
 • handled as a result of previous rule (lower edges not drawn)
 (c) SE/FIT/HUT 2002 27
Polygon Scan Conversion
 integer x value is on
 right = exterior
 horizontal edge ymax not 
 removed rounded down for A included
 rounded up for B
 (c) SE/FIT/HUT 2002 28

File đính kèm:

  • pdfbai_giang_do_hoa_hien_thuc_ao_bai_2_cac_giai_thuat_sinh_cac.pdf