Bài giảng Đồ họa máy tính: Khử mặt khuất cung cấp cho người học những kiến thức như: 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;... Mời các bạn cùng tham khảo!
Trang 1KHỬ MẶT KHUẤT
NGÔ QUỐC VIỆT
Trang 2 Hệ tọa độ quan sát
sát.
Giới thiệu khối nhìn (view volume)
Trang 3 Mô hình đối tượng 3D trong thế giới thực (mô tả đốitượ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 thamchiếu bất kỳ, vector hướng lên có gốc tại điểm thamchiếu
Mặt phẳng chiếu có thể chọn có phương vuông gócvới trục Z của hệ tọa độ quan sát
Trang 4 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)
Trang 5 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 = (r x , r y , r z )
Vector thẳng góc của mặt phẳng quan sát, VPN (viewplane normal)
▪ n = (n x , n y , n z ), 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à (W l , W t , W r , W b )
Mắt nhìn, có tọa độ là (e u , e v , e n ) Tọa độ mắt nhìn còn được xem như tọa độ camera.
Trang 6u v n r
N
cửa sổ
Trang 7• 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!
z
y y
y
x x
x
n v
u
n v
u
n v
x
z y
x
z y
x
n n
n
v v
v
u u
u M
Trang 8 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
Trang 9' '
0 0
0 ˆ
z y
x
z z
z
y y
y
x x
x
WV
r r
r
n v
u
n v
u
n v
u A
r’ = ( r u, r v, r n)
WV
Aˆ
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.
Trang 10• Đặ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 = (e u , e v , e n )
Trang 11• Tìm ảnh (u*, v*) của p = (p u , p v , p n ) dưới phép
n
p e
e t
'
Trang 12• Voi u* = [r(t’)] u và v* = [r(t’)] v ta tìm được
• Trường hợp mắt nằm trên trục N thì e u = e v = 0, khi đó từ
biểu thức trên có được
n n
n v v
n
*
n n
n u u
n
*
p e
p e p
e v
p e
p e p
e u
u
*
p v
e p
p u
/ 1
Trang 13Khố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
Trang 14 Để ý 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.
Trang 16• 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
Trang 17 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.
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.
Trang 18 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.
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.
Trang 19• 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.
Trang 20 Thuật giải khử mặt khuất phổ biến nhất: z-bufferalgorithm.
Dựa trên không gian ảnh Đề xuất bởi EdwinCatmull 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’sdepth 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
Trang 21 Tạo vùng nhớ chứa các giá trị z-buffer có cùng kíchthướ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
Trang 22foreach ( pixel in primitive )
Trang 23 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 );
Trang 24 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 );
Trang 26 Mô phỏng quá trình họa sĩ vẽ.
Dựa trên không gian mắt nhìn
Cách thực hiện:
Sắp xếp các đối tượng theo khoảng cách đến mắt.
Đối tượng nào gần thì được vẽ đè lên đối tượng nằm xa.
Trang 27 Nhược điểm của thuật giải.
Không xét các phần giao của các đối tượng.
Sắp xếp chậm
Phải sắp xếp lại nếu mắt di chuyển.
Trang 28 Tương tự như thuật giải tô màu.
tính giao điểm với mọi đa giác.
trùng với màu của đa giác gần nhất.