1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tìm hiểu kỹ thuật tạo bóng cứng shadow volume

40 87 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 40
Dung lượng 2,28 MB

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƢỜNG ĐẠI HỌC DÂN LẬP HẢI PHÒNG -o0o - ISO 9001:2008 TÌM HIỂU KỸ THUẬT TẠO BĨNG CỨNG SHADOW VOLUME ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công nghệ Thông tin Sinh viên thực hiện: Giáo viên hƣớng dẫn: Mã số sinh viên: Nguyễn Tiến Dũng PGS.TS Đỗ Năng Tồn 1351010036 HẢI PHỊNG – 2013 Đồ án tốt nghiệp Trƣờng ĐH Dân Lập Hải Phòng LỜI CẢM ƠN Em xin gửi lời cảm ơn tới thầy cô khoa Công nghệ thông tin trường Đại học Dân Lập Hải Phòng, người ân cần dạy dỗ cho chúng em kiến thức bổ ích quý giá suốt năm học qua, người trang bị cho chúng em hành trang quý giá để bước vào đời Em xin gửi lời cảm ơn sâu sắc tới thầy Đỗ Năng Toàn, người tận tình bảo hướng dẫn chúng em thực tốt đồ án tốt nghiệp Chúng em xin gửi lời cảm ơn tới gia đình bạn bè, hậu phương vững cho tiền tuyến chúng em suốt năm học gian khổ, gần cho chúng em nguồn động viên to lớn tinh thần vật chất để chúng em hồn thành tốt đồ án tốt nghiệp Nguyễn Tiến Dũng- CT1301 Đồ án tốt nghiệp Trƣờng ĐH Dân Lập Hải Phòng Mục Lục LỜI NĨI ĐẦU CHƢƠNG 1: KHÁI QUÁT VỀ ĐỒ HỌA BA CHIỀU VÀ BÀI TỐN TẠO BĨNG 1.1 Khái qt đồ họa chiều 1.1.1 Hiển thị 3D(3D Viewing) 1.1.2 Bộ đệm phép kiểm tra 11 1.2 Bài tốn tạo bóng 12 1.2.1 Bóng dạng nguồn sáng 12 1.2.2 Một số cách tiếp cận tạo bóng 17 CHƢƠNG 2: KỸ THUẬT TẠO BÓNG CỨNG BẰNG PHƢƠNG PHÁP SHADOW VOLUME 19 2.1 19 20 2.3 24 2.4 Tạo bóng khối thuật tốn Z-Pass 27 2.5 Tạo bóng thuật toán Z-Fail 30 2.5.1 Tất mặt trƣớc bóng từ vị trí điểm nhìn 31 2.5.2 Tất mặt sau bóng từ vị trí điểm nhìn 32 2.5.3 Vẽ bóng đậy nắp đầu khối 33 2.6 35 CHƢƠNG III: CHƢƠNG TRÌNH THỰC NGHIỆM 36 3.1 Bài toán 36 3.2 Phân tích, lựa chọn công cụ 36 3.2.1 Giới thiệu ngơn ngữ lập trình 36 3.2.2 Lựa chọn công cụ 37 3.3 Kết chƣơng trình 37 KẾT LUẬN 39 TÀI LIỆU THAM KHẢO: 39 Nguyễn Tiến Dũng- CT1301 Đồ án tốt nghiệp Trƣờng ĐH Dân Lập Hải Phòng LỜI NĨI ĐẦU Đồ họa máy tính lĩnh vực phát triển nhanh tin học Nó đƣợc áp dụng rộng rãi nhiều lĩnh vực khác thuộc khoa học, kỹ nghệ, y khoa, kiến trúc giải trí… Năm 1966, Sutherland Học viện Công nghệ Massachusetts ngƣời đặt bóng cho đồ họa 3D việc phát minh thiết bị hiển thị trùm đầu (head-amounted display) đƣợc điều khiển máy tính Nó cho phép ngƣời nhìn thấy đƣợc hình ảnh dƣới dạng lập thể 3D Từ đến đồ họa 3D trở thành lĩnh vực phát triển rực rỡ đồ họa máy tính Nó đƣợc ứng dụng rộng rãi hầu hết tất lĩnh vực nhƣ Điện ảnh, Hoạt hình, kiến trúc ứng dụng xây dựng mô hình thực ảo… Và khơng thể khơng nhắc đến vai trò tối quan trọng đồ họa 3D việc tạo game sử dụng đồ họa nhƣ Doom, Halflife….Có thể nói đồ họa 3D tạo nên công nghiệp game phát triển mạnh mẽ Mục đích đồ họa 3D tạo mô tả đối tƣợng, mơ hình giới thật máy tính cho giống với thật tốt Việc nghiên cứu phƣơng pháp kỹ thuật khác đồ họa 3D hƣớng đến mục tiêu cho nhân vật, đối tƣợng, mơ hình đƣợc tạo máy tính giống thật Và phƣơng pháp tạo bóng cho đối tƣợng Xuất phát từ vấn đề đồ án em xây dựng gồm chƣơng: CHƢƠNG 1: KHÁI QUÁT VỀ ĐỒ HỌA BA CHIỀU VÀ BÀI TỐN TẠO BĨNG biểu diễn điểm phép biến đổi 3D, CHƢƠNG 2: KỸ THUẬT TẠO BÓNG CỨNG BẰNG PHƢƠNG PHÁP SHADOW VOLUME Shadow Volume dạng nguồn sáng CHƢƠNG 3: CHƢƠNG TRÌNH THỰC NGHIỆM Nguyễn Tiến Dũng- CT1301 Đồ án tốt nghiệp Trƣờng ĐH Dân Lập Hải Phòng CHƢƠNG 1: KHÁI QUÁT VỀ ĐỒ HỌA BA CHIỀU VÀ BÀI TỐN TẠO BĨNG 1.1 Khái qt đồ họa chiều 1.1.1 Hiển thị 3D(3D Viewing) 1.1.1.1 Tổng quan Các đối tƣợng giới thực phần lớn đối tƣợng chiều thiết bị hiển thị chiều Do vậy, muốn có hình ảnh chiều ta cần phải giả lập Chiến lƣợc chuyển đổi bƣớc Hình ảnh đƣợc hình thành từ từ, ngày chi tiết Các đối tƣợng mơ hình 3D đƣợc xác định với tọa độ giới Cùng với tọa độ đối tƣợng, ngƣời dùng phải xác định vị trí hƣớng camera ảo không gian 3D xác định vùng nhìn (là vùng khơng gian đƣợc hiển thị hình) Việc chuyển từ tọa độ giới sang tọa độ hình đƣợc thực theo bƣớc : Bƣớc thực phép biến đổi để đƣa camera ảo trở vị trí hƣớng tiêu chuẩn Khi điểm nhìn (eyepoint) đƣợc đặt gốc tọa độ, hƣớng nhìn trùng với hƣớng âm trục Z Trục X phía phải trục Y lên phía hình Hệ tọa độ đƣợc gọi Hệ tọa độ Mắt (Eye Coordinate System) Phép biến đổi từ tọa độ giới sang tọa độ mắt phép biến đổi affine, đƣợc gọi phép biến đổi hiển thị (Viewing Transformation) Cả tọa độ giới tọa độ mắt đƣợc biểu diễn tọa độ đồng (Homogeneous Coordinates) với w=1 Bƣớc thứ Tọa độ mắt đƣợc chuyển qua tọa độ thiết bị chuẩn hóa (Nomalized Device Coordinates) vùng khơng gian mà ta muốn nhìn đƣợc đặt khối lập phƣơng tiêu chuẩn: Các điểm gần điểm nhìn (điểm đặt camera) có thành phần z nhỏ Bƣớc cuối cùng, phép biến đổi cổng nhìn (Viewport Transformation) kết hợp phép co giãn tuyến tính phép tịnh tiến Sẽ chuyển thành phần x Nguyễn Tiến Dũng- CT1301 Đồ án tốt nghiệp y tọa độ thiết bị chuẩn hóa Trƣờng ĐH Dân Lập Hải Phòng x 1, hình Thành phần z ( z 1) đƣợc chuyển sang y sang tọa độ Pixel đoạn [0,1] đƣợc sử dụng nhƣ giá trị chiều sâu (Depth-Value) thuật toán Z-Buffer (bộ đệm Z) đƣợc sử dụng cho việc xác định mặt đƣợc hiển thị Bƣớc thứ bao gồm bƣớc : - Một phép chiếu chuyển từ vùng nhìn sang khối lập phƣơng tiêu chuẩn với tọa độ đồng nhất: x 1, y 1, z Trong trƣờng hợp sử dụng phép chiếu trực giao, vùng nhìn có dạng ống song song 3D với mặt song song với mặt hệ tọa độ mắt Trong trƣờng hợp sử dụng phép chiếu đối xứng, vùng nhìn hình tháp cụt với đầu mút gốc tọa độ hệ tọa độ mắt Hệ tọa độ đồng (4 thành phần) thu đƣợc sau phép chiếu đƣợc gọi hệ tọa độ cắt (Clipping Coordinate System) Phép chiếu phép biến đổi affine trƣờng hợp phép chiếu phép chiếu trực giao Nếu phép chiếu phép chiếu phối cảnh phép biến đổi affine (Vì w nhận giá trị khác 1) Bƣớc tiếp theo, vùng không gian hiển thị mà khơng nằm khối tiêu chuẩn (Khối đƣợc gọi khối nhìn tiêu chuẩn) bị cắt Các đa giác, đƣờng thẳng đƣợc chứa có phần đƣợc thay đổi để phần nằm khối nhìn tiêu chuẩn đƣợc giữ lại Phần lại không cần quan tâm nhiều Sau cắt gọt, tọa độ đồng đƣợc chuyển sang tọa độ thiết bị cách chia x,y,z cho w Nếu w nhận giá trị qua phép chiếu, phép chia cho động phối cảnh mong muốn hình Vì lý đó., phép chia đƣợc gọi phép chia phối cảnh (Perspective Division) Nguyễn Tiến Dũng- CT1301 Đồ án tốt nghiệp Trƣờng ĐH Dân Lập Hải Phòng Hình 1.1: Tổng quan hiển thị 3D phép chiếu 1.1.1.2 Phép biến đổi hiển thị (Viewing Transformation) Phép biến đổi hiển thị đƣa camera ảo đƣợc cho tùy ý camera với điểm nhìn trùng với gốc tọa độ hƣớng nhìn dọc theo chiều âm trục Z (xem hình 2.1) Trục Y sau phép biến đổi tƣơng ứng lên phía hình Trục X phía phải Một cách thuận tiện để xác định vị trí camera ảo cho sãn vị trí điểm nhìn E , Một điểm khung nhìn R (điểm tham chiếu) hƣớng V lên phía hình Phép biển đổi hiển thị gồm bƣớc: Nguyễn Tiến Dũng- CT1301 Đồ án tốt nghiệp Trƣờng ĐH Dân Lập Hải Phòng ● Một phép tịnh tiến đƣa điểm nhìn E gốc tọa độ Ma trận biến đổi tƣơng ứng M t ( E) Kết nhƣ sau: ● Một phép quay chuyển hƣớng nhìn ngƣợc trục Z, quay vectơ V mặt phẳng YZ Vector V đƣợc quay trùng với trục Y V vuông góc với hƣớng nhìn Trƣớc hết ta xây dựng tập véc tơ chuẩn tắc phù hợp tọa độ giới n E R E R Ngƣợc với hƣớng nhìnZ u V n Chỉ phía phải, vng góc với n ( Oz ) X V n v n u Chỉ lên giống V , nhƣng vuống góc với n u Y Nhƣ ma trận phép quay là: M r (u,v, n) Và ma trận phép biến đổi là: Trong u, v v đƣợc tính từ E , R V Nguyễn Tiến Dũng- CT1301 Đồ án tốt nghiệp Trƣờng ĐH Dân Lập Hải Phòng 1.1.1.3 Phép chiếu trực giao (Orthographic Projection) Trong trƣờng hợp phép chiếu trực giao, vùng không gian hiển thị ống song song hệ tọa độ mắt Các mặt ống song song song song với mặt hệ tọa độ mắt Kích thƣớc vị trí vùng không gian hiển thị đƣợc xác định tọa độ mắt xleft, xright, ybottom, ytop, zfront zback (xleft, ybottom) (xright, ytop) xác định cửa sổ mặt phẳng chiếu (hoặc mặt song song với mặt XY) mà vùng không gian hiển thị đƣợc hiển thị Cửa sổ phải đƣợc đƣa dạng hình vng [-1,+1] zfront zback định nghĩa mặt phẳng cắt trƣớc cắt sau Tọa độ tất điểm khơng gian (hoặc điểm ta muốn nhìn) phải thỏa mãn zback z zfront Khoảng giá trị z phải đƣợc đƣa giá trị chiều sâu (depth value) nằm đoạn [-1,+1] Các điểm gần mắt có giá trị chiều sâu nhỏ Hình 1.2 : Vùng khơng gian hiển thị phép chiếu trực giao Phép chiếu trực giao thu đƣợc cách thực phép biến đổi sau theo thứ tự: ● Phép tịnh tiến M t ( M ) đƣa tâm vùng không gian hiển thị gốc tọa độ hệ tọa độ mắt ● Một phép co giãn để đƣa kích thƣớc vùng hiển thị đơn vị chiều Nguyễn Tiến Dũng- CT1301 Đồ án tốt nghiệp Trƣờng ĐH Dân Lập Hải Phòng ● Một phép đối xứng qua mặt XY để điểm nằm gần nhận giá trị z nhỏ Phép co giãn phép đối xứng thu đƣợc phép biển đổi đơn: M s (S) với: Nhƣ ma trận phép chiếu trực giao là: Thành phần z khơng thay đổi, phép chiếu trực giao phép biến đổi affine Phép chiếu đƣợc sử dụng ứng dụng cần đến quan hệ hình học (các tỉ số khoảng cách) nhƣ CAD 1.1.1.4 Phép chiếu phối cảnh (Perspective Projection) Phép chiếu phối cảnh phù hợp gần với quan sát ngƣời (bằng mắt) giới 3D Tất điểm đƣờng thẳng qua điểm nhìn đƣợc ánh xạ lên điểm hình 2D Điểm ảnh đƣợc xác định tọa độ thiết bị chuẩn hóa x y Nếu điểm đƣợc ánh xạ vào điểm hình, ta cần phải xác định điểm đƣợc hiển thị thuật toán Z-buffer, nghĩa so sánh chiều sâu chúng Vì lý cần định nghĩa thành phần tọa độ khác thiết bị chuẩn hóa z cho hàm tăng đơn điệu khoảng cách từ điểm đến mặt phẳng mắt XY Khoảng cách từ điểm không gian đến mặt phẳng XY không với khoảng cách từ điểm đến điểm nhìn (đƣợc đặt gốc tọa độ), nhƣng đƣợc tính tốn đơn giản đủ để xác định đƣợc mặt đƣợc hiển thị Nhƣ vậy, phép chiếu trực giao đƣa điểm (với tọa độ đồng nhất) hệ tọa độ mắt (x,y,z,1) điểm (tọa độ đồng nhất) hệ tọa độ cắt ’ ’ ’ ’ ” ” ” (x ,y ,z ,w ) Sau tọa độ thiết bị chuẩn hóa (affine) (x ,y ,z ) thu đƣợc ’ ’ ’ ’ cách chia x ,y ,z cho w (Phép chia phối cảnh): Nguyễn Tiến Dũng- CT1301 Đồ án tốt nghiệp Trƣờng ĐH Dân Lập Hải Phòng v4.y = (v2.y - L.y) * He_so_chieu; v4.z = (v2.z - L.z) * He_so_chieu; 2.5 Từ điểm ta vẽ đƣợc tứ giác bao ngồi bóng khối Vấn đề lại cần phải giải với bóng khối phải “đậy nắp” (Capping) đầu khối lại để trở thành khối kín Lúc ta thực phép kiểm tra cách xác Để “nấp” phía trƣớc đơn giản ta dùng mặt trƣớc vật thể vị trí ánh sáng Nấp mặt sau ta cần chiếu mặt sau vật thể với ánh sáng vơ cực Phần khơng cần thiết ta chiếu gần nhƣ vơ cực Nên điểm khơng cần xét đến nhiều 2.6 Nguyễn Tiến Dũng- CT1301 25 Đồ án tốt nghiệp Trƣờng ĐH Dân Lập Hải Phòng Code để xác định tứ giác bao quanh bóng khối isFacingLight=new bool[numTriangles]; if(!isFacingLight) { errorLog.OutputError("Unable to allocate memory for %d booleans", numTriangles); return false; } //Create space for connectivity data neighbourIndices=new GLint[numTriangles*3]; if(!neighbourIndices) { errorLog.OutputError("Unable to allocate memory for %d neighbour indices", numTriangles*3); return false; } //Create space for "is silhouette edge" booleans isSilhouetteEdge=new bool[numTriangles*3]; if(!isSilhouetteEdge) { errorLog.OutputError("Unable to allocate memory for %d booleans", numTriangles*3); return false; } //Calculate the neighbours SetConnectivity(); return true; } Nguyễn Tiến Dũng- CT1301 26 Đồ án tốt nghiệp Trƣờng ĐH Dân Lập Hải Phòng 2.4 Tạo bóng khối thuật tốn Z-Pass Để xác định xem đoạn cắt mặt trƣớc, mặt sau ta dùng đếm cho điểm cần kiểm tra, mà tăng lên đơn vị xuyên qua mặt trƣớc giảm đơn vị xuyên qua mặt sau bóng khối Khi đếm cho giá trị điểm khơng nằm phần bóng, Còn lớn có nghĩa điểm nằm vùng bóng khơng đƣợc đƣợc vẽ Và Stencil Buffer thực điều Stencil Buffer cung cấp cho pixel hình “bộ đếm” tăng giảm pixel đƣợc ghi vào Frame Buffer Sau hồn tồn kiểm tra đếm để xác định xem điểm đƣợc ghi hình hay khơng Khi ta tạo đƣợc lƣới đa giác bao ngồi bóng khối Chúng ta phải thực vẽ bóng vật thể ra, hay nói xác vẽ vật thể với bóng Để làm đƣợc việc ta phải xác định đƣợc pixel có nằm vùng bóng khối hay khơng Thuật tốn xác định pixel có nằm vùng bóng khối hay khơng đơn giản Tƣ tƣởng là, nối điểm cần kiểm tra với điểm đặt camera (mắt nhìn) Nếu số mặt trƣớc số mặt sau bóng khối mà cắt điểm khơng nằm vùng bóng khối Nếu cắt số mặt trƣớc bóng khối nhiều số mặt sau mà cắt có nghĩa điểm nằm vùng bóng khối Thuật tốn đƣợc mơ tả mã giả nhƣ sau: Procedure IN_SHADOW_TEST // Z-pass For {tất vật thể cần đổ bóng} - Xây dựng danh sách cạnh viền - Tính tốn tứ giác bao quanh bóng khối dựa cạnh viền từ vị trí nguồn sáng End for For {Tất mặt trƣớc bóng khối nhìn từ vị trí điểm nhìn} if Depth test passes then - Tăng giá trị Stencil Buffer End if End for Nguyễn Tiến Dũng- CT1301 27 Đồ án tốt nghiệp Trƣờng ĐH Dân Lập Hải Phòng For {Tất mặt sau bóng khối nhìn từ vị trí điểm nhìn} if Depth test passes then - Giảm giá trị Stencil Buffer End if End for 2.7 2.8 Nguyễn Tiến Dũng- CT1301 28 Đồ án tốt nghiệp Trƣờng ĐH Dân Lập Hải Phòng 2.9 2.10 : Khơng Các bƣớc thực nhƣ sau: Xóa hết Z-buffer Stencil-Buffer, Chắc chắn Chế độ ghi vào Zbuffer chế độ Stencil test đƣợc bật Tạo ảnh toàn khung cảnh (bao gồm vật thể mặt hứng bóng) với Ambient Light Z-buffer đƣợc cập nhật - Tắt chế độ ghi vào Z-buffer Vẽ mặt trƣớc bóng khối, Nếu chúng thực đƣợc vẽ (Có nghĩa Depth Pass) tăng giá trị Stencil Buffer Nguyễn Tiến Dũng- CT1301 29 Đồ án tốt nghiệp Trƣờng ĐH Dân Lập Hải Phòng Vẽ mặt sau bóng khối, Nếu chúng thực đƣợc vẽ ra.(Có nghĩa Depth Pass) giảm giá trị Stencil Buffer Bật chế độ Stencil test (chỉ điểm có giá trị Stencil = đƣợc vẽ hình), Xóa Z-buffer, bật chế độ ghi vào Z-buffer, bật nguồn sáng - Vẽ tồn khung cảnh điểm có giá trị stencil Buffer 2.5 Tạo bóng thuật tốn Z-Fail Thuật tốn Z-Pass có nhƣợc điểm lớn chƣa xử lý đƣợc trƣờng hợp điểm nhìn (viewpoint) nằm vùng bóng khối Có giải pháp để xử lý trƣờng hợp này: Trừ giá trị Stencil Buffer đơn vị cho phần bóng khối mà điểm nhìn nằm (trong trƣờng hợp có nhiều vật thể) Tuy nhiên làm nhƣ chi phí tính tốn đắt Tạo mặt phẳng nằm trƣớc gần điểm nhìn cho phần bóng khối mà điểm nhìn nằm Cách vậy, phức tạp chi phí tính tốn đắt Cách thứ sử dụng thuật tốn Z-Fail Thay tính tốn giá trị Stencil việc tăng mặt trƣớc bóng khối giảm giá trị mặt sau ZBuffer Pass, tồn q trình đƣợc thay đổi để đếm từ vơ cực thay đếm từ điểm nhìn Vì thuật tốn gọi Z-Fails Thuật toán Z-fail đƣợc thể đoạn mã giả sau: Procedure IN_SHADOW_TEST // Z-fail For {tất vật thể cần đổ bóng} - Xây dựng danh sách cạnh viền - Tính tốn tứ giác bao quanh bóng khối dựa cạnh viền từ vị trí nguồn sáng End for For {Tất mặt trƣớc bóng khối nhìn từ vị trí điểm nhìn} if Depth test fails then - Giảm giá trị Stencil Buffer End if Nguyễn Tiến Dũng- CT1301 30 Đồ án tốt nghiệp Trƣờng ĐH Dân Lập Hải Phòng End for For {Tất mặt sau bóng khối nhìn từ vị trí điểm nhìn} if Depth test fails then - Tăng giá trị Stencil Buffer End if End for 2.5.1 Tất mặt trƣớc bóng từ vị trí điểm nhìn Void SHADOW_MODEL::SetConnectivity() { //set the neighbour indices to be -1 for(unsigned int i=0; i

Ngày đăng: 15/03/2019, 09:58

w