Các giải thuật sinh các thực thể cơ sở Le Tan Hung hunglt@it-hut.edu.vn 0913030731 Rendering Pipeline: 3-D Transform Illuminate Transform Clip Project Rasterize Model & Camera Parameters
Trang 1Các giải thuật sinh các thực thể
cơ sở
Le Tan Hung hunglt@it-hut.edu.vn 0913030731
Rendering Pipeline: 3-D
Transform Illuminate Transform Clip Project
Rasterize
Model & Camera Parameters Rendering Pipeline Framebuffer Display
The Rendering Pipeline: 3-D
Scene graph
Object geometry
Lighting
Calculations
Clipping
• Các điểm của hệ thống tọa độ 3D thế giới thực
• Các điểm bóng theo mô hình chiếu sáng
• Các điểm trong mô hình hệ tọa độ Camera hay tọa độ điểm nhìn
• Các tọa độ điểm của vùng hình chóp cụt với điểm nhìn xác định
• Điểm 2-D theo tọa độ màn hình sau phép chiếu được xén tỉa
Modeling
Transforms
Viewing
Transform
Projection
Transform
Phép biến đổi Transformations
zscreen space- không gian màn hình
zmodel space Không gian mô hình (a.k.a object space or world space)
– Modeling transforms
– Viewing transforms
– Projection transforms
Rendering: Transformations
– Size, place, scale, and rotate objects parts of the
model w.r.t each other
– Object coordinates Æ world coordinates
Z
X
Y
X
Z
Y
Rendering: Transformations
– Rotate & translate the world to lie directly in front of the camera
zTypically place camera at origin
zTypically looking down -Z axis – World coordinates Æ view coordinates
Trang 2Rendering: Transformations
– Apply perspective foreshortening
zDistant = small: the pinhole cameramodel
– View coordinates Æ screen coordinates
Rendering: Transformations
coordinate systems (i.e., basis sets)
as matrices
⎥
⎦
⎤
⎢
⎣
⎡
⎥
⎦
⎤
⎢
⎣
=
⎥
⎦
⎤
⎢
⎣
⎡
′
′
Y
X Y
X
θ θ
θ θ
cos sin
sin cos
Rendering: Transformations
zHomogeneous coordinates : represent
coordinates in 3 dimensions with a 4-vector
– Denoted [x, y, z, w]T
zNote that w = 1in model coordinates
– To get 3-D coordinates, divide by w :
[x’, y’, z’]T= [x/w, y/w, z/w]T
The Rendering Pipeline: 3-D
Modeling Transforms
Scene graph Object geometry
Lighting Calculations
Viewing Transform Clipping Projection Transform
Result:
• All vertices of scene in shared 3-D “world” coordinate system
• Vertices shaded according to lighting model
• Scene vertices in 3-D “view” or “camera” coordinate system
• Exactly those vertices & portions of polygons in view frustum
• 2-D screen coordinates of clipped vertices
Rendering: Ánh sáng - Lighting
some approximation of lighting
– Global illumination : solves for lighting of the whole
scene at once
– Local illumination : local approximation, typically
lighting each polygon separately
local illumination at run time
The Rendering Pipeline: 3-D
Modeling Transforms
Scene graph Object geometry
Lighting Calculations Viewing Transform Clipping Projection Transform
Result:
•All vertices of scene in shared 3-D “world” coordinate system
•Vertices shaded according to lighting model
•Scene vertices in 3-D “view” or “camera” coordinate system
•Exactly those vertices & portions of polygons in view frustum
•2-D screen coordinates of clipped verticesD screen coordinates of clipped vertices
Trang 3Rendering: Clipping
zClipping a 3-D primitive returns its intersection
with the view frustum:
Rendering: Xén tỉa - Clipping
– We will have a whole assignment on clipping
In: 3 vertices Out: 6 vertices Clip
Out: 2 polygons
The Rendering Pipeline: 3-D
Transform Illuminate
Transform Clip Project Rasterize
Model & Camera
Parameters Rendering Pipeline Framebuffer Display
Modeling: The Basics
lines, polygons (i.e., triangles)
– Collection of primitives, other objects
– Associated matrix for transformations
zInstancing : using same geometry for multiple objects
– 4 wheels on a car, 2 arms on a robot
Modeling: The Scene Graph
tượng, quan hệ giũa các đối tượng và các phép
biến đổi trên đối tượng đó
– Tương ứng là các ma trận Robot
Body Head
Arm Trunk Leg Eye
Mouth
Modeling: The Scene Graph
zTraverse the scene graph in depth-first order, concatenating transformations
Arm Trunk Leg Eye Mouth
Robot
Foot
Matrix Stack
Visited Unvisited Active
Trang 4Modeling: The Camera
– Can be very sophisticated
zField of view, depth of field, distortion, chromatic aberration…
– Interactive graphics (OpenGL):
zCamera pose: position & orientation
–Captured in viewing transform (i.e., modelview matrix)
zPinhole camera model
–Field of view
–Aspect ratio
–Near & far clipping planes
Modeling: The Camera
– Homogeneous coordinates Æ 4x4 matrix!
– See OpenGL Appendix F for the matrix
matrix, which premultiplies the modeling matrices – Actually, OpenGL lumps viewing and modeling transforms into modelview matrix
Rời rạc hoá điểm ảnh
(Scan Conversion rasterization)
z 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
z Tính chất các đối tượng cần đảm bảo :
– continuous
– pass through specified points
– uniform brightness
– efficient
Biểu diễn đoạn thẳng
z Biểu diễn tường minh (y-y1)/( x-x1) = ( y2-y1)/( x2-x1)1
y = kx + m
– k = (y2-y1)/( x2-x1)
– m = y1- kx1
– Δy = k Δx
z 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
z 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 )
m
P(x1, y1)
P(x2 , y2)
u
Sinh đường tròn
Scan Converting Circles
z Implicit: f(x) = x2+y2-R2
z Explicit: y = f(x)
z Parametric:
2 2
y = ± R − x
cos
sin
x R
y R
θ
θ
=
=
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
Usually, we draw a quarter circle by
incrementing x from 0 to R in unit steps
and solving for +y for each step
- by stepping the angle from 0 to 90
- avoids large gaps but still insufficient
Thuật toán DDA (Digital Differential Analizer)
Giải thuật DDA
z 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;
k = 1/m;
putpixel(x,y);
while x<x2 begin
x = x+1;
y = y+k;
putpixel(round(x),round(y));
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 );
}}
Trang 5Giải thuật Bresenham
z 1960 Bresenham thuộc
IBM
z điểm gần với đường thẳng
dựa trên độ phân giai hưu
hạn
z 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
z Xét đoạn thẳng với 0 < k < 1 0 1 2
0 1
d1
Giải thuật Bresenham
d2= y - yi = k(xi +1) + b - yi
d1= yi+1 y = yi + 1 k(xi + 1) -b
z If d1≤ d2=> yi+1= yi + 1 else d1 > d2=> yi+1= yi
z D = d1- d2
= -2k(xi + 1) + 2yi - 2b + 1
z Pi = ΔxD = Δx (d1- d2)
d1 d2
i+1
yi
yi+1
Pi = -2Δyxi + 2Δxyi + c
Pi+1- Pi
= -2Δy(xi+1- xi) + 2Δx(yi+1- yi)
z Nếu Pi ≤ 0 ⇒ yi+1= yi + 1
Pi+1= Pi - 2Δy + 2Δx
z Nếu Pi > 0 ⇒ yi+1= yi
Pi+1= Pi - 2Δy
P1= Δx(d1- d2)
P1= -2Δy + Δx
Giải thuật Bresenham
y i+1
M ( x i , y i )
x i x i+1
Giải thuật trung điểm-Midpoint
z Jack Bresenham 1965 / Pitteway 1967
z VanAken áp dụng cho việc sinh các đường thẳng và đường tròn 1985
z 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
z d = F (xi + 1, yi + 1/2) là trung điểm của đoạn AB
z 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
A M B
Bresenham’s Algorithm: Midpoint
Algorithm
z Sử dụng phương pháp biểu diễn không tường minh
z Tại mỗi trung điểm của đoạn thẳng giá trị được tính
là:
0
= +
ax
i
i
i i i
i
i i i
i
y x c by
ax
y x c by
ax
y x c by
ax
, 0 , 0 , 0
⇒
>
+ +
⇒
<
+ +
⇒
= +
above line below line
a
⎠
⎞
⎜
⎝
⎛ + + +
=
2
1 1
Bresenham’s Algorithm: Midpoint Algorithm
b a d
c y b x a d y
x
i
i i i i
i
+ +
=
+
⎟
⎠
⎞
⎜
⎝
⎛ + + +
=
⇒
⎟
⎠
⎞
⎜
⎝
+
2
3 2 2
3 ,
Trang 6Bresenham’s Algorithm: Midpoint
Algorithm
z if d i < 0then chọn điểm B và trung điểm mới là
z Ta có:
z Ðiểm đầu
( )
2 2
1 1
2
1
,
1
b a c by ax
c y b x d y
x
start start
start start
start start
start
+ + + +
=
+
⎟
+ +
=
⇒
⎟
a d
c y b x a d y
x
i
i i i i
i
+
=
+
⎟
⎜
⎛ + + +
=
⇒
⎟
2
1 2
2
1 ,
C x y x
C
c
x x x
b
y y y
a
start end start end
+ Δ
Δ
=
⎪
⎪
⎫
Δ
=
−
= Δ
−
−
=
Δ
=
where
2
0+a+b
=
Midpoint Line Algorithm
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
Giải thuật
Bresenham's Midpoint
z d = a(xi + 1) + b(yi + 1/2) + c
z Nếu điểm được chọn là B thi M sẽ tang
theo x một đơn vị
– d i +1 = F(xi +2, yi + 1/2)
= a(xi +2) + b(yi + 1/2) + c
– di = a(xi + 1) + b(yi + 1/2) + c
z Nếu điểm A được chọn thi` 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
d <= 0
B¾t ®Çu
x = x1 ;
y = y1;
dx = x2 - x1;
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
Midpoint Circle Algorithm
z Sử dụng phương pháp biểu diễn không tường minh trong giải thuật
z 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
z Với d ilà giá trị của đường tròn tại một điểm bất kỳ ta có
( x − xc) (2+ y − yc)2− r2= 0
( ) ( ) ( , )isoutsidecircle if
circle
on is , if
circle inside is , if
⎪
⎪
>
=
<
=
i i i i i i
i
y x y x y x d
Midpoint Circle Algorithm
z 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:
z If d i< 0 we choose pixel A otherwise we choose pixel B
– Note: we currently assume the circle is centered at the origin
2 2
2
1
x
di= i+ + ⎜ ⎛ −i ⎟ −
Midpoint Circle Algorithm
z Again, as with the line algorithm, the choice of A or B can be
used to determine the new value of d i+1
z If A chosen then next midpoint has the following decision
variable:
z Otherwise if B is chosen then the next decision variable is given
by:
3 2 2
1 2 2
1 ,
2 2
1
+ +
=
−
⎟
⎜
⎛ − + +
=
⇒
⎟
i i
i i i i
i
x d
r y x d y
x
5 2 2 2
3 2 2
3 ,
2 2 1
+
− +
=
−
⎟
⎜
⎛ − + +
=
⇒
⎟
i i i
i i i i
i
y x d
r y x d y
x
Trang 7Midpoint Circle Algorithm
z If we assume that the radius is an integral value, then the first
pixel drawn is (0, r) and the initial value for the decision variable
is given by:
z Although the initial value is fractional, we note that all other
values are integers.
r
r r r d r
−
=
−
⎟
⎠
⎞
⎜
⎝
+
=
⇒
⎟
⎠
⎞
⎜
⎝
4 5
4
1 1
2
1
,
0
r
d0=1 −
Midpoint Circle Algorithm
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(c x +x,c y +y) endwhile
initialisation
choose B choose A
Translate to the circle center stop at diagonal ⇒ end of octant
Scan Converting Ellipses
z 2a is the length of the major axis along the x axis.
z 2b is the length of the minor axis along the y axis.
z The midpoint can also be applied to ellipses.
z 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
2 2 2 2 2 2
F x y = b x + a y − a b =
Scan Converting Ellipses: Algorithm
z Firstly we divide the quadrant into two regions
z 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 =∂ ∂ +∂ ∂ = F x i F y j b x i + a y j
A
M tiep tuyen = -1
B gradient
B C M
i
Ellipses: Algorithm (cont.)
z At the next midpoint, if a 2 (y p -0.5)<=b 2 (x p +1), we switch region 1=>2
z In region 1, choices are E and SE
– Initial condition: dinit= b2+a2(-b+0.25)
– For a move to E, dnew= dold+DeltaEwith DeltaE= b2(2xp+3)
– For a move to SE, dnew= dold+DeltaSEwith
DeltaSE= b2(2xp+3)+a2(-2yp+2)
z In region 2, choices are S and SE
– Initial condition: dinit= b2(xp+0.5)2+a2((y-1)2-b2)
– For a move to S, dnew= dold+Deltaswith Deltas= a2(-2yp+3)
– For a move to SE, dnew= dold+DeltaSEwith
DeltaSE= b2(2xp+2)+a2(-2yp+3)
z Stop in region 2 when the y value is zero
Ký tự Bitmap
z 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ỏ
z Font/typeface: set of character shapes
z fontcache
– các ký tự theo chuỗi liên tiếp nhau trong bộ nhớ
z Dạng cơ bản
– (thường N, nghiêng I, đậm B, nghiêng đậm B+I)
z Thuộc tính
– Also colour, size, spacing and orientation
ab
Trang 8Cấu trúc font chữ
Typedef struct
{
int leftx,
int width;
} Char location; //Vị trí của text
Typedef struct
{
CacheId;
Heiglit; // Độ rộng chữ
CharSpace; // Khoảng
cách giữa các ký tự
Charlocation Table [128];
} fontcache
Ký tự vector
z 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
z Tốn kém nhất về mặt tính toán
z Ch ất l ượ ngcao
So sánh
z Đơn giản trông việc sinh ký
tự ( copypixel)
z Lưu trữ lớn
z Các phép biến đổi (I,B,
scale) đòi hỏi lưu trữ thêm
z Kích thước không dổi
z Phức tạp (Tính toán phương trình)
z Lưu trữ gọn nhẹ
z Các phép biến đổi dựa vào các công thức biến đổi
z Kích thước phụ thuôc vào môi trường ( ko có kích thước cố định)
Giải thuật đường quét sinh đa giác
Polygon Scan Conversion
định:
– some algorithms allow triangular polygons only
– others require that the polygons are convex and non
triangular convex non-convex self-intersecting religious
Polygon Scan Conversion
loại khác nhau
z 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
z This represents the heart of a scan-line rendering algorithm
used in many commercial products including Renderman and
3D Studio MAX
Polygon Scan Conversion
z 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
z Các diể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)
z Đả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
Trang 9Polygon Scan Conversion
z 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
z Need to handle 4 cases to prevent pixel sharing:
– if intersection has fractional x value, do we round up or down?
zif inside (on left of span) round up, if outside (on right) round down
– what happens if intersection is at an integer x value?
zif on left of span assume its interior otherwise exterior
– how do we handle shared vertices?
zignore pixel associated with y maxof an edge
– how do we handle horizontal edges?
zhandled as a result of previous rule (lower edges not drawn)
Polygon Scan Conversion
rounded down for A rounded up for B
integer x value is on
right = exterior
ymaxnot included horizontal edge
removed
Polygon Scan Conversion
z Determining intersections with polygon edges is expensive
– rather than re-computing all intersections at each iteration, use
incremental calculations
– i.e if we intersect edge e on scan-line i then it is likely we will
intersect the edge on scan-line i+1 (this is known as
edge-coherence)
z Assume slope of the edge > 1 (other edges obtained via
symmetries)
– incremental DDA calculation was:
– slope m is given by
– note that numerator and denominator are integral ⇒ we can use
integer DDA
m x x y
yi i 1 , i i 1
1
1= + += +
+
( xend end xstart start)
y y m
−
−
=