KHỬ MẶT KHUẤT
NGÔ QUỐC VIỆT
2009
Hệ tọa độ quan sát
Hiển thị đối tượng trong hệ tọa tọa độ quan
sát.
Giới thiệu khối nhìn (view volume)
Các thuật giải khử mặt khuất
2
Mơ hình đối tượng 3D trong thế giới thực (mơ tả đối
tượng thật sự sao cho tiện) cần chuyển về hệ tọa độ
quan sát.
Hệ tọa độ quan sát gồm vị trí mắt nhìn, điểm tham
chiếu bất kỳ, vector hướng lên có gốc tại điểm tham
chiếu.
Mặt phẳng chiếu có thể chọn có phương vng góc
với trục Z của hệ tọa độ quan sát.
3
Camera giả lặp gồm
Mặt phẳng quan sát (viewplane) chứa một cửa sổ (window).
Hệ tọa độ quan sát (viewing coordinate system)
Mắt nhìn
Chức năng
Mắt nhìn qua cửa sổ và thấy được một phần của thế giới, đó là
phần cần được vẽ.
Ký hiệu:
Hệ UVN chỉ hệ tọa độ quan sát
Quan sát = nhìn
4
Trong hệ tọa độ thế giới thực (world coordinates)
Điểm quy chiếu của quan sát, VRP (view reference point)
▪ r = (rx , ry , rz )
Vector thẳng góc của mặt phẳng quan sát, VPN (viewplane normal)
▪ n = (nx , ny , nz ), là một vector đơn vị
Vector đơn vị của trục V là v (vector “hướng lên”)
Trong hệ tọa độ quan sát UVN
Cửa sổ, có tọa độ trong mặt UV là (Wl , Wt , Wr , Wb )
Mắt nhìn, có tọa độ là (eu , ev , en). Tọa độ mắt nhìn còn được xem như
tọa độ camera.
5
cửa sổ
V
z
U
VPN
v
(viewplane normal)
u
n
N
r
VRP
(view reference point)
x
y
6
• Cho điểm P có tọa độ (x, y, z) trong hệ tọa độ thực. Tìm tọa
độ của P trong hệ tọa độ quan sát!
Đặt
ux
M vx
n
x
uy
vy
ny
uz
vz
nz
thì
ux
1
M uy
u
z
vx
vy
vz
nx
ny
nz
7
Nếu P có tọa độ (a, b, c) trong hệ tọa độ quan sát thì
• (x, y, z) = (a, b, c) M + r .
Vì vậy
• (a, b, c) = (p - r) M -1
8
Tìm ma trận dạng tọa độ đồng nhất:
Aˆ WV
(a, b, c, 1) = (x, y, z, 1)
Dùng
(a, b, c) = (p - r) M -1 = p M T - r M T
và đặt
r’ = (r u, r v, r n)
Tìm được
Aˆ
WV
ux
uy
u
z
r 'x
vx
vy
vz
r'y
nx
ny
nz
r 'z
0
0
0
1
Cách xác định ma trận biến
đổi từ hệ tọa độ thực sang hệ
tọa độ quan sát được trình
bày trong tài liệu.
9
• Đặc tả phép chiếu phối cảnh (các tọa độ ở đây
đều là trong hệ UVN)
– Tâm của phép chiếu: mắt tại e = (eu , ev , en )
– Mặt phẳng chiếu:
mặt phẳng quan sát UV
V
x
Wt
N
Wl
y
Wr
maét e
Wb
z
U
10
• Tìm ảnh (u*, v*) của p = (pu , pv , pn ) dưới phép
chiếu!
– Đường thẳng qua mắt và p (tia chiếu) có biểu diễn
tham số
• r(t) = e(1 - t) + pt
• Gọi t’ là trị của tham số tại đó tia chiếu cắt mặt phẳng quan sát,
thì
[r(t’)]n = 0, tức là
en(1 - t’) + pn t’ = 0.
Vậy
en
t'
en pn
11
• Voi u* = [r(t’)]u và v* = [r(t’)]v ta tìm được
u*
en pu eu pn
en pn
v*
en pv ev pn
en pn
• Trường hợp mắt nằm trên trục N thì eu = ev = 0, khi đó từ
biểu thức trên có được
u*
pu
1 pn / en
pv
v
1 pn / en
*
12
Khối quan sát (= khối nhìn, view volume) là hình chóp cụt giới
hạn bởi
Hình chóp xác định bởi mắt nhìn và cửa sổ
Mặt trước (front plane): mặt phẳng n = F
Mặt sau (back plane): mặt phẳng n = B
mặt trước: n = F
V
mặt sau: n = B
Wt
Wl
N
Wr
U
Wb
mặt phẳng nhìn
13
Để ý là nếu mắt ở vơ cực thì hình chóp cụt trở thành hình
hộp. Khi đó phép chiếu là phép chiếu song song theo một
hướng e.
Chỉ các thành phần của cảnh quan nằm trong thể tích nhìn là
được hiển thị; các thành phần khác sẽ được xén mất.
14
mặt trước
mặt sau
V
Wt
Wl
N
Wr
Wb
U
mặt phẳng nhìn
V
NDC
Wt
Wl
Wr
U
Wb
15
Mˆ S Mˆ P
• Prewarping là phép biến đổi affine có ma trận dạng đồng nhất
– Tính chất: prewarping ánh xạ khối nhìn thành thể tích nhìn đã được
prewarped
thể tích nhìn đã được prewarped
thể tích nhìn
V
V
Wt
Wt
B
F
Mˆ S Mˆ P
N
N
F
1 F / en
Wb
Wb
B
1 B / en
: trục U
16
Culling: so sánh vị trí vị trí, hướng của các polygon so với
trường thấy được của vùng nhìn (view volume’s field of
view), trong đó các polygon khuất cần phải được loại bỏ
trong khi rendering.
Hoạt động trên sẽ giảm thiểu các tính tốn khơng cần
thiết trên các mặt khuất.
Culling nhằm kiểm tra tính visibility của đối tượng, và
dựa trên kiểm tra này để không hiển thị đối tượng nếu
cần-hidden surface removal.
17
Yêu cầu là xác định thứ tự trước sau (theo vị trí mắt
nhìn) của các đối tượng 3D nhằm hiển thị đúng.
Cách thực hiện dựa trên các phép tính vector, cụ thể
hơn là tính dot product giữa vector chuẩn của polygon
và vector nguồn sáng (vector từ tâm của phép chiếu đến
polygon).
Nếu dot product có giá trị dương, thì polygon là visible
(vector chuẩn thấy được với viewer), ngược lại không vẽ
mặt đang xét.
18
• Có hai loại thuật giải khử mặt khuất:
– Dựa trên không gian đối tượng.
– Dựa trên không gian ảnh.
19
Thuật giải khử mặt khuất phổ biến nhất: z-buffer
algorithm.
Dựa trên khơng gian ảnh. Đề xuất bởi Edwin
Catmull 1975.
Z-buffering, cịn gọi là depth-buffering. Trong đó, độ
sâu mỗi pixel được xác định và lưu trữ trong buffer’s
depth buffer.
Dựa trên giá trị độ sâu, hay z-values, thuật giải sẽ
xác định pixel cần phải vẽ (ứng với màu của pixel
đó).
Bước khử mặt khuất z-buffer thực hiện ngay sau
bước rasterization.
20
Tạo vùng nhớ chứa các giá trị z-buffer có cùng kích
thước và độ phân giải của color buffer.
▪ Vì tại một vị trí pixel có nhiều mặt chứa nó cần lưu lại
pixel có z-value gần nhất.
Kiểm tra fragment.z > depth[s][t]
If true, the fragment is in front of
whatever was there before, so
set color[s][t]=frag.color and
depth[s][t]=frag.z
Else Cull
21
foreach ( pixel in primitive )
if ( depth(x,y).z > pixel.z ) {
color(x,y).r = pixel.r;
color(x,y).g = pixel.g;
color(x,y).b = pixel.b;
depth(x,y).z = pixel.z;
} else {
// Discard pixel
}
22
Recall frame buffer configuration is a function
of the window system.
Cần xác lập chế độ depth buffer cho cửa sổ.
glutInitDisplayMode( GLUT_RGB |
GLUT_DOUBLE | GLUT_DEPTH );
23
Bật chế độ kiểm tra depth.
glEnable( GL_DEPTH_TEST );
Xác lập mọi buffer theo giá trị mặc định
glClear( GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT );
24
Ưu điểm:
Always works. Đối tượng gần nhất luôn xác định
màu pixel.
Dễ hiểu / Dễ cài đặt.
Nhược điểm:
Tốn bộ nhớ
25