Thiết kế trò chơi xếp gạch 3d sử dụng thư viện OpenGLl

62 445 0
Thiết kế trò chơi xếp gạch 3d sử dụng thư viện OpenGLl

Đ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

LỜI CẢM ƠN Em xin chân thành cảm ơn thầy giáo Th.S Lê Anh Tú – môn mạng truyền thông giúp đỡ em hoàn thành đồ án tốt nghiệp Là sinh viên chuyên ngành mạng, em nhận nhiều giúp đỡ từ phía thầy cô môn từ việc chọn đề tài hoàn chỉnh báo cáo Em nhận thấy tâm huyết nhiệt tình thầy cô đặc biệt thầy Lê Anh Tú – giáo viên hướng dẫn em, giúp em biết cần phải cố gắng nhiều học tập nghiên cứu Dưới đồ án tốt nghiệp em, em cố gắng song tránh khỏi sai sót Vì em mong nhận đóng góp thầy cô bạn bè cho đồ án tốt nghiệp em hoàn thiện Em xin trân trọng cảm ơn! Sinh viên Nguyễn Hồng Khanh LỜI CAM ĐOAN Em xin cam đoan: Những nội dung đồ án thân em thực hướng dẫn trực tiếp thầy giáo hướng dẫn : ThS Lê Anh Tú Mọi tham khảo dùng đồ án trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố Mọi chép không hợp lệ có thông tin sai lệch nào, em xin chịu hoàn toàn trách nhiệm trước Hội Đồng Sinh viên Nguyễn Hồng Khanh DANH MỤC HÌNH MỤC LỤC LỜI NÓI ĐẦU “một hình ảnh nghìn lời nói ” Điều thật phủ nhận Và rõ ràng hiển thị thông tin với ký hiệu, chữ cái, chữ số không hấp dẫn dễ hiểu có thêm biểu diễn đồ họa Kỹ thuật đồ hoạ công cụ thiếu ngành khoa học kỹ thuật, giáo dục, nghệ thuật, giải trí, quảng cáo…(để diễn đạt máy móc thiết bị, kiến trúc, cấu trúc thể, thông tin thiên văn địa lý, hình ảnh minh hoạ ) Chính vậy, đồ họa vấn đề quan tâm ngành công nghệ thông tin Cùng với phát triển tin học, kỹ thuật đồ họa máy vi tính, ngày trở nên tinh xảo Giao diện phần mềm ngày trở nên thân thiện, đẹp mắt nhờ thể đồ họa Sự hổ trợ tin học cho ngành khác trở nên đắc lực nhờ khả đồ họa vi tính Và giới thực biểu diễn cách sinh động, linh hoạt, đầy màu sắc không gian ba chiều Trong thành công kỹ thuật đồ họa ngày không nói đến phát triển vượt bậc tốc độ phần cứng lẫn hệ điều hành Nhưng thân kỹ thuật đồ họa có bước tiến nhảy vọt từ phép tính toán học phức tạp đến thư viện đồ họa tạo sẳn Các thư viện cho phép giảm nhẹ thời gian công sức người lập trình; Bởi với chúng, để có “tác phẩm ”đồ họa không đòi hỏi phải có kiến thức hùng hậu đường cong Bezier, B-spline, hình học, tạo bóng…, mà ứng dụng hàm tạo sẳn Một thư viện OpenGL, xem tiêu chuẩn thiết kế công nghiệp cho đồ họa ba chiều Mục tiêu đề tài tìm hiểu thư viện đồ họa OpenGL đồ họa ba chiều, đồng thời xây dựng game xếp gạch 3D sử dụng thư viện đồ họa OpenGL ngôn ngữ lập trình C# để minh họa giải thuật đồ họa ba chiều Tuy nhiên, đề tài không tránh khỏi hạn chế thiếu sót, nên mong bảo, góp ý quý Thầy Cô bạn bè Sinh viên Nguyễn Hồng Khanh Chương I : TỔNG QUAN VỀ THƯ VIỆN ĐỒ HỌA OPENGL 1.1 Các khái niệm 1.1.1 Lịch sử phát triển OpenGL Nguyên thủy, GL Silicon Graphics Incorporated (SGI) thiết kế để dùng cho trạm làm việc (Workstation) đồ họa IRIS họ IRIS GL với cấu hình phần cứng khác có đề phát sinh OpenGL kết nỗ lực SGI nhằm cải thiện tính tương thích IRIS GL Ngôn ngữ có khả GL, đồng thời “ mở ” nghĩa dễ dàng tương thích với loại cấu hình phần cứng, hệ điều hành khác Verson1.0 OpenGL giới thiệu vào ngày 1/7/1992 Để đảm bảo tính “ mở ”, nâng cấp OpenGL phải thông qua Ủy Ban Xem Xét Kiến Trúc OpenGL (OpenGL Architecture Review Board AEB) gồm thành viên sang lập SGI, Digittal Equipment Corporation, IBM, Intel Microsoft ARB họp năm hai lần 1.1.2 Khái niệm OpenGL dược định nghĩa “ giao diện phần mềm cho phần cứng đồ họa ” Thực chất, OpenGL thư viện hàm đồ họa, xem tiêu chuẩn thiết kế công nghiệp cho đồ họa ba chiều OpenGL thiết kế không phụ thuộc vào tảng phần cứng hệ điều hành máy tính (independence of hardware platform and operating system) Với OpenGL ta tạo mô hình từ đối tượng hình học điểm (point), đường (line) đa giác (polygon) Cú pháp lệnh OpenGL: Các câu lệnh OpenGL sử dụng tiền tố gl từ bắt đầu kí tự hoa, ví dụ glClearColor() Các định nghĩa tiền tố GL_ tiếptheo từ viết hoa ngăn cách kí tự gạch dưới, ví dụ GL_COLOR_BUFFER_BIT Các thư viện liên quan OpenGL: Mặc dù OpenGL công cụ mạnh đối tượng vẽ đối tượng hình học Để đơn giản hóa số công việc, trang bị thêm số thư viện cho phép sử dụng thủ tục vẽ mức cao hơn: - OpenGL Utility Library (GLU): Bao gồm số thủ tục thiết lập ma trận xác định hướng nhìn (viewing orientation), ma trận phép chiếu (projection), biểu diễn mặt không gian chiều (redering surfaces) - OpenGL Utility Toolkit (GLUT): Là công cụ viết Mark Kilgard bao gồm thủ tục giúp cho đơn giản hóa việc xây dựng đối tượng hình học Các thủ tục GLUT bắt đầu tiền tố glut Dưới giới thiệu tổng quát cách làm việc OpenGL : +, Các phần tử đồ họa lệnh giới thiệu phần tử đồ họa thực lệnh +, Các làm việc OpenGl cho biết loại thao tác đồ họa mà OpenGL kiếm soát +, Sử dụng mô hình cilent/server cho việc thông dịch lệnh +, Thao tác OpenGL đưa mô tả mức cao cách OpenGL xử lý liệu tạo hình ảnh tương ứng lên đệm 1.1.3 Các phần tử đồ họa lệnh Điểm gốc xác định nhóm hay nhiều vector điểm không gian Mỗi vector xác định điểm, đầu đoạn thẳng hay đỉnh đa giác Dữ liệu (bao gồm tọa độ vector, màu sắc, normal, texture cờ xác định loại cạnh) kết hợi với vector Khi xử lý primitive, cập vector liệu liên kết với sử lý độc lập với cập khác, theo thứ tự phương pháp Ngoại lệ trường hợp khử phần khuất primirite(clipping) Khi đó, liệu vector sửa vector khác tạo Loại clipping tuỳ thuộc loại primirite mà nhóm vector biểu diễn Các lệnh luôn xử lý theo thứ tự mà tiếp nhận, mặt dù có trì hoãn không xác định trước lệnh có hiệu lực Nghĩa primirite vẽ trọn vẹn trướckhi lệnh có hiệu lực 1.1.4 Cách làm việc OpenGL OpenGL ngôn ngữ đồ họa theo thủ tục ngôn ngữ mô tả.Thay tả cảnh cách chúng xuất hiện, OpenGL đưa bước cần thiết để có thể hay hiệu định Các “bước”này lời gọi đến giao diện lập trình ứng dụng gồm xăp xỉ 120 lệnh hàm Chúng dùng để vẽ phần tử đồ họa điểm, đường đa giác không gian ba chiều Ngoài ra, OpenGL hổ trợ chiếu sáng, tô bóng, gán cấu trúc, tạo ảo giác chuyển động hiệu đặc biệt khác OpenGL chức quản lý cửa sổ, tương tác với người dùng hay xuất nhập file Môi trường chủ (tức hệ điều hành) có chức chịu trách nhiệm thực biện pháp quản lý cho OpenGL 1.1.5 Mô hình hoạt động Mô hình thông dịch lệnh OpenGL client-server Mã ứng dụng(vai trò client) đưa lệnh Lệnh thông dịch sử lý OpenGL (vai trò server) Server client máy tính khác Theo nghĩa này, OpenGL network-transparent (tạm dịch mạng suốt) Server trì nhiều ngữ cảnh OpenGL, ngữ cảnh trạng thái OpenGL Client nói với ngữ cảnh Giao thức mạng sử dụng độc lập hóa dựa giao thức mạng có (tức OpenGL dùng máy độc lập hay môi trường mạng) Không có lệnh OpenGL tiếp nhận việc nhập liệu trực tiếp từ người dùng Cuối cùng, hệ thống cửa sổ kiểm soát tác dụng lệnh OpenGL đệm khung qua thao tác: • Quyết định phần đệm khung mà OpenGL truy xuất thời điểm cho phép • Truyền đạt cho OpenGL thông tin cấu trúc phần • Như vậy, lệnh OpenGL định dạng đệm khung hay khởi tạo OpenGL Sự định dạng đệm thực bên OpenGL liên kết với hệ thống cửa sổ Sự khởi tạo OpenGL tiến hành hệ thống cấp phát cửa sổ cho việc biểu diễn 1.1.6 Thành phần OpenGL gồm hàm: • Bộ hạt nhân có 115 hàm Tên hàm bắt đầu GL Windows NT hỗ trợ chủng loại hàm khác, bao gồm thư viện OpenGL utility (tên hàm bắt đầu GLU), thư viện OpenGL auxiliary(tên hàm bắt đầu AUX), hàm”WGL” (tên hàm bắt đầu WGL), hàm WIN32 API (tên hàm tiền tố đặc biệt) • Bộ hàm hạt nhân cho phép thiết kế hình dạng khác nhau, tạo hiệu chiếu sáng, kết hợp antialiasing gán cấu trúc, thực biến đổi ma trận • Do hàm thể nhiều dạng khác tùy thuộc vào loại liệu mà chúng tiếp nhận, nên thực tế có 300 nguyên mẫu (prototype) hàm • Thư viện OpenGL utility gồm hàm cao cấp Các hàm đơn giản hoá việc sử dụng hình ảnh cấu trúc, thực việc biến đổi tọa độ mức cao, hỗ trợ tesselation đa giác, biểu diễn đối tượng có sở đa giác hình cầu, hình trụ hình đĩa • Thư viện OpenGl auxiliary gồm hàm đặc biệt dùng đơn giản hóa ví dụ lập trình sách dẫn lập trình OpenGL Các hàm phụ thuộc platform thực nhiệm vụ quản ký cửa sổ, điều khiển xuất/nhập, vẽ đối tượng 3D định Do hàm có mực đích thiết minh nên không dùng mã sản xuất • Các hàm “WGL”kết nối OpenGL với WINdows NT, cho phép người lập trình xây dựng chọn lựa ngữ cảnh biểu diễn, tạo bitmap font, hàm dùng Windows NT • Cuối cùng, hàm Win32 API dùng giải định dạng điểm ảnh tạo đệm đôi 1.2 Xây dựng đối tượng thư viện OpenGL 1.2.1 Xây dựng đối tượng 3D từ đa giác việc xây dựng đối tượng 3D từ đa giác tương tự gắn mẫu giấy có hình dạng khác ( đa giác) thành vật thể 3D Ví dụ ta có mẫu giấy hình vuông (hình 1), ta muốn gắn chúng lại với để có khối vuông Cho ta có khối vuông tạo thành từ hình vuông thuộc hệ thống lưới Decart 3D Hình vuông lớn giới mà ta tổ hợp mẫu giấy tạo nên đối tượng Khối vuông giấy tạo nên cách đặt mẫu giấy vào vị trí cho gốc hệ tọa độ Decart(0,0,0) nằm tâm khối vuông giấy Tức tọa độ tâm khối hình vuông (hình 2) OpenGL mặc định hệ thống lưới 3D khối vương 2, với gốc tọa động tâm Nghĩa tọa độ X,Y, Z dãy từ -1.0 ðến 1.0 Các giá trị trục X tãng từ trái sang phải, giá trị trục Y tãng từ dýới lên Các giá trị trục Z tãng từ sau trýớc Như vậy, để hình khối vuông hình 2, đoạc mã sau sử dụng để xác định vertex cho đa giác glBegin(GL_POLYGON); glVertex3f(-0.5f, 0.5f, 0.5f); glVertex3f(-0.5f, -0.5f, 0.5f); glVertex3f(0.5f, -0.5f, 0.5f); glVertex3f(0.5f, 0.5f, 0.5f); glEnd() glBegin(GL_POLYGON); glVertex3f(0.5f, 0.5f, 0.5f); glVertex3f(0.5f, -0.5f, 0.5f); glVertex3f(0.5f, -0.5f, -0.5f); glVertex3f(0.5f, 0.5f, -0.5f); glEnd() glBegin(GL_POLYGON); glVertex3f(0.5f, 0.5f, -0.5f); 10 // Cap nhat lai diem so Score += Parent.trkSpeed.Value * 5; } // Huy mot mat tren truc XOZ public void EraseXOZ(int y) { float alphacolor = 1.0f; // Tao hieu ung mo dan cho hang while (alphacolor > 0.0f) { alphacolor -= 0.1f; for (int iz = 1; iz < Z + 1; iz++) for (int ix = 1; ix < X + 1; ix++) Nodes[ix, y, iz].AlphaColor = alphacolor; Refresh(); } for (int iz = 1; iz < Z + 1; iz++) for (int ix = 1; ix < X + 1; ix++) Nodes[ix, y, iz].AlphaColor = alphacolor; // Xoa hang for (int iy = y; iy < Y; iy++) { for (int iz = 1; iz < Z + 1; iz++) for (int ix = 1; ix < X + 1; ix++) Room[ix, iy, iz] = Room[ix, iy + 1, iz]; } 48 // Cap nhat lai diem so Score += ((frmMain)Parent).trkSpeed.Value * 5; } // huy mot hang tren truc oz public void EraseZ(int y, int x) { float alphacolor = 1.0f; // Tao hieu ung mo dan cho hang while (alphacolor > 0.0f) { alphacolor -= 0.1f; for (int iz = 1; iz < Z + 1; iz++) { Nodes[x, y, iz].AlphaColor = alphacolor; } Refresh(); } // Thiet lap lai mau sac cho hang for (int iz = 1; iz < Z + 1; iz++) { Nodes[x, y, iz].AlphaColor = AlphaColor; } // Xoa hang for (int iy = y; iy < Y; iy++) { for (int iz = 1; iz < Z + 1; iz++) Room[x, iy, iz] = Room[x, iy + 1, iz]; } 49 // Cap nhat lai diem so Score += ((frmMain)Parent).trkSpeed.Value * 5; } // Thiet lap den chieu public void EnableLighting() { GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, light_position); GL.glEnable(GL.GL_LIGHTING); GL.glEnable(GL.GL_LIGHT0); } // Tat den chieu public void DisableLighting() { GL.glDisable(GL.GL_LIGHT0); GL.glDisable(GL.GL_LIGHTING); } // Thiet lap blend public void EnableBlending() { GL.glEnable(GL.GL_BLEND); GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); } // Ve toan bo man hinh public void DrawScreen() { // Ve nen can phong for (int ix = 0; ix < X + 2; ix++) 50 for (int iz = 0; iz < Z + 2; iz++) { GL.glPushMatrix(); if (ix == || ix == X + || iz == || iz == Z + 1) Nodes[ix, 0, iz].DrawTexture(texOut); else Nodes[ix, 0, iz].DrawTexture(texFloor); GL.glPopMatrix(); } // Ve diem sinh cac doi tuong GL.glPushMatrix(); Nodes[1, Y + 1, 1].DrawTexture(texOut); GL.glPopMatrix(); // Ve cac doi tuong for (int iy = 1; iy < Y + 1; iy++) for (int ix = 1; ix < X + 1; ix++) for (int iz = 1; iz < Z + 1; iz++) { if (Room[ix, iy, iz] == NodeState.Full) { GL.glPushMatrix(); Nodes[ix, iy, iz].DrawTexture(texObject); GL.glPopMatrix(); CHƯƠNG III: CHƯƠNG TRÌNH GAME XẾP GẠCH 3.1 Chương trình game xếp gạch 3D 3.1.1 Ý tưởng trò chơi trò chơi xếp gạch không gian ba chiều (phát triển môi trường 3D), sử dụng thư viện CsGL (C Sharp OpenGL) C# Với ý tưởng phát triển trò chơi xếp gạch truyền thống lên mức độ cao thực dạng 3D, hỗ trợ người dùng nhiều tiện ích : - Cung cấp giao diện trực quan chiều thực tế 51 - Cho phép người chơi tùy chọn góc nhìn - Tùy chọn quy luật chơi - Tùy chọn cấu hình lúc chơi (ánh sáng, màu sắc, tốc độ…) - Hướng dẫn chi tiết người chơi - Tạo lập bảng thành tích người chơi - … 3.1.2 Luật trò chơi + Khi trò chơi bắt đầu, hình khối ( dạng ngẫu nhiên ) rơi xuống, bạn phải xếp cho đầy hàng trục Ox, Oz mặt phẳng xOz + Khi đầy hàng mặt, hộp hàng mặt bị hủy điểm chơi tăng lên + Khi bạn chơi với tốc độ cao điểm cộng bạn lớn ( độ khó tăng lên ) + Nếu bạn khối hộp chất đầy đến điểm cao bạn bị thua trò chơi kết thúc => chơi lại ván khác 3.1.3 Cách chơi Làm cách để di chuyển khối ?  Bạn bấm F1 để dời hình khối qua trái, F2 để dời qua phải, F3 để di chuyển tới trước, F4 để di chuyển sau  Bạn bấm F9 để xoay hình khối trục Ox, F10 để xoay trục Oy, F11 để xoay trục Oz  Nếu bạn muốn hình khối rơi xuống nhanh bấm Enter  Nếu hình khối lấp đầy trục măt trục mặt tự động hủy Bạn click phím sau bàn phím số để di chuyển khối:  4: di chuyển qua trái  6: di chuyển qua phải  8: di chuyển sau  2: di chuyển tới trước  , : Xoay trục Ox  : Xoay trục Oy 52  / : Xoay trục Oz Các thiết lập để chơi ván mới: Trên GameBar >> chọn New Game >> xuất hộp thoại New Game  Trên trackbar X, Y, Z cho phép bạn thiết lập độ rộng không gian chơi  Trong hộp Kill On bạn chọn cho phép hủy hộp trục Ox, Oz, hay mặt xOz làm đầy  Bạn chọn Ok để chấp nhận chơi ván  Bạn chọn Cancel để tiếp tục chơi ván cũ 3.2 Giao diện chương trình giao diện game gồm phần chính: Game Bar, Graphics Bar, Không gian game  Game Bar Dùng cho thao tác liên quan đến trình chơi game Gồm có chức  Chơi ván : GameBar >> New Game  Tạm ngưng trò chơi : GameBar >> Pause  Thoát khỏi trò chơi : GameBar >> Exit ( Hoặc nhấn ESC )  Xem hướng dẫn cách chơi : GameBar >> Help  Xem thông tin chương trình : GameBar >> About  Graphics Bar Dành cho thao tác liên quan đến việc thay đổi cách thể đối tượng, để thuận tiện cho việc quan sát  Thay đổi độ suốt vật thể: Graphics Bar >> Opacity trackbar  Thay đổi tốc độ rơi vật thể: Graphics Bar >> Speed trackbar  Thay đổi màu sắc vật thể: Graphics Bar >> R, G, B trackbar  Thay đổi bề mặt vật thể: Chọn kiểu 4h, texture O, texture X, Default (mặc định) 53  Cho phép chiếu sáng: Graphics Bar >> Lighting Checkbox  Thay đổi điểm đặt đèn chiếu Graphics Bar >> X, Y, Z trackbar Khi bắt đầu vào chơi: Người chơi ghi tên người chơi, chọn kích thước xếp gạch 54 Người chơi có thể chọn hủy một hàng gạch theo trục X, Z hoặc mặt phẳng XOZ mục Kill On để tính điểm 55 sau thiết lập thông số ban đầu, người chơi bắt đầu chơi 56 Trong chơi, người chơi xoay theo phương hướng khác để dễ quan sát sinh động 57 Thay đổi màu sắc khối gạch 58 Thay đổi bề mặt vật thể: Chọn kiểu 4h, texture O, texture X, Default (mặc định) 59 Thay đổi độ suốt vật thể: Graphics Bar >> Opacity trackbar 60 KẾT LUẬN Qua thời gian tìm hiểu, học tập, nghiên cứu dìu dắt tận tâm thầy Th.S Lê Anh Tú, em hoàn thành đặt từ bắt đầu tham gia thực tập tốt nghiệp Cụ thể, em nắm bắt kiến thức về:  Các thành phần thư viện đồ họa OpenGL hỗ trợ cho việc lập trình  Biết cách sử dụng thư viện CsGL (C Sharp OpenGL) C#  Biết cách xây dựng đối tượng tạo cảnh tạo cảnh không gian 3D Tuy nhiên, em tự nhận thấy nhiều khuyết điểm lớn:  Thời gian thực hành với C Sharp OpenGL C# ít, khả vận dụng ngôn ngữ lập trình chưa linh hoạt  Chưa xử lý thành thạo việc xây dựng đối tượng tạo cảnh không gian 3D Do thời gian có hạn, vốn kiến thức hạn chế nên tránh khỏi thiếu sót khuyết điểm nội dung lẫn câu chữ Em mong nhận đóng góp quý báu thầy cô để báo cáo em hoàn thiện Em xin chân thành cảm ơn ! Sinh viên Nguyễn Hồng Khanh 61 TÀI LIỆU THAM KHẢO [1] Frank D.Luna - Introduction To 3D Game Programming With DirectX9.0c - A Shader Approach-2007 [2] Peter Walsh - Advanced 3D Game Programming with Directx 9.0 A Shader Approach-2005 [3] Mason Woo, Jackie Neider, Tom Davis, Dave Shreiner- OpenGL Programming Guide - Addison-Wesley Professional - 2009 [4] Mộ t số trang web : http://www.caulacbovb.com/forum/viewtopic.php?t=8399, http://diendan.congdongcviet.com/archive/index.php/t-2623.html, http://www.ddth.com/showthread.php/303545-L%C3%A0m-game-3D-v %E1%BB%9Bi-C-NET 62 ... GAME XẾP GẠCH SỬ DỤNG THƯ VIỆN ĐỒ HỌA OPENGL 2.1 Thiết kế game xếp gạch 2.1.1 Tìm hiểu cấu trúc game - Luật lệ game: + Game mô game Xếp Gạch (Tetris),nhiệm vụ ngýời chõi di chuyển khối gạch ðang... ứng dụng hàm tạo sẳn Một thư viện OpenGL, xem tiêu chuẩn thiết kế công nghiệp cho đồ họa ba chiều Mục tiêu đề tài tìm hiểu thư viện đồ họa OpenGL đồ họa ba chiều, đồng thời xây dựng game xếp gạch. .. phần mềm cho phần cứng đồ họa ” Thực chất, OpenGL thư viện hàm đồ họa, xem tiêu chuẩn thiết kế công nghiệp cho đồ họa ba chiều OpenGL thiết kế không phụ thuộc vào tảng phần cứng hệ điều hành

Ngày đăng: 19/04/2017, 22:34

Mục lục

  • MỤC LỤC

Tài liệu cùng người dùng

Tài liệu liên quan