Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 40 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
40
Dung lượng
2,26 MB
Nội dung
Đồ án tốt nghiệp trang1 LỜI NÓI ĐẦU Đồ họa máy tính lãnh vực phát triển nhanh tin học Nó á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) điều khiển máy tính Nó cho phép người nhìn thấy hình ảnh 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ó ứng dụng rộng rãi hầu hết tất lĩnh vực Đ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 nhắc đến vai trò tối quan trọng đồ họa 3D việc tạo game sử dụng đồ họa Doom, Halflife… Việc sử dụng đồ họa 3D game làm cho người chơi thích thú có cảm giác sống giới thực 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 tạo máy tính giống thật Và phương pháp tạo bóng cho đối tượng Đồ án tốt nghiệp trang2 Hình 1: Bóng tạo kịch: hình-shot từ id phần mềm sáng tạo Doom Một ví dụ cách sử dụng stenciled bóng khối tin Xuất phát từ vấn đề đồ án em xây dựng gồm chƣơng: CHƢƠNG 1:CÁC KIẾN THỨC CƠ BẢN ĐỒ HỌA 3D VÀ TẠO BÓNG CHƢƠNG 2:CÁC KỸ THUẬT TẠO BĨNG CỨNG PHỔ BIẾN CHƢƠNG 3:CHƢƠNG TRÌNH THỰC NGHIỆM Đồ án tốt nghiệp trang3 CHƢƠNG 1:CÁC KIẾN THỨC CƠ BẢN CỦA ĐỒ HỌA 3D VÀ TẠO BÓNG CÁC KIẾN THỨC CƠ BẢN CỦA ĐỒ HỌA 3D 1.1 ÁNH SÁNG (LIGHTING) Ánh sáng đồ họa 3D đóng vai trị quan trọng Và đặc biệt thành phần khơng thể thiếu để tạo bóng Có nguồn sáng chiếu theo hướng đinh (giống ánh sáng mặt trời), có nguồn sáng chiếu tồn khung cảnh….Trong khung cảnh có nhiều nguồn sáng Các nguồn sáng tắt bật giống ta tắt đèn công tắc Theo mơ hình ánh sáng OpenGl ánh sáng gồm có thành phần chính: Emissive Light, Ambient Light, Diffuse Light, Specular Light Các thành phần tính tốn độc lập với nhau, cuối kết hợp lại với Ambient Light ánh sáng bị phân rã môi trường xác định hướng chúng Nếu khung cảnh ta khơng xác định nguồn sáng kết đưa giống sử dụng Ambient Light Hình 4: Chiếc ấm chiếu Ambient Light Diffuse Light (ánh sáng khuếch tán) ánh sáng chiếu theo hướng nhất, nhiên gặp bề mặt bị phân rã hướng, Vì sáng cho dù có đặt mắt nhìn đâu Mọi nguồn sáng đến từ điểm hay từ hướng định có thành phần Diffuse Light Đồ án tốt nghiệp trang4 Hình 5: Ấm chè chiều Diffuse Light Specular Light ánh sáng phản xạ Khi gặp bề mặt phản xạ lại theo quy luật phản xạ Nó nhìn thấy bề mặt cong Hình Ấm chè chiếu Specular Light 1.2 HIỂN THỊ 3D (3D VIEWING) 1.2.1 Biểu diễn điểm phép biến đổi Sự chuyển đổi từ tọa độ giới sang tọa độ thiết bị chuỗi phép biến đổi affine phép chiếu không gian Decarts chiều Các phép biến đổi affine phép chiếu khơng gian Decarts chiều biểu diễn tốt ma trận 4x4 tương ứng với tọa độ đồng (Homogeneous coordinates) (x,y,z,w) Điểm 3D với tọa độ đồng (x,y,z,w) có tọa độ affine (x/w,y/w,z/w) Mối quan hệ tọa độ affine tọa độ đồng quan hệ 11 Cách đơn giản để chuyển từ tọa độ affine (x,y,z) điểm sang tọa độ Đồ án tốt nghiệp trang5 đồng đặt w=1: (x,y,z,1) Chúng ta thừa nhận tất tọa độ giới biểu diễn cách Ta biểu diễn phép biến đổi affine (như co giãn (scaling transformations), phép quay (rotations), phép tịnh tiến (translations)) ma trận mà không làm thay đổi thành phần w (w=1) ● Tịnh tiến véc tơ T (Tx , Ty , Tz ) : ● Phép co giãn theo nhân tố S (S x , S y , S z ) ● Phép quay quanh gốc tọa độ mà theo tập véc tơ chuẩn tắc { u, v, n }, trực giao đôi một, chuyển { X , Y , Z } 1.2.2 Tổng quan Các đối tượng mơ hình 3D 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 hiển thị hình) Việc chuyển từ tọa độ giới sang tọa độ hình thực theo bước (hình 2.1): 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) đặt gốc tọa độ, Đồ án tốt nghiệp trang6 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 độ 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, gọi phép biến đổi hiển thị (Viewing Transformation) Cả tọa độ giới tọa độ mắt biểu diễn tọa độ đồng (Homogeneous Coordinates) với w=1 Bước thứ Tọa độ mắt 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 đặ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 gồm bước 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 y tọa độ thiết bị chuẩn hóa x 1, y sang tọa độ Pixel hình Thành phần z ( z ) chuyển sang đoạn [0,1] sử dụng giá trị chiều sâu (Depth-Value) thuật toán Z-Buffer (bộ đệm Z) sử dụng cho việc xác định mặt hiển thị Bước thứ bao gồm bước o 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 sau phép chiếu 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 Đồ án tốt nghiệp trang7 trực giao Nếu phép chiếu phép chiếu phối cảnh khơng phải phép biến đổi affine (Vì w nhận giá trị khác 1) o 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ịn gọi khối nhìn tiêu chuẩn) bị cắt Các đa giác, đường thẳng chứa có phần thay đổi để phần nằm khối nhìn tiêu chuẩn giữ lại Phần cịn lại khơng cần quan tâm nhiều o Sau cắt gọt, tọa độ đồng 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 gọi phép chia phối cảnh (Perspective Division) Đồ án tốt nghiệp trang8 Hình7: Tổng quan hiển thị 3D phép chiếu 1.2.3 Phép biến đổi hiển thị (Viewing Transformation) Phép biến đổi hiển thị đưa camera ảo 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 Đồ án tốt nghiệp trang9 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: ● 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 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 quay trùng với trục Y V vng 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 u v E R E R V n V n n u Ngược với hướng nhìn Z ( Oz ) Chỉ phía phải, vng góc với n X Chỉ lên giống V , vuống góc với n u Như ma trận phép quay là: M r (u,v, n) Và ma trận phép biến đổi là: Y Đồ án tốt nghiệp trang10 Trong u, v v tính từ E , R V 1.2.4 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ị 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ị hiển thị Cửa sổ phải đưa dạng hình vng [-1,+1]2 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 đư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 : Vùng khơng gian hiển thị phép chiếu trực giao Phép chiếu trực giao thu cách thực phép biến đổi sau theo thứ tự: Đồ án tốt nghiệp trang26 16 Từ điểm ta vẽ tứ giác bao ngồi bóng khối Vấn đề cị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 ln 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 vơ cực Nên điểm khơng cần xét đến nhiều 17 Đồ án tốt nghiệp trang27 2.3.4 Tạo bóng thuật toán Z-Pass Khi ta tạo 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 việc ta phải xác định 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 Để 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 vẽ Và Stencil Buffer thực điều Stencil Buffer cung cấp cho pixel hình “bộ đếm” tăng giảm pixel ghi vào Frame Buffer Sau hồn tồn kiểm tra đếm để xác định xem điểm ghi hình hay khơng Thuật tốn mơ tả mã 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 Đồ án tốt nghiệp trang28 End if End for 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 18 Đồ án tốt nghiệp trang29 19 20 Đồ án tốt nghiệp trang30 Các bước thực sau: Xóa hết Z-buffer Stencil-Buffer, Chắc chắn Chế độ ghi vào Z-buffer chế độ Stencil test 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ậ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 vẽ (Có nghĩa Depth Pass) tăng giá trị Stencil Buffer Vẽ mặt sau bóng khối, Nếu chúng thự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 = 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.3.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ý 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 chi phí tính tốn đắt Đồ án tốt nghiệp trang31 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 toá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 Z-Buffer Pass, toàn q trình thay đổi để đếm từ vơ cực thay đếm từ điểm nhìn Vì thuật tốn cịn gọi Z-Fails Thuật tốn Z-fail 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 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 Đồ án tốt nghiệp trang32 2.3.6 -Pass -fail (Cap) ) Nhanh Z-fail -pass (Self- shadow) (SelfShadow) Đồ án tốt nghiệp trang33 CHƢƠNG 3:CHƢƠNG TRÌNH THỰC NGHIỆM chƣơng trình ứng dụng kỹ thuật tạo bóng cứng minh họa cho kết đề tài sử dụng ngơn ngữ lập trình vísual c.net chạy mơi trƣờng window.Đầu vào chƣơng trình tori quay quanh điểm sáng Shadow volumes Mô tả: Dự án hiển thị bốn Tori xoay quanh điểm ánh sáng nguồn Mỗi casts Shadows khác Tori tƣờng Hiệu đạt đƣợc ba qua: Vẽ toàn cảnh lit ambient lƣợng nhỏ diffuse ánh sáng Điều vƣợt qua đặt giá trị chiều sâu cho nhìn thấy cảnh Đồ án tốt nghiệp trang34 Vẽ khối tin vào bóng tối stencil buffer Theo mặc định, bóng tối khối tin, sử dụng "zFail" kỹ thuật, với infinite clip bay xa, nhƣ đƣợc mô tả "mạnh mẽ Stenciled Shadow volumes" giấy Vẽ cảnh lit với đầy đủ diffuse specular, khu vực unshadowed (nơi stencil == 0) Yêu cầu: Đối với hai bên-stencil Shadows: EXT_stencil_two_side EXT_stencil_wrap Đối với khối lƣợng chƣơng trình vertex phun ra: ARB_vertex_program Tài liệu tham khảo: [1] Bài giảng Xử lý ảnh, Đỗ Năng Tồn, Viện cơng nghệ thơng tin Quốc Gia 2.Nehe tutorials học 28 - stencil bóng khối tin Nehe.gamedev.net 3.Ikrima Elhassan, “Shadow Algorithms” , 20-02-2007 4.Andrew V.Nealen, “Shadow Volume and Shadow Mapping, Recent Development 5.in Real-time Shadow Rendering”, University of British Columbia, 2000 ,“ , 15- 09-2006 7.& Thực tế mạnh mẽ Stenciled Shadow volumes cho phần cứngAccelerated Ra, Cass Everitt Mark J Kilgard Developer.nvidia.com Đồ án tốt nghiệp trang35 PHỤ LỤC PHẦN CODE CHÍNH CỦA CHƢƠNG TRÌNH 3.3.1 Tìm danh sách cạnh viền for(int ring=1; ring