Nội dung chính của “Chương 1” là những vấn đề cơ bản về đồ họa ba chiều, ứng dụng đồ họa ba chiều, đồng thời nội dung của chương 1 cũng đề cập đến một số lý thuyết cơ bản về ánh sáng,
Trang 1i
ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
Bùi Phương Thủy
NGHIÊN CỨU MỘT SỐ KỸ THUẬT TẠO BÓNG
KHỐI TRONG ĐỒ HỌA BA CHIỀU
Chuyên ngành: Khoa học máy tính
Mã số: 60 48 01
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
NGƯỜI HƯỚNG DẪN KHOA HỌC
PGS TS Đỗ Năng Toàn
Thái Nguyên - 2014
Trang 2ii
LỜI CAM ĐOAN
Luận văn là sự nghiên cứu, tổng hợp các kiến thức mà học viên đã thu thập được trong quá trình học tập tại Đại học Công nghệ thông tin và truyền thông – Đại học Thái Nguyên, dưới sự hướng dẫn, giúp đỡ của các thầy cô và bạn bè đồng nghiệp Đặc biệt là sự hướng dẫn, giúp đỡ của thầy giáo PGS.TS Đỗ Năng Toàn – Viện Công nghệ thông tin – Viện KHCN Việt Nam
Học viên cam đoan luận văn không phải là sản phẩm sao chép của bất kỳ tài liệu khoa học nào
Thái Nguyên, ngày 5 tháng 5 năm 2014
Học viên
Bùi Phương Thủy
Trang 3iii
LỜI CẢM ƠN
Luận văn sẽ không thể hoàn thành nếu không có sự động viên, hỗ trợ hết mình của rất nhiều người Trước hết tôi xin gửi lời tri ân đến PGS.TS Đỗ Năng Toàn người thầy đã chỉ bảo, giúp đỡ tận tình trong cả quá trình học tập và hoàn thiện luận văn
Tôi xin gửi lời cảm ơn đến các thầy cô giáo tại trường Đại học Công nghệ thông tin và truyền thông – Đại học Thái Nguyên, những người đã trang bị các kiến thức cơ sở, nền tảng cho việc nghiên cứu, tiếp thu những tri thức mới, mà từ đó tôi
có thể hoàn thành tốt luận văn của mình, xa hơn nữa là hoàn thành tốt những dự án, công việc trong tương lai
Quá trình thực hiện đề tài không tránh khỏi những thiếu sót Tôi hi vọng sẽ được sự góp ý chân thành từ phía các thầy, cô giáo, bạn bè, đồng nghiệp để đề tài nghiên cứu được hoàn thiện hơn
Xin chân trọng cảm ơn!
Trang 4iv
MỤC LỤC TRANG PHỤ BÌA
LỜI CAM ĐOAN i
LỜI CẢM ƠN iii
MỤC LỤC iv
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT vi
DANH MỤC CÁC BẢNG vii
DANH MỤC CÁC HÌNH ( HÌNH VẼ, ẢNH CHỤP, ĐỒ THỊ…) viii
MỞ ĐẦU 1
Chương 1 KHÁI QUÁT VỀ ĐỒ HỌA BA CHIỀU VÀ BÀI TOÁN TẠO BÓNG 5
1.1 Khái quát về đồ họa ba chiều 5
1.1.1 Quy trình hiển thị 6
1.1.2 Tổng quan biểu diễn điểm và các phép biến đổi 7
1.1.3 Phép biến đổi hiển thị 11
1.1.4 Mô hình Wireframe 13
1.1.5 Mô hình Wireframe với các phép chiếu 15
1.1.6 Phép biến đổi cổng nhìn 20
1.1.7 Bộ đệm và các phép kiểm tra 21
1.2 Bài toán tạo bóng trong đồ họa ba chiều 22
1.2.1 Nguồn sáng và phân loại nguồn sáng 22
1.2.2 Phân loại bóng 29
Chương 2 MỘT SỐ KỸ THUẬT TẠO BÓNG KHỐI TRONG ĐỒ HỌA BA CHIỀU 31
2.1 Giới thiệu 31
2.2 Danh sách cạnh viền 33
2.3 Xác định tứ giác bao quanh 38
2.4 Kỹ thuật tạo bóng Z - Pass 42
2.5. Kỹ thuật tạo bóng Z - Fail 47
2.6 So sánh giữa hai thuật toán 52
CHƯƠNG 3 CHƯƠNG TRÌNH THỬ NGHIỆM 53
3.1 Bài toán 53
3.2 Phân tích, lựa chọn giải pháp 53
3.3 Kết quả thử nghiệm 60
KẾT LUẬN 65
Trang 5v
TÀI LIỆU THAM KHẢO 66
Trang 6vi
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
STT Ký hiệu/
4 CPU Central Processing Unit Bộ xử lý trung tâm
5 GPU Graphical Processing Unit Bộ xử lý đồ họa đối khi được
hiểu đồng nghĩa với card đồ họa
6 HMD Head Mounted Displays Mũ đội đầu có màn hiển thị
Trang 7vii
DANH MỤC CÁC BẢNG
Bảng 1.1 Bảng danh sách các cạnh và đỉnh biểu diễn vật thể 14 Bảng 2.1 So sánh giữa hai thuật toán 53
Trang 8viii
DANH MỤC CÁC HÌNH ( HÌNH VẼ, ẢNH CHỤP, ĐỒ THỊ…)
Hình 1.1 Một cảnh đồ họa ba chiều 5
Hình 1.2 Quy trình hiển thị đối tượng ba chiều .6
Hình 1.3 Tổng quan về hiển thị ba chiều và các phép chiếu 11
Hình 1.4 Kết quả phép tịnh tiến 12
Hình 1.5 Vật thể ba chiều được biểu diễn bằng mô hình khung nối kết 13
Hình 1.6 Phép chiếu song song (a) và phép chiếu phối cảnh (b) 16
Hình 1.7 Phép chiếu trực giao 17
Hình 1.8 Kết quả của ba phép chiếu trực giao 17
Hình 1.9 Phép chiếu xiên 18
Hình 1.10 Phép chiếu phối cảnh đơn giản 19
Hình 1.11 Khả năng quan sát của con người tương ứng với từng mức sóng 20
Hình 1.12 Chiếc ấm được chiếu bằng Ambient Light 25
Hình 1.13 Ấm chè được chiều bằng Diffuse Light 26
Hình 1.14 Ấm chè được chiếu bằng Specular Light 26
Hình 1.15 Sự phản xạ của ánh sáng 27
Hình 1.16 Sự phản xạ không toàn phần của ánh sáng 28
1.17 29
2.1 Bối cảnh không có đổ bóng 32
2.2 Bối cảnh có bóng khối 33
2.3 Mô tả các phần của bóng khối 33
Hình 2.4 Biểu diễn của một căn nhà 34
Hình 2.5 Cạnh viền (Silhouette Edge) được tô đỏ 35
Hình 2.6 Khi nhìn từ vị trí của nguồn sáng ta sẽ không thấy bóng và rất dễ để xác định cạnh và đỉnh viền 35
Hình 2.7 Cạnh viền là cạnh có một mặt kề hướng ánh sáng còn mặt còn lại thì không 35
Hình 2.8 Dựng shadow volume mesh bằng các thêm vào các mặt phụ 38
Trang 9ix
40
40
Hình 2.11 Khối bao của tam (ABC) giác với nguồn sáng điểm L 41
Hình 2.12 Đường bao của một đa giác trong không gian hai chiều 41
Hình 2.13 Tư tưởng chính của Z-Pass 43
46
47
47
.48 Hình 2.18 Thuật toán tạo bóng khối với kỹ thuật z-fail 49
Hình 2.18 Tư tưởng của Z-Fail 50
Hình 3.1 Giao diện mô tả bóng khối 69
Hình 3.2 Giao diện mô tả bóng cứng tạo ra từ bóng khối 69
3.3 Giao diện mô tả b -fail 71
3.4 Giao diện mô tả b 72
Trang 10Đồ họa máy tính là một lĩnh vực được quan tâm phát triển, nó đang ngày càng chứng tỏ vai trò của mình trong sự phát triển của công nghệ thông tin nói riêng và các lĩnh vực của đời sống, xã hội nói chung Nó được ứng dụng rộng rãi trong hầu hết tất cả các lĩnh vực như Điện ảnh, Hoạt hình, kiến trúc và các ứng dụng xây dựng các mô hình thực tại ảo… Và không thể không nhắc đến vai trò tối quan trọng của đồ họa ba chiều trong việc tạo ra các game sử dụng đồ họa hiện nay Việc sử dụng đồ họa ba chiều trong game làm cho người chơi thích thú và có cảm giác như đang sống trong một thế giới thực Có thể nói đồ họa ba chiều đã đang và
sẽ tạo nên một nền công nghiệp game phát triển mạnh mẽ
Mục đích chính của đồ họa ba chiều là tạo ra và mô tả các đối tượng, các mô hình trong thế giới thật bằng máy tính sao cho càng giống với thật càng tốt Việc nghiên cứu các phương pháp các kỹ thuật khác nhau của đồ họa ba chiều cũng chỉ hướng đến một mục tiêu duy nhất đó là làm sao cho các nhân vật, các đối tượng, các mô hình được tạo ra trong máy tính giống thật nhất Và một trong các phương pháp đó chính là tạo bóng cho đối tượng
Thuật toán tạo bóng bằng kỹ thuật sử dụng bóng khối được đề xuất đầu tiên bởi Frank Crow vào năm 1977 Theo đó ông ta vẽ một khối mà bị che lấp ánh sáng bởi vật tạo bóng Mọi vật thể nằm trong khối đó được gọi là nằm trong bóng
Xuất phát từ thực tế đó, học viên lựa chọn đề tài: “Nghiên cứu một số kỹ thuật tạo bóng khối trong đồ hoạ ba chiều” Sự thành công của đề tài sẽ góp phần
nâng cao chất lượng của hình ảnh trong các ngành công nghiệp và giải trí
Trang 112
2 Đối tượng và phạm vi nghiên cứu:
Đối tượng của đề tài
Đồ họa ba chiều
Bài toán tạo bóng
Một số kỹ thuật tạo bóng khối
Khảo sát, phân tích, thiết kế và xây dựng phần mềm thử nghiệm
3 Hướng nghiên cứu của đề tài
Về khoa học
Đề tài tập trung nghiên cứu khái quát về các kiến thức cơ bản của đồ họa ba chiều và tạo bóng
Nghiên cứu một số kỹ thuật tạo bóng khối trong đồ họa ba chiều
Nghiên cứu đề xuất kiến trúc, công nghệ thích hợp cho việc phát triển ứng dụng
Về xây dựng phần mềm thử nghiệm
Tìm hiểu, khảo sát bài toán
Phân tích, lựa chọn giải pháp xây dựng phần mềm thử nghiệm đưa ra kết quả tạo bóng khối bằng hai kỹ thuật: kỹ thuật tạo bóng Z-Pass, kỹ thuật tạo bóng Z-Failr
4 Phương pháp nghiên cứu
Thu thập, đọc và phân tích các tài liệu và thông tin liên quan đến đề tài Phân tích, so sánh với các mô hình khác
Trang 123
Dựa trên việc tìm hiểu các thuật toán của hai kỹ thuật tạo bóng khối để đưa
ra so sánh và lựa chọn phương pháp trong trường hợp các trường hợp khác nhau Kết hợp các nghiên cứu trước đây của các tác giả trong và ngoài nước cùng với sự chỉ bảo, góp ý của Thầy hướng dẫn để hoàn thành nội dung nghiên cứu Thực nghiệm cài đặt ứng dụng để minh họa các vấn đề trình bày trong đề tài
5 Ý nghĩa khoa học của đề tài
Cấu trúc của luận văn bao gồm “Phần mở đầu”, “Phần kết luận” và ba
chương nội dung, cụ thể:
Chương 1: Khái quát về đồ họa ba chiều và bài toán tạo bóng Nội dung
chính của “Chương 1” là những vấn đề cơ bản về đồ họa ba chiều, ứng dụng đồ họa
ba chiều, đồng thời nội dung của chương 1 cũng đề cập đến một số lý thuyết cơ bản
về ánh sáng, nguồn sáng, bóng và các mô hình của chúng từ đó làm cơ sở cho các
nội dung được trình bày trong “Chương 2”
Chương 2: Một số kỹ thuật tạo bóng khối trong đồ họa ba chiều Đây là
chương nội dung chính của luận văn, nó tập chung trình bày hai kỹ thuật chính tạo
bóng khối của đối tượng đó là “kỹ thuật tạo bóng Pass ”, và “kỹ thuật tạo bóng
Z-Fail ” Với mỗi loại kỹ thuật đều có những phương pháp thể hiện khác nhau, mà
phần nội dung này của luận văn cũng đề cập đến
Trang 134
Chương 3: Chương trình thử nghiệm Đây là chương học viên giới thiệu về
một chương trình thử nghiệm được xây dựng nhằm thể hiện cho một số kết quả đã được trình bày, tổng hợp trong luận văn
Trang 145
Chương 1
KHÁI QUÁT VỀ ĐỒ HỌA BA CHIỀU VÀ BÀI TOÁN TẠO BÓNG
1.1 Khái quát về đồ họa ba chiều
Khi chúng ta mô hình hóa và hiển thị một cảnh ba chiều, ta cần phải xem xét rất nhiều khía cạnh và vấn đề khác nhau chứ không đơn giản là thêm vào tọa độ thứ
ba cho các đối tượng Bề mặt đối tượng có thể xây dựng bởi nhiều tổ hợp khác nhau của các mặt phẳng và các mặt cong Ngoài ra, đôi khi chúng ta cũng cần mô tả một
số thông tin về bên trong các đối tượng Các công cụ hỗ trợ đồ họa (graphics package) thường cung cấp một số hàm hiển thị các thành phần bên trong, những đường nét tiêu biểu hoặc hiển thị một phần của đối tượng ba chiều (solid object) Ngoài ra, các phép biến đổi hình học thường được sử dụng nhiều hơn và đa dạng hơn trong đồ họa ba chiều so với trong đồ họa hai chiều Phép biến đổi hệ quan sát trong không gian ba chiều phức tạp hơn nhiều so với trong không gian hai chiều do chúng ta phải chọn lựa nhiều tham số hơn khi mô tả một cảnh ba chiều sẽ xuất hiện trên màn hình như thế nào [1],[3]
Hình 1.1 Một cảnh đồ họa ba chiều Các mô tả về một cảnh ba chiều phải đi qua một quy trình xử lí gồm nhiều công đoạn như phép biến đổi hệ tọa độ quan sát và phép chiếu chuyển cảnh từ hệ tọa độ quan sát ba chiều xuống hệ tọa độ thiết bị hai chiều Những phần nhìn thấy
Trang 156
được của cảnh, ứng với một hệ quan sát được chọn nào đó, phải được xác định và cuối cùng, các thuật toán vẽ mặt sẽ được áp dụng nhằm tạo ra hình ảnh trung thực (gần với thực tế) của cảnh
Biến đổi mô hình: biến đổi từ hệ tọa độ đối
tượng (object-space) sang hệ tọa độ thế giới thực thực (world space)
Transformation Chuyển từ world space sang eye space
Clipping Loại bỏ phần nằm ngoài viewing space
Projection Chiếu từ eye space xuống screen space
Rastorization Chuyển đối tượng sang dạng pixel
Display Hiển thị đối tượng
Hình 1.2 Quy trình hiển thị đối tượng ba chiều Quy trình bắt đầu bằng việc xây dựng các mô hình đối tượng Các mô hình này thường được mô tả trong không gian ba chiều (x,y,z) Các mô hình thường thể hiện vật thể (solid) hoặc bề mặt (boundaries) của đối tượng Như vậy ta có hai kiểu
mô hình hóa Trong solid modeling các đối tượng đồ họa cơ sở thường được dùng
để mô tả các đối tượng có thể tích (volume) Trong boundary
representations(B-reps), các đối tượng được định nghĩa bởi bề mặt của chúng
Các mô hình thường được biểu diễn trong một hệ tọa độ cục bộ, mà ta gọi là
hệ tọa độ đối tượng Trong hệ tọa độ này chỉ có bản thân đối tượng được định nghĩa,
vì vậy gốc tọa độ và đơn vị đo lường thường được chọn sao cho việc biểu diễn đối tượng tiện lợi nhất
Trang 167
Bước đầu tiên trong quy trình hiển thị là biến đổi đối tượng từ không gian
đối tượng (object-space) vào một không gian chung gọi là không gian thực (world
space) Trong không gian này các đối tượng, nguồn sáng, và người quan sát cùng
tồn tại Bước này được gọi là giai đoạn biến đổi mô hình (modeling transformation)
Bước tiếp theo là một bước tối ưu hóa Trong giai đoạn loại bỏ đơn giản (trivial rejection) ta cần loại trừ tất cả các đối tượng không thể nhìn thấy Điều này giúp chúng ta tránh được việc xử lí một số phần không cần thiết của cảnh (scene)
mà ta đang chuẩn bị hiển thị ở các bước sau
Tiếp theo ta phải chiếu sáng (illumination) các đối tượng có thể nhìn thấy được bằng cách gán cho chúng màu sắc dựa trên các đặc tính của các chất tạo nên vật và các nguồn sáng tồn tại trong cảnh
Sau khi chiếu sáng, ta phải thực hiện một phép biến đổi hệ tọa độ để đặt vị trí quan sát (viewing position) về gốc tọa độ và mặt phẳng quan sát (viewing plane) về một vị trí mong ước Bước này gọi là bước đổi hệ quan sát Sau bước này, các đối
tượng được chuyển từ không gian thực sang không gian quan sát (eye space)
Trong không gian quan sát, ta phải thực hiện việc xén các đối tượng trong
cảnh để cảnh nằm gọn trong một phần không gian chóp cụt mà ta gọi là viewing
frustum Bước này sẽ loại bỏ hoàn toàn các đối tượng (các mảnh đối tượng) không
nhìn thấy được trong ảnh
Bước tiếp theo ta sẽ chiếu các đối tượng xuống mặt phẳng hai chiều Bước Projection thực hiện phép biến đổi từ không gian quan sát sang không gian màn
hình (screenspace)
Trong bước rời rạc hóa (rasterization) ta sẽ chuyển đối tượng thành các pixel Cuối cùng, toàn cảnh sẽ được hiển thị lên màn hình [1]
1.1.2 Tổng quan biểu diễn điểm và các phép biến đổi
Sự chuyển đổi từ tọa độ thế giới sang tọa độ của thiết bị là một chuỗi của các phép biến đổi affine và các phép chiếu trong không gian Decarts ba chiều
Các phép biến đổi affine và các phép chiếu trong không gian Decarts ba chiều có thể được biểu diễn tốt nhất bởi các ma trận 4x4 tương ứng với các tọa độ
Trang 178
đồng nhất (Homogeneous coordinates) (x,y,z,w) Điểm ba chiều với tọa độ đồng
nhất (x,y,z,w) sẽ có tọa độ affine là
w
z w
y w
x
,,
Mối quan hệ giữa tọa độ affine và tọa độ đồng nhất không phải là quan hệ 1-1 Cách đơn giản nhất để chuyển từ tọa độ affine (x,y,z) của một điểm sang tọa độ đồng nhất là đặt w=1: (x,y,z,1) Chúng ta thừa nhận rằng tất cả các tọa độ thế giới được biểu diễn bằng cách này
Ta sẽ biểu diễn các phép biến đổi affine (như là co giãn (scaling transformations), phép quay (rotations), và phép tịnh tiến (translations)) bằng các
ma trận mà sẽ không làm thay đổi thành phần w (w=1)
● Tịnh tiến bởi véc tơ T (T x,T y,T z):
1000
100
010
001)
(
z y x
t
T T T T
11
)(
z y x
t
T z
T y
T x
z y x T M
● Phép co giãn theo các nhân tố S (S x,S y,S z):
1000
00
0
000
000)
(
z y x
s
S S S S
11
)(
z S
y S
x S
z y x S M
z y x
000)
,,
(
z y x
z y x
z y x
r
n n n
v v v
u u u n v u
M
Các đối tượng trong mô hình ba chiều được xác định với tọa độ thế giới Cùng với các tọa độ của đối tượng, người dùng cũng phải xác định vị trí và hướng của
Trang 18Cả tọa độ thế giới và tọa độ mắt đều được biểu diễn bởi tọa độ đồng nhất (Homogeneous Coordinates) với w=1
Bước thứ 2 Tọa độ mắt được chuyển qua tọa độ của thiết bị chuẩn hóa (Nomalized Device Coordinates) để cho vùng không gian mà ta muốn nhìn được đặt trong một khối lập phương tiêu chuẩn:
Bước thứ 2 bao gồm 3 bước con
Một phép chiếu chuyển từ vùng nhìn sang 1 khối lập phương tiêu chuẩn với tọa
độ đồng nhất: 1 x 1 , 1 y 1, 1 z 1 Trong trường hợp sử dụng phép chiếu trực giao, vùng nhìn này sẽ có dạng một ống song song ba chiều với các mặt song song với các mặt của hệ tọa độ mắt Trong trường hợp sử dụng
Trang 1910
phép chiếu đối xứng, vùng nhìn sẽ là một hình tháp cụt với đầu mút là gốc tọa
độ của hệ tọa độ mắt Hệ tọa độ đồng nhất (4 thành phần) thu được sau phép chiếu được gọi là hệ tọa độ cắt (Clipping Coordinate System) Phép chiếu sẽ là một phép biến đổi affine trong trường hợp phép chiếu là phép chiếu trực giao Nếu phép chiếu là phép chiếu phối cảnh sẽ không phải là một phép biến đổi affine (Vì w sẽ nhận một giá trị khác 1)
Bước tiếp theo, các vùng của không gian hiển thị mà không nằm trong khối tiêu chuẩn đó (Khối này còn được gọi là khối nhìn tiêu chuẩn) sẽ bị cắt đi Các đa giác, các đường thẳng được chứa trong hoặc là có một phần
ở trong sẽ được thay đổi để chỉ phần nằm trong khối nhìn tiêu chuẩn mới được giữ lại Phần còn lại không cần quan tâm nhiều nữa
Sau khi cắt gọt, các tọa độ đồng nhất sẽ được chuyển sang tọa độ của thiết bị bằng cách chia x,y,z cho w Nếu w nhận 1 giá trị đúng qua phép chiếu, thì phép chia này sẽ cho các động phối cảnh mong muốn trên màn hình Vì lý do đó, phép chia này còn được gọi là phép chia phối cảnh (Perspective Division)
Trang 2011
Hình 1.3 Tổng quan về hiển thị ba chiều và các phép chiếu
1.1.3 Phép biến đổi hiển thị
Phép biến đổi hiển thị sẽ đưa một camera ảo được cho tùy ý về một camera với điểm nhìn trùng với gốc tọa độ và hướng nhìn dọc theo chiều âm của trục Z (xem hình 1.3) Trục Y sau phép biến đổi tương ứng sẽ chỉ lên phía trên của màn hình Trục X sẽ chỉ về phía phải
Trang 2112
Một cách thuận tiện để xác định vị trí của camera ảo là cho sẵn vị trí của điểm nhìn E, Một điểm trong khung nhìn R (điểm tham chiếu) và một hướng V sẽ chỉ lên phía trên trong màn hình
Phép biển đổi hiển thị sẽ gồm 2 bước:
● Một phép tịnh tiến sẽ đưa điểm nhìn E về gốc tọa độ Ma trận biến đổi tương ứng sẽ là M t ( E) Kết quả sẽ như sau:
Hình 1.4 Kết quả phép tịnh tiến ● Một phép quay sẽ chuyển hướng nhìn ngược về trục Z, quay vectơ V về mặt phẳng YZ Vector V sẽ chỉ được quay về trùng với trục Y nếu V vuông góc với hướng nhìn Trước hết ta sẽ xây dựng tập các véc tơ chuẩn tắc phù hợp trong tọa độ thế giới
R E
R E
n Ngược với hướng nhìn Z(O z )
n V
n V
u Chỉ về phía phải, vuông góc với n X
v n u Chỉ lên giống V , nhưng vuống góc với n và u Y
Trang 2213
Như vậy ma trận của phép quay sẽ là: M r(u,v,n)
Và do đó ma trận của phép biến đổi sẽ là:
10001
000
100
010
001
1000
000)
(),,
(
E n n n n
E v v v v
E u u u u
E E E
n n n
v v v
u u u E M n v
u
M
z y x
z y x
z y x
z y x
z y x
z y x
z y x
t r
Với mô hình khung nối kết, hình dạng của đối tượng ba chiều được biểu diễn bằng hai danh sách (list): danh sách các đỉnh (vertices) và danh sách các cạnh (edges) nối các đỉnh đó Danh sách các đỉnh cho biết thông tin hình học đó là vị trí các đỉnh, còn danh sách các cạnh xác định thông tin về sự kết nối, nó cho biết cặp các đỉnh tạo ra cạnh Chúng ta hãy quan sát một vật thể ba chiều được biểu diễn bằng mô hình khung nối kết như sau:
Trang 2314
Hình 1.5 Vật thể ba chiều được biểu diễn bằng mô hình khung nối kết Bảng 1.1 Bảng danh sách các cạnh và đỉnh biểu diễn vật thể
Vertex x Y z Edge Vertex1 Vertex2
Trang 2415
Có nhiều cách để đặc tả mô hình khung nối kết trên máy tính như dùng xâu,
mảng, và mỗi cách đều có các ưu điểm riêng trong từng ứng dụng cụ thể Ở đây
ta minh họa các biểu diễn mô hình khung nối kết bằng cấu trúc dữ liệu mảng như sau :
#define MAXVERTS 50 //số đỉnh tối đa có thể biểu diễn
#define MAXEDGES 100 //số cạnh tối đa typedef struct { float x, y, z;
} POINT3D;
typedef struct { int NumVerts; //Số đỉnh trong mô hình int NumEdges; //Số cạnh trong mô hình POINT3D Vert[MaxVerts]; int Edge[MaxEdges][2]; } WIREFRAME;
Ngoài ra, đôi khi trong mô hình wireframe người ta còn mô tả các mặt (phẳng) của đối tượng Mỗi mặt được định nghĩa bởi một đa giác bao Ví dụ, đối tượng trong hình 1.5 có 7 mặt [1]
1.1.5 Mô hình Wireframe với các phép chiếu
Để vẽ các đối tượng biểu diễn bằng mô hình khung nối kết, đơn giản chúng
ta chỉ cần vẽ các cạnh trong danh sách các cạnh mà thôi Tuy nhiên do các đỉnh và cạnh đều được định nghĩa trong ba chiều nên vấn đề đặt ra ở đây là làm thế nào để
vẽ các đường thẳng ba chiều trong mặt phẳng hai chiều Để làm điều này, chúng ta phải thực hiện phép chiếu từ ba chiều vào hai chiều để bỏ bớt một chiều Có hai loại phép chiếu đơn giản thường dùng đó là phép chiếu song song (parallel projection)
và phép chiếu phối cảnh (perspective projection) Phép chiếu song song sử dụng các đường thẳng song song đi qua các đỉnh của đối tượng, trong khi đó phép chiếu phối cảnh dùng các đường thẳng qua các đỉnh của đối tượng hội tụ về một điểm gọi là tâm chiếu (center of projection) Các đường thẳng trên được gọi là tia chiếu và giao điểm của các đường thẳng này với mặt phẳng chiếu (hay còn gọi là mặt phẳng quan
Trang 25Trong khi đó, phép chiếu phối cảnh tạo ra được biểu diễn thực hơn nhưng lại không bảo toàn được mối liên hệ giữa các chiều Các đường thẳng càng xa sẽ có các ảnh chiếu nhỏ hơn
Nói chung, kĩ thuật để vẽ một đường thẳng ba chiều là :
• Chiếu mỗi điểm đầu mút thành các điểm hai chiều
• Vẽ đường thẳng nối hai điểm ảnh qua phép chiếu
Hình 1.6 Phép chiếu song song (a) và phép chiếu phối cảnh (b)
Sở dĩ chúng ta làm được điều này vì các phép chiếu mà chúng ta sử dụng bảo toàn đường thẳng
Phép chiếu song song (parallel projection)
Khi hướng của tia chiếu vuông góc với mặt phẳng chiếu ta có phép chiếu trực giao (orthographic projection) Ngược lại, ta có phép chiếu xiên (oblique projection)
Phép chiếu trực giao
Trang 2617
Xét điểm ba chiều P = (P x , P y , P z), cách đơn giản nhất là bỏ đi thành phần z
để chiếu P thành P ’ = (P x , P y ) Điều này tương đương với chiếu điểm đó lên mặt
phẳng xy theo phương của trục z Mặt phẳng xy là mặt phẳng quan sát Xem hình
vẽ minh họa 1.6, ở đây điểm chiếu chính là giao điểm của tia a qua P và song song với trục z vuông góc với mặt phẳng xy Tia a là tia chiếu
Dễ dàng thấy rằng phép chiếu này bảo toàn đường thẳng
Hình 1.7 Phép chiếu trực giao Phép chiếu trực giao ở trên thường được gọi là phép nhìn từ trên xuống (top-view) hoặc dưới lên (bottom-view) Có hai phép chiếu khác cũng khá thông dụng là:
• Phép nhìn từ phía trước (front-view): Tia chiếu song song với trục x và mặt phẳng quan sát là yz Phép chiếu này loại bỏ thành phần x của P
• Phép nhìn từ phía bên cạnh (side-view): Tia chiếu song song với trục y và mặt phẳng quan sát là xz Phép chiếu này loại bỏ thành phần y của P
Hình 1.8 minh họa ba phép chiếu trực giao đã đề cập ở trên lên một vật thể là ngôi nhà Nhận xét rằng với phép chiếu nhìn từ phía trước ta không phân biệt được tường trước và tường sau vì chúng nằm chồng lên nhau, cũng tương tự cho trường hợp phép chiếu nhìn từ phía bên cạnh
Trang 2718
Hình 1.8 Kết quả của ba phép chiếu trực giao
Phép chiếu xiên
Hình 1.9 Phép chiếu xiên
Hình 1.9 minh họa một phép chiếu xiên Điểm P = (P x , P y , P z), qua phép
chiếu xiên sẽ nhận được điểm P ’ (x p , y p ) (P x , P y) là hình chiếu của P qua phép chiếu trực giao a là góc hợp bởi tia chiếu và đoạn nối (xp , yp) và (P x , P y) Giả sử đoạn nối này có độ dài là L f là góc giữa đoạn nối trên với trục y
Phép chiếu phối cảnh (perspective projection)
Phép chiếu phối cảnh đơn giản nhất
Phép chiếu phối cảnh phụ thuộc vào vị trí tương đối của hai đối tượng đó là mắt nhìn và mặt phẳng quan sát
Quan sát hình sau, với mặt phẳng quan sát là yz và mắt nhìn E(E,0,0) được
đặt dọc theo trục x Khoảng cách giữa mắt E và mặt phẳng quan sát được gọi là tầm
Trang 2819
nhìn (eye distance).Để xác định hình chiếu của P(x, y, z), ta nối P với E và tìm giao
điểm P’ của đường thẳng này với mặt phẳng quan sát Lúc này P’ chính là điểm cần tìm
Hình 1.10 Phép chiếu phối cảnh đơn giản Trong phép chiếu phối cảnh các tia chiếu không song song với nhau mà hội
tụ về một điểm duy nhất là mắt
Chúng ta giả sử P không nằm phía sau mắt nhìn, tức là x < E P có thể nằm
sau mặt phẳng quan sát, hay trên mặt phẳng quan sát, hay giữa mắt và mặt phẳng quan sát Ta có, tia từ mắt đến P có dạng :
r(t) = (E,0,0)(1 – t) + (x, y, z)t
Tia này giao với mặt quan sát (mặt phẳng x=0) khi x = 0 nên giá trị t ứng với trường hợp này là :
E x t
y y
1
'
;
E x
z z
1
'
Phép chiếu phối cảnh gần giống phép chiếu trực giao chỉ khác là hai tọa độ y,
z được nhân lên thêm một lượng Cũng tương tự như trên, ta có thể dễ dàng kiểm chứng phép chiếu phối cảnh cũng bảo toàn đường thẳng
Nhận xét rằng phép chiếu song song là một trường hợp đặc biệt của phép chiếu phối cảnh Nếu chúng ta cho tầm nhìn E càng ngày càng lớn tiến dần đến vô
Trang 2920
cực thì các tia chiếu qua mắt sẽ trở nên song song và hệ số
E x
x x
1
'
;
E z
y y
x
height bottom
y
● Thành phần z với 1 z 1 được co lại trong đoạn 0 z w 1
Giá trị z w này sẽ được sử dụng để loại bỏ những bề mặt bị ẩn Những điểm có giá trị z w nhỏ sẽ nằm trước những điểm có giá trị z w lớn hơn
Xây dựng ma trận biến đổi là công việc đơn giản Tuy nhiên sẽ hiệu quả hơn nếu ta thực hiện phép biến đổi một cách trực tiếp:
width left
Trang 3021
1.1.7 Bộ đệm và các phép kiểm tra
Một mục đích quan trọng của hầu hết các chương trình đồ họa là vẽ được các bức tranh ra màn hình Màn hình là một mảng hình vuông của các pixel Mỗi pixel
đó có thể hiển thị được 1 màu nhất định Sau các quá trình quét (bao gồm Texturing
và fog…), dữ liệu chưa trở thành pixel, nó vẫn chỉ là các “mảnh” (Fragments) Mỗi mảnh này chứa dữ liệu chung cho mỗi pixel bên trong nó như là màu sắc là giá trị chiều sâu Các mảnh này sau đó sẽ qua một loạt các phép kiểm tra và các thao tác khác trước khi được vẽ ra màn hình
Nếu mảnh đó qua được các phép kiểm tra (test pass) thì nó sẽ trở thành các pixel Để vẽ các pixel này, ta cần phải biết được màu sắc của chúng là gì, và thông tin về màu sắc của mỗi pixel được lưu trong bộ đệm màu (Color Buffer)
Nơi lưu trữ dữ liệu cho từng pixel xuất hiện trên màn hình được gọi là bộ
đệm (Buffer) Các bộ đệm khác nhau sẽ chứa một loại dữ liệu khác nhau cho pixel
và bộ nhớ cho mỗi pixel có thể sẽ khác nhau giữa các bộ đệm Nhưng trong một bộ đệm thì 2 pixel bất kỳ sẽ được cấp cùng một lượng bộ nhớ giống nhau Một bộ đệm
mà lưu trữ một bít thông tin cho mỗi pixel được gọi là một bitplane Có các bộ đệm
phổ biến như Color Buffer, Depth Buffer, Stencil Buffer, Accumulation Buffer
1.1.7.1 Bộ đệm chiều sâu (Z-Buffer)
Khái niệm: Là bộ đệm lưu trữ giá trị chiều sâu cho từng Pixel Nó được
dùng trong việc loại bỏ các bề mặt ẩn Giả sử 2 điểm sau các phép chiếu được ánh
xạ vào cùng một pixel trên màn hình Như vậy điểm nào có giá trị chiều sâu (z) nhỏ hơn sẽ được viết đè lên điểm có giá trị chiều sâu lớn hơn Chính vì vậy nên ta gọi
bộ đệm này là Z-buffer
Depth test: Với mỗi pixel trên màn hình, bộ đệm chiều sâu lưu khoảng cách
vuông góc từ điểm nhìn đến pixel đó Nên nếu giá trị chiều sâu của một điểm được ánh xạ vào pixel đó nhỏ hơn giá trị được lưu trong bộ đệm chiều sâu thì điểm này được coi là qua Depth test (depth test pass) và giá trị chiều sâu của nó được thay thế cho giá trị lưu trong bộ đệm Nếu giá trị chiều sâu của điểm đó lớn hơn giá trị lưu trong Depth Buffer thì điểm đó “trượt” phép kiểm tra chiều sâu (Depth test Fail)
Trang 3122
1.1.7.2 Bộ đệm khuôn (Stencil Buffer)
Khái niệm: Bộ đệm khuôn dùng để giới hạn một vùng nhất định nào đó trong
khung cảnh Hay nói cách khác nó đánh dấu một vùng nào đó trên màn hình Bộ đệm này được sử dụng để tạo ra bóng hoặc để tạo ra ảnh phản xạ của một vật thể qua gương…
Stencil Test: Phép kiểm tra Stencil chỉ được thực hiện khi có bộ đệm khuôn
(Nếu không có bộ đệm khuôn thì phép kiểm tra Stencil được coi là luôn pass) Phép kiểm tra Stencil sẽ so sánh giá trị lưu trong Stencil Buffer tại một Pixel với một giá trị tham chiếu theo một hàm so sánh cho trước nào đó OpenGL cung cấp các hàm như là GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL, GL_GEQUAL, GL_GREATER hay là GL_NOTEQUAL Giả sử hàm so sánh là GL_LESS, một “mảnh” (Fragments) được coi là qua phép kiểm tra (pass) nếu như giá trị tham chiếu nhỏ hơn giá trị lưu trong Stencil Buffer
Ngoài ra OpenGL còn hỗ trợ một hàm là
glStencilOp(GLenum fail, GLenum zfail, GLenum zpass);
Hàm này xác định dữ liệu trong stencil Buffer sẽ thay đổi thế nào nếu như một “mảnh” pass hay fail phép kiểm tra stencil 3 hàm fail, zfail và zpass có thể là GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR, GL_DECR …Chúng tương ứng với giữ nguyên giá trị hiện tại, thay thế nó với 0, thay thế nó bởi một giá trị tham chiếu, tăng và giảm giá trị lưu trong stencil buffer Hàm fail sẽ được sử dụng nếu như “mảnh” đó fail stencil test Nếu nó pass thì hàm zfail sẽ được dùng nếu Depth test fail và tương tự, zpass được dùng nếu như Depth test pass hoặc nếu không có phép kiểm tra độ sâu nào được thực hiện Mặc định cả 3 tham số này là
GL_KEEP
1.2 Bài toán tạo bóng trong đồ họa ba chiều
1.2.1 Nguồn sáng và phân loại nguồn sáng
1.2.1.1 Khái niệm
Ánh sáng: là một loại bức xạ, nó có thể được hiểu, giải thích theo hai tính
chất vật lý, thứ nhất là tính chất sóng điện từ trường (quang học sóng), thứ hai là
Trang 3223
tính chất hạt (quang học hạt) Bóng: trên thực tế bóng và ánh sáng là hai vấn đề liên
quan mật thiết với nhau “có ánh sáng thì mới có bóng, và bóng là sự thể hiện của
ánh sáng” Ánh sáng truyền đi trong không gian khi đến một bề mặt nó tương tác
với bề mặt, sự tương tác này được thể hiện thông qua hai hiệu ứng chính là “bóng
bề mặt”, và “bóng đổ” có thể gọi chung chúng là bóng Hiệu ứng “bóng bề mặt”
xảy ra khi ánh sáng đến bề mặt, và phản xạ lại môi trường một lượng ánh sáng nhất định theo các hướng khác nhau, trong đó có một phần đến được mắt, tác động lên
hệ thần kinh thị giác, vì vậy chúng ta quan sát được đối tượng Theo định luật truyền thẳng ánh sáng khi đến một bề mặt không trong suốt thì bị cản lại, và không thể tiếp tục được truyền đi theo hướng đến, vì vậy mọi điểm phía sau sẽ không có
sự chiếu sáng từ nguồn sáng hiện tượng như vậy được gọi là hiệu ứng “bóng đổ”
Trong quang học sóng, ánh sáng là một loại sóng điện từ trường do đó nó cũng tuân theo các định luật của sóng như định luật truyền thẳng, định luật phản xạ, khúc xạ, Trong trường hợp này năng lượng của ánh sáng được thể hiện hiện bằng các dao động điện từ trường Hướng dao động điện trường và từ trường vuông góc với nhau tạo ra cách ánh sáng truyền đi trong không gian Loại ánh sáng có thành phần sóng điện trường (từ trường) giao động trên một mặt phẳng cố định
được gọi là ánh sáng “phân cực tuyến tính”, hoặc đơn giản là “phân cực” Dựa vào
đặc tính phân cực của ánh sáng khi đi qua một số loại vật liệu nhất định mà người ta
đã xây dựng lên các hệ thống hiển thị hình ảnh ba chiều, ví dụ như hệ thống máy chiếu ba chiều, ti vi ba chiều, kính ba chiều Sự xuất hiện của các thiết bị này là
một trong những động lực quan trọng nhất tạo nên sự phát triển của lĩnh vực đồ họa hiện nay
Trong quang học hạt, năng lượng ánh sáng được thể hiện dưới hình thức của
các hạt photon dịch chuyển trong không gian với vận tốc ánh sáng Mỗi photon
mang một mức năng lượng nhất định, mức năng lượng này phụ thuộc vào tần số hay độ dài bước sóng của ánh sáng
Khả năng quan sát của con người với mỗi loại ánh sáng là khác nhau, bằng thực nghiệm người ta đã chứng minh con người có khả năng nhìn được ánh sáng
Trang 3324
với bước sóng nằm trong khoảng (380nm - 780nm), ánh sáng có bước sóng lớn hơn
được gọi là hồng ngoại, và nhỏ hơn là tử ngoại đây là những loại ánh sáng mà con
người không có khả năng quan sát được Khả năng nhìn của con người với mỗi loại
ánh sáng trong khoảng nhìn được là không giống nhau Hình 1.11 là đồ thị thể hiện khả năng quan sát của con người với từng mức sóng cụ thể của ánh sáng
Hình 1.11 Khả năng quan sát của con người tương ứng với từng mức sóng Trong đồ họa ba chiều tính chất sóng - hạt của ánh sáng được trừu tượng hóa thông qua các quy luật, việc xây dựng các quy luật này phần lớn dựa vào các quy luật hình học, và các quy luật quang học Các phần nội dung dưới đây sẽ trình bày một số quy luật quan trọng, nhưng trước tiên để hiểu được các quy luật này chúng
ta hãy xem xét một số đơn vị sử dụng trong việc đo lường ánh sáng [1], [2], [3]
Theo mô hình ánh sáng của OpenGl thì ánh sáng gồm có 4 thành phần chính: Emissive Light, Ambient Light, Diffuse Light, Specular Light Các thành phần này
có thể được tính toán độc lập với nhau, và cuối cùng được kết hợp lại với nhau
Trang 3425
Ambient Light là ánh sáng bị phân rã bởi môi trường và không thể xác định hướng của chúng Nếu trong một khung cảnh ta không xác định nguồn sáng thì kết quả đưa ra cũng giống như khi chúng ta sử dụng Ambient Light
Hình 1.12 Chiếc ấm được chiếu bằng Ambient Light
Diffuse Light (ánh sáng khuếch tán) là ánh sáng chiếu theo một hướng nhất, tuy nhiên khi nó gặp một bề mặt nó sẽ bị phân rã bằng nhau về mọi hướng, Vì thế
nó sáng bằng nhau cho dù có đặt mắt nhìn ở đâu chăng nữa Mọi nguồn sáng đến từ một điểm hay từ một hướng nhất định đều có thành phần Diffuse Light
Hình 1.13 Ấm chè được chiều bằng Diffuse Light Specular Light là ánh sáng phản xạ Khi gặp một bề mặt nó sẽ phản xạ lại đúng theo quy luật phản xạ Nó có thể được nhìn thấy trên những bề mặt cong
Trang 35Phân loại theo tiêu trí khả năng phát sáng ta có thể chia làm hai loại như sau: Nguồn phát sáng: là các nguồn sáng tự phát ra tia sáng ví dụ như mặt trời,
bóng đèn, ngọn nến vv Trong đồ họa ba chiều chúng ta chỉ xét đến loại
nguồn sáng này mà thôi
Nguồn sáng phản chiếu: là nguồn sáng mà ánh sáng xuất phát từ đó là ánh sáng phản xạ của các nguồn phát khác Ví dụ gương hoặc mặt nước, các vật kim loại có độ bóng cao vvv… Trong nguồn sáng loại này cũng có thể phân thành các dạng khác nhau như nguồn sáng phản xạ lập tức, hay nguồn huỳnh quang, nguồn lân quang vv…
Khi phân loại nguồn sáng dựa trên tiêu trí kích thước, không gian, và phạm chiếu sáng, chúng ta có thể phân nguồn sáng thành các loại như sau (đây chính là
cách phân loại nguồn sáng của hầu hết các hệ thống render):
Nguồn sáng xung quanh
Trang 3627
Ánh sáng xung quanh là mức sáng trung bình, tồn tại trong một vùng không gian Một không gian lý tưởng là không gian mà tại đó mọi vật đều được cung cấp một lượng ánh sáng lên bề mặt là như nhau, từ mọi phía ở mọi nơi Thông thường ánh sáng xung quanh được xác định với một mức cụ thể gọi là mức sáng xung quanh của vùng không gian mà vật thể đó cư ngụ, sau đó ta cộng với cường độ sáng
có được từ các nguồn sáng khác để có được cường độ sáng cuối cùng lên một điểm hay một mặt của vật thể
Hình 1.15 Sự phản xạ của ánh sáng Tương đương với cách phân loại sau:
Nguồn sáng định hướng
Nguồn sáng định hướng giống như những gì mà mặt trời cung cấp cho chúng
ta Nó bao gồm một tập các tia sáng song song, bất kể cường độ của chúng có giống nhau hay không Có hai loại kết quả của ánh sáng định hướng khi chúng chiếu đến
bề mặt là: khuyếch tán và phản chiếu Nếu bề mặt phản xạ toàn bộ (giống như mặt gương) thì các tia phản xạ sẽ có hướng ngược với hướng của góc tới (Hình 1.15) Trong trường hợp ngược lại, nếu bề mặt là không phản xạ toàn phần (có độ nhám,
xù xì) thì một phần các tia sáng sẽ bị toả đi các hướng khác hay bị hấp thụ, phần còn lại thì phản xạ lại, và lượng ánh sáng phản xạ lại này tỷ lệ với góc tới Ở đây chúng ta sẽ quan tâm đến hiện tượng phản xạ không toàn phần vì đây là hiện tượng phổ biến (vì chỉ có những đối tượng được cấu tạo từ những mặt như mặt gương mới xảy ra hiện tượng phản xạ toàn phần), và đồng thời tìm cách tính cường độ của ánh sáng phản xạ trên bề mặt
Ánh sáng tới Ánh sáng phản
Ánh sáng phản xạÁnh sáng tới
Vector pháp tuyến của mặt
Trang 3728
(a) (b) Hình 1.16 Sự phản xạ không toàn phần của ánh sáng Trong hình 1.16 thể hiện sự phản xạ ánh sáng không toàn phần độ đậm nét của các tia ánh sáng tới thể hiện cường độ sáng cao, độ mảnh của các tia phản xạ thể hiện cường độ sáng thấp Nói chung, khi bề mặt là không phản xạ toàn phần thì cường độ của ánh sáng phản xạ (hay tạm gọi là tia phản xạ) luôn bé hơn so với cường độ của ánh sáng tới (hay gọi là tia tới), và cường độ của tia phản xạ còn tỷ lệ với góc giữa tia tới với vector pháp tuyến của bề mặt, nếu góc này càng nhỏ thì cường độ phản xạ càng cao, nếu góc này lớn thì cường độ phản xạ rất thấp Ở đây ta chỉ quan tâm đến thành phần ánh sáng khuyếch tán và tạm bỏ qua hiện tượng phản
xạ toàn phần để cho tiện trong việc tính toán ta tạm đổi hướng của tia tới thực sự, vậy bây giờ hướng của tia tới được xem là hướng ngược lại của tia sáng tới
Nếu gọi θ là góc giữa tia tới với vector pháp tuyến của bề mặt thì
Cos(θ) = tích vô hướng của a và n = a.x*n.x+a.y*n.y+a.z*n.z
Vì Cos(θ) có giá trị từ +1 đến -1 nên ta có thể suy ra công thức tính cường độ của ánh sáng phản xạ là:
Cường độ ánh sáng phản xạ = Cường độ của ánh sáng định hướng * [(Cos(θ)+1)/2]
Trong đó [(Cos(θ)+1)/2] có giá trị trong khoảng từ 0 đến 1 Có thể tính được cường độ của ánh sáng phản xạ trên bề mặt khi biết được cường độ của ánh sáng định hướng cũng như các vector pháp tuyến của mặt và
Ánh sáng phản Ánh sáng tới
Vector pháp tuyến của mặt
Ánh sáng phản xạ Ánh sáng tới
Vector pháp tuyến của mặt