Các giải thuật sinh các thực thể<br />
cơ sở<br />
<br />
Rendering Pipeline: 3-D<br />
Transform<br />
Illuminate<br />
Transform<br />
Clip<br />
Project<br />
<br />
Le Tan Hung<br />
hunglt@it-hut.edu.vn<br />
0913030731<br />
<br />
Rasterize<br />
<br />
Model & Camera<br />
Parameters<br />
<br />
The Rendering Pipeline: 3-D<br />
<br />
z<br />
z<br />
<br />
Modeling<br />
Transforms<br />
<br />
• Các điểm của hệ thống tọa độ 3D thế giới thực<br />
<br />
Lighting<br />
Calculations<br />
<br />
• Các điểm bóng theo mô hình chiếu sáng<br />
<br />
Viewing<br />
Transform<br />
<br />
• Các điểm trong mô hình hệ tọa độ Camera hay tọa độ điểm nhìn<br />
<br />
Clipping<br />
<br />
• 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<br />
<br />
z<br />
<br />
–<br />
–<br />
<br />
Rendering: Transformations<br />
<br />
Modeling transforms<br />
<br />
–<br />
<br />
Modeling transforms<br />
Viewing transforms<br />
Projection transforms<br />
<br />
• Điểm 22-D theo tọa độ màn hình sau phép chiếu được xén tỉa<br />
<br />
Rendering: Transformations<br />
–<br />
<br />
Display<br />
<br />
screen space- không gian màn hình<br />
model space Không gian mô hình<br />
(a.k.a. object space or world space)<br />
3 loại phép biến đổi:<br />
<br />
–<br />
<br />
z<br />
<br />
Framebuffer<br />
<br />
Phép biến đổi Transformations<br />
<br />
Scene graph<br />
Object geometry<br />
<br />
Projection<br />
Transform<br />
<br />
Rendering Pipeline<br />
<br />
z<br />
<br />
Size, place, scale, and rotate objects parts of the<br />
model w.r.t. each other<br />
Object coordinates Æ world coordinates<br />
<br />
Viewing transform<br />
–<br />
<br />
Rotate & translate the world to lie directly in front of<br />
the camera<br />
z<br />
z<br />
<br />
–<br />
<br />
Typically place camera at origin<br />
Typically looking down -Z axis<br />
<br />
World coordinates Æ view coordinates<br />
<br />
Y<br />
Y<br />
X<br />
<br />
Z<br />
X<br />
<br />
Z<br />
<br />
1<br />
<br />
Rendering: Transformations<br />
z<br />
<br />
Projection transform<br />
–<br />
<br />
Apply perspective foreshortening<br />
<br />
–<br />
<br />
View coordinates Æ screen coordinates<br />
<br />
z<br />
<br />
Rendering: Transformations<br />
z<br />
<br />
Distant = small: the pinhole camera model<br />
<br />
z<br />
z<br />
<br />
All these transformations involve shifting<br />
coordinate systems (i.e., basis sets)<br />
Oh yeah, that’s what matrices do…<br />
Represent coordinates as vectors, transforms<br />
as matrices<br />
<br />
⎡X ′⎤ ⎡cos θ<br />
⎢ ′⎥ = ⎢ θ<br />
⎣Y ⎦ ⎣sin<br />
z<br />
<br />
Rendering: Transformations<br />
z<br />
<br />
Homogeneous coordinates: represent<br />
coordinates in 3 dimensions with a 4-vector<br />
–<br />
<br />
Denoted [x, y, z, w]T<br />
<br />
–<br />
<br />
To get 3-D coordinates, divide by w:<br />
[x’, y’, z’]T = [x/w, y/w, z/w]T<br />
<br />
z<br />
<br />
z<br />
z<br />
<br />
Note that w = 1 in model coordinates<br />
<br />
Transformations are 4x4 matrices<br />
Why? To handle translation and projection<br />
<br />
Multiply matrices = concatenate transforms!<br />
<br />
The Rendering Pipeline: 3-D<br />
Scene graph<br />
Object geometry<br />
<br />
z<br />
<br />
Illuminating a scene: coloring pixels according to<br />
some approximation of lighting<br />
–<br />
–<br />
<br />
z<br />
<br />
Global illumination: solves for lighting of the whole<br />
scene at once<br />
Local illumination: local approximation, typically<br />
lighting each polygon separately<br />
<br />
Interactive graphics (e.g., hardware) does only<br />
local illumination at run time<br />
<br />
Result:<br />
<br />
Modeling<br />
Transforms<br />
<br />
• All vertices of scene in shared 33-D “world” coordinate system<br />
<br />
Lighting<br />
Calculations<br />
<br />
• Vertices shaded according to lighting model<br />
<br />
Viewing<br />
Transform<br />
<br />
• Scene vertices in 33-D “view” or “camera” coordinate system<br />
<br />
Clipping<br />
Projection<br />
Transform<br />
<br />
Rendering: Ánh sáng - Lighting<br />
<br />
−sin θ ⎤ ⎡X ⎤<br />
⎥⎢ ⎥<br />
cos θ ⎦ ⎣Y ⎦<br />
<br />
• Exactly those vertices & portions of polygons in view frustum<br />
• 2-D screen coordinates of clipped vertices<br />
<br />
The Rendering Pipeline: 3-D<br />
Scene graph<br />
Object geometry<br />
<br />
Result:<br />
<br />
Modeling<br />
Transforms<br />
<br />
• All vertices of scene in shared 33-D “world” coordinate<br />
<br />
Lighting<br />
Calculations<br />
<br />
• Vertices shaded according to lighting model<br />
<br />
system<br />
<br />
Viewing<br />
Transform<br />
<br />
• Scene vertices in 33-D “view” or “camera” coordinate<br />
system<br />
<br />
Clipping<br />
<br />
• Exactly those vertices & portions of polygons in view<br />
frustum<br />
<br />
Projection<br />
Transform<br />
<br />
• 2-D screen coordinates of clipped vertices<br />
<br />
2<br />
<br />
Rendering: Clipping<br />
z<br />
<br />
Rendering: Xén tỉa - Clipping<br />
<br />
Clipping a 3-D primitive returns its intersection<br />
with the view frustum:<br />
<br />
z<br />
<br />
Clipping is tricky!<br />
<br />
The Rendering Pipeline: 3-D<br />
Transform<br />
<br />
z<br />
<br />
Transform<br />
<br />
z<br />
<br />
–<br />
<br />
Project<br />
<br />
–<br />
<br />
Rasterize<br />
<br />
z<br />
Framebuffer<br />
<br />
z<br />
z<br />
<br />
Tương ứng là các ma trận<br />
<br />
In: 1 polygon<br />
Out: 2 polygons<br />
<br />
Collection of primitives, other objects<br />
Associated matrix for transformations<br />
<br />
–<br />
<br />
4 wheels on a car, 2 arms on a robot<br />
<br />
Modeling: The Scene Graph<br />
<br />
Đồ thị cảnh scene graph : cây đồ thị lưu trữ đối<br />
tượng, quan hệ giũa các đối tượng và các phép<br />
biến đổi trên đối tượng đó<br />
Nút là đối tượng;<br />
Cành là các thực thể biến đổi<br />
–<br />
<br />
Clip<br />
<br />
Instancing: using same geometry for multiple<br />
objects<br />
<br />
Display<br />
<br />
Modeling: The Scene Graph<br />
z<br />
<br />
In: 3 vertices<br />
Out: 6 vertices<br />
<br />
Common interactive 3-D primitives: points,<br />
lines, polygons (i.e., triangles)<br />
Organized into objects<br />
<br />
Clip<br />
<br />
Rendering Pipeline<br />
<br />
Clip<br />
<br />
Modeling: The Basics<br />
<br />
Illuminate<br />
<br />
Model & Camera<br />
Parameters<br />
<br />
We will have a whole assignment on clipping<br />
<br />
–<br />
<br />
z<br />
z<br />
<br />
Traverse the scene graph in depth-first order,<br />
concatenating transformations<br />
Maintain a matrix stack of transformations<br />
Robot<br />
<br />
Visited<br />
Head<br />
<br />
Robot<br />
<br />
Body<br />
<br />
Unvisited<br />
<br />
Head<br />
<br />
Body<br />
<br />
Active<br />
<br />
Matrix<br />
Stack<br />
<br />
Mouth<br />
<br />
Eye<br />
<br />
Leg<br />
<br />
Trunk<br />
<br />
Arm<br />
<br />
Foot<br />
Mouth<br />
<br />
Eye<br />
<br />
Leg<br />
<br />
Trunk<br />
<br />
Arm<br />
<br />
3<br />
<br />
Modeling: The Camera<br />
z<br />
<br />
Finally: need a model of the virtual camera<br />
–<br />
<br />
Can be very sophisticated<br />
<br />
–<br />
<br />
Interactive graphics (OpenGL):<br />
<br />
z<br />
<br />
z<br />
<br />
Camera pose: position & orientation<br />
Captured in viewing transform (i.e., modelview matrix)<br />
<br />
–<br />
–<br />
<br />
(Scan Conversion rasterization)<br />
<br />
z<br />
<br />
–<br />
<br />
z<br />
<br />
Field of view<br />
Aspect ratio<br />
Near & far clipping planes<br />
<br />
Rời rạc hoá điểm ảnh<br />
<br />
–<br />
–<br />
–<br />
–<br />
<br />
Homogeneous coordinates Æ 4x4 matrix!<br />
See OpenGL Appendix F for the matrix<br />
<br />
The projection matrix premultiplies the viewing<br />
matrix, which premultiplies the modeling matrices<br />
–<br />
<br />
Actually, OpenGL lumps viewing and modeling<br />
transforms into modelview matrix<br />
<br />
Biểu diễn đoạn thẳng<br />
<br />
Là tiến trình sinh các đối tượng hình học cơ sở bằng<br />
phương pháp xấp xỉ dựa trên lưới phân giải của màn<br />
hình<br />
Tính chất các đối tượng cần đảm bảo :<br />
–<br />
<br />
Camera parameters (FOV, etc) are encapsulated<br />
in a projection matrix<br />
–<br />
<br />
Pinhole camera model<br />
–<br />
<br />
z<br />
<br />
z<br />
<br />
Field of view, depth of field, distortion, chromatic aberration…<br />
<br />
–<br />
<br />
z<br />
<br />
Modeling: The Camera<br />
<br />
z<br />
<br />
Biểu diễn tường minh<br />
<br />
(y-y1)/( x-x1) = ( y2-y1)/( x2-x1)1<br />
y = kx + m<br />
<br />
smooth<br />
continuous<br />
pass through specified points<br />
uniform brightness<br />
efficient<br />
<br />
–<br />
<br />
k = (y2-y1)/( x2-x1)<br />
<br />
–<br />
<br />
m = y1- kx1<br />
<br />
–<br />
<br />
z<br />
<br />
Δy = k Δx<br />
<br />
P(x2 , y2)<br />
<br />
Biểu diễn không tường minh<br />
<br />
(y2-y1)x - (x2-x1)y + x2y1 - x1y2 = 0<br />
hay rx + sy + t = 0<br />
<br />
z<br />
<br />
–<br />
<br />
s = -(x2-x1 )<br />
<br />
–<br />
<br />
r = (y2-y1) và t = x2y1 - x1y2<br />
<br />
Biểu diễn tham biến<br />
<br />
u<br />
P(x1, y1)<br />
<br />
P(u) = P1 + u(P2 - P1)<br />
u [0,1]<br />
X = x1 + u( x2 - x1 )<br />
Y = y1 + u( y2 - y1 )<br />
<br />
Thuật toán DDA<br />
(Digital Differential Analizer)<br />
<br />
Sinh đường tròn<br />
Scan Converting Circles<br />
z<br />
<br />
Explicit: y = f(x)<br />
<br />
Giải thuật thông thường<br />
<br />
y = ± R2 − x2<br />
<br />
z<br />
<br />
Usually, we draw a quarter circle by<br />
incrementing x from 0 to R in unit steps<br />
and solving for +y for each step.<br />
Parametric:<br />
<br />
x = R cosθ<br />
y = R sin θ<br />
<br />
z<br />
<br />
m<br />
<br />
- by stepping the angle from 0 to 90<br />
- avoids large gaps but still insufficient.<br />
<br />
Implicit: f(x) = x2+y2-R2<br />
If f(x,y) = 0 then it is on the circle.<br />
f(x,y) > 0 then it is outside the circle.<br />
f(x,y) < 0 then it is inside the circle.<br />
<br />
DrawLine(int x1,int y1, int x2,int y2,<br />
int color)<br />
{<br />
float y;<br />
int x;<br />
for (x=x1; x 0 ⇒ yi+1 = yi<br />
Pi+1 = Pi - 2Δy<br />
<br />
z<br />
z<br />
<br />
P1 = Δx(d1 - d2)<br />
P1 = -2Δy + Δx<br />
<br />
Bresenham’s Algorithm: Midpoint<br />
Algorithm<br />
z<br />
<br />
Sử dụng phương pháp biểu diễn không tường minh<br />
<br />
ax + by + c = 0<br />
axi + byi + c = 0 ⇒ ( xi , yi )<br />
<br />
axi + byi + c < 0 ⇒ ( xi , yi )<br />
<br />
z<br />
<br />
z<br />
<br />
xi+1<br />
<br />
else d1 > d2 => yi+1 = yi<br />
z D = d1 - d2<br />
= -2k(xi + 1) + 2yi - 2b + 1<br />
z Pi = ΔxD = Δx (d1 - d2)<br />
<br />
on line<br />
above line<br />
<br />
axi + byi + c > 0 ⇒ ( xi , yi ) below line<br />
Tại mỗi trung điểm của đoạn thẳng giá trị được tính<br />
là:<br />
1⎞<br />
⎛<br />
di = a( xi +1) + b⎜ yi + ⎟ + c<br />
2⎠<br />
⎝<br />
<br />
Jack Bresenham 1965 / Pitteway 1967<br />
VanAken áp dụng cho việc sinh các đường<br />
thẳng và đường tròn 1985<br />
Các công thức đơn giản hơn, tạo được các<br />
điểm tương tự như với Bresenham<br />
d = F (xi + 1, yi + 1/2) là trung điểm của đoạn<br />
AB<br />
Việc so sánh, hay kiểm tra M sẽ được thay<br />
bằng việc xét giá trị d.<br />
– Nếu d > 0 điểm B được chọn, yi+1 = yi<br />
– nếu d < 0 điểm A được chọn. ⇒ yi+1 = yi +<br />
1<br />
– Trong trường hợp d = 0 chúng ta có thể<br />
chọn điểm bất kỳ hoặc A, hoặc B.<br />
<br />
Ayi+1<br />
M<br />
B<br />
<br />
M<br />
<br />
( xi , yi )<br />
xi<br />
<br />
xi+1<br />
<br />
Bresenham’s Algorithm: Midpoint<br />
Algorithm<br />
z<br />
<br />
If di > 0 then chọn điểm A ⇒ trung điểm tiếp theo sẽ có dạng:<br />
<br />
3⎞<br />
3⎞<br />
⎛<br />
⎛<br />
⎜ xi + 2, yi + ⎟ ⇒ di+1 = a( xi + 2) + b⎜ yi + ⎟ + c<br />
2⎠<br />
2⎠<br />
⎝<br />
⎝<br />
= di + a + b<br />
<br />
Chúng ta gọi di là biến quyết định của bước thứ i<br />
<br />
5<br />
<br />