BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM BÁO CÁO ĐỒ ÁN 2 TÌM HIỂU VỀ OPENGL VÀ THIẾT KẾ 2D GAME ENGINE Giảng viên hướng dẫn ThS Thái Thụy Hàn Uyển Sinh viên th[.]
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM BÁO CÁO ĐỒ ÁN TÌM HIỂU VỀ OPENGL VÀ THIẾT KẾ 2D GAME ENGINE Giảng viên hướng dẫn Sinh viên thực Sinh viên thực Lớp : : : : ThS Thái Thụy Hàn Uyển Nguyễn Viết Lưu – 19520155 Vũ Đức Trung - 19520324 SE122.N11 Thành phố Hồ Chí Minh, tháng 12 năm 2022 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM BÁO CÁO ĐỒ ÁN TÌM HIỂU VỀ OPENGL VÀ THIẾT KẾ 2D GAME ENGINE Giảng viên hướng dẫn Sinh viên thực Sinh viên thực Lớp : : : : ThS Thái Thụy Hàn Uyển Nguyễn Viết Lưu – 19520155 Vũ Đức Trung - 19520324 SE122.N11 Thành phố Hồ Chí Minh, tháng 12 năm 2022 Lời cảm ơn Đồ án mơn học có nhiều thử thách, địi hỏi người học phải dành nhiều thời gian, công sức để nghiên cứu, tìm tịi xây dựng Đồng thời, hội để sinh viên thực hành học suốt năm đại học học hỏi thêm nhiều kiến thức, kinh nghiệm kỹ phục vụ cho công việc sau Hơn hết, đồ án bước chuẩn bị cuối để nhóm phát triển lên thành khóa luận tốt nghiệp Cho nên xem thử thách hội để sinh viên rèn luyện, hoàn thiện thân kĩ tích lũy suốt q trình làm đồ án Để đến đoạn cuối hành trình nỗ lực, cố gắng kiên trì Đồng hành sinh viên vượt qua thử thách có mặt giúp đỡ người thầy tận tâm cơng việc Nhóm xin chân thành cảm ơn Thái Thị Hàn Uyển tận tình giúp đỡ nhóm em hồn thành đồ án Chính nhờ góp ý, động viên giúp đồ án nhóm hồn thiện chun nghiệp nhiều Bên cạnh đó, nhóm học hỏi nhiều kiến thức, kinh nghiệm học thú vị q trình làm khố luận, hành trang hữu ích cho nhóm sau Nhóm xin chân thành cảm ơn anh chị, bạn bè giúp đỡ nhóm q trình thực đồ án Nhờ người mà nhóm có nhiều góc nhìn khác đề tài làm, từ giúp hồn thiện đồ án nhóm Một lần nữa, nhóm xin chân thành cảm ơn cô người Lời nhận xét giảng viên hướng dẫn ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… ……………………………………………………………………………………………………… Mục lục Lời cảm ơn Lời nhận xét giảng viên hướng dẫn Mở đầu Chương Tổng quan 1.1 Lý chọn đề tài 1.1.1 Giới thiệu sơ lược OpenGL 1.1.2 Giới thiệu sơ lược Game Engine 1.1.3 Các Game Engine có thị trường 1.1.4 Lý lựa chọn đề tài 1.2 Mục tiêu đồ án 10 1.2.1 Yêu cầu nghiên cứu 10 1.2.2 Yêu cầu tính sản phẩm 10 1.2.3 Yêu cầu kỹ thuật sản phẩm 10 1.3 Hướng tiếp cận dự kiến 10 1.3.1 Công nghệ dự kiến sử dụng 10 1.3.2 Đối tượng phạm vi dự án nhắm đến 10 Chương Cơ sở lý thuyết 11 2.1 Cách game hoạt động 11 2.1.1 Loop 11 2.1.2 Render 11 2.1.3 Game object 11 2.1.3 Component 11 2.1.4 Script 11 2.2 OpenGL 11 2.2.1 OpenGL gì? 11 2.2.2 OpenGL hoạt động nào? 11 2.2.3 Lịch sử hình thành, phiên OpenGL 12 2.2.4 Đối thủ cạnh tranh OpenGL 13 2.2.5 Tại cần có OpenGL? 13 2.2.6 Tại Shader lại chạy nhanh tới mức vậy? 13 2.3 Game Engine 15 2.3.1 Game Engine gì? 15 2.3.2 Mục đích đời 15 2.3.3 Game Engine thời điểm 16 2.3.5 Những thành phần cấu thành nên Game Engine 16 2.3.6 Quy trình tạo game dựa vào Game Engine 16 Chương Thiết kế hệ thống 17 3.1 Kiến trúc hệ thống 17 3.2 Mô tả thành phần hệ thống 17 Chương Phân tích thiết kế 18 4.1 Phân tích chức 18 4.1.1 Bảng tính 18 4.1.2 Danh sách tính phát triển 18 4.1.3 Danh sách tính q trình phát triển 21 4.2 Thiết kế giao diện 21 4.2.1 Sơ đồ thiết kế giao diện 21 4.2.2 Danh sách giao diện 22 4.2.3 Mô tả chi tiết giao diện 22 Chương Thực nghiệm 23 5.1 Thực nghiệm chương trình 23 5.1.1 Phương pháp đánh giá 23 5.1.2 Kết đánh giá 24 Kết luận 25 Hướng phát triển 26 Cài đặt sử dụng 27 Phân công công việc 28 Tài liệu tham khảo 29 Mở đầu Ngày nay, tốc độ phát triển nghành Cơng nghệ thơng tin phải nói nhanh đến chóng mặt từ bước ban đầu dùng để tính tốn, xem tin tức, lưu trữ số thông tin quan trọng bây giờ, gần cho phép người vào giới quan với thao tác gõ phím đấp chuột xây dựng nên Game đơn giản Mario, Pinball, … Một phần tạo nên thành công công nghệ OpenGL OpenGL viết tắt cho "Open Graphics Library" dùng nhiều ngơn ngữ máy tính Bên cạnh phát triển nhanh chóng ấy, xu hướng tạo tựa Game đơn giản dần người u thích quan tâm Và ngày có nhiều phần mềm giúp người tạo tựa Game từ đơn giản đến nâng cao Đó lí mà chúng em tìm hiểu công nghệ OpenGL làm nên phần mềm công cụ giúp thiết kế Game 2D cách dễ dàng dễ hiểu cho người dùng Các cơng việc mà phần mềm hỗ trợ để giúp cho việc phát triển game cách dễ dàng là: Hỗ trợ render hình ảnh với FPS cao, kéo thả vật thể game, dễ dàng thêm component cho vật thể game, hỗ trợ phát âm thanh, tạo animation, Chương Tổng quan 1.1 Lý chọn đề tài 1.1.1 Giới thiệu sơ lược OpenGL OpenGL viết tắt “Open Graphics Library”, API đa tảng, đa ngôn ngữ cho việc render đồ họa 2D 3D OpenGL xử lý phép tính đồ họa trực tiếp GPU thay CPU, điều làm cho giảm công việc cực nhọc GPU, từ làm cho đồ họa render nhanh 1.1.2 Giới thiệu sơ lược Game Engine Game Engine phần mềm dùng để xây dựng thiết kế trị chơi điện tử Hình dung cách đơn giản game engine cung cấp cho nhà sản xuất game nguyên liệu để từ họ dễ dàng việc phát triển game Lợi ích Game Engine: • Tạo game mà hạn chế không sử dụng lập trình • Tiết kiệm thời gian, cơng sức tiền bạc • Đồ họa chân thực • Hỗ trợ đa tảng 1.1.3 Các Game Engine có thị trường Hiện có nhiều Game Engine thị trường, số game engine bật: • Unity • Unreal Engine • CryEngine • Coco’s Creator • Amazon Lumberyard • Godot • GameMaker: Studio Unity Unity số game engine phổ biến toàn giới phát triển Unity Technologies Chúng ta dễ dàng nhìn thấy game phát triển Unity Nó sử dụng để phát triển game điện thoại di động Unity game engine đa tảng cho phép nhà phát triển tạo nội dung 3D cách thuận tiện Nó hỗ trợ nội dung 2D 3D với việc phát triển VR AR Unity có cộng đồng rộng lớn, có Assets Store riêng mình, nơi cung cấp packages miễn phí trả phí Nó hỗ trợ cho Windows, Mac, Linux, Android, iOS,… Một số game phát triển Unity: Temple Run, Assassin’s Creed Identity,… Unreal Engine Unreal Engine số game engine phổ biến tồn giới phát triển Epic Games Nó game engine đa tảng Game tạo Unreal Engine hỗ trợ Microsoft Windows, macOS, Linux, SteamOS, HTML5, iOS, Android, Nintendo Switch, PlayStation 4, Xbox One Nó có Market riêng mình, nơi mà packages mua Ngồi ra, chương trình nặng đồ họa, yêu cầu máy tính mạnh engine khác Unity Một số game làm Unread Engine: Fornite, Batman Arkham City,… CryEngine Được phát triển CryTek CryEngine trình chỉnh sửa Sandbox 1đầy đủ tính dùng để phát triển cho hầu hết tảng bao gồm: Xbox, PlayStation, PC Oculus Một số game phát triển CryEngine: War of Rights, Last Kingdom,… Coco’s Creator Nó cơng cụ tập trung vào việc tạo nội dung phát triển Xiamen; có tính mạnh mẽ thân thiện với người dùng Đây công cụ phát triển trò chơi đa tảng hỗ trợ nhiều tảng khác nhau, bao gồm web, iOS, Android, Windows Mac Nó hỗ trợ phát triển trị chơi 2D 3D Họ cung cấp giải pháp khác Cocos 2D Cocos 2Dx Một số game phát triển Coco’s Creator: Magic Rush, Ark of Conquest, Idle Heroes,… Amazon Lumberyard Được phát triển Amazon Nó chủ yếu sử dụng để phát triển game 3D Nó hỗ trợ chế độ xem trước VR (VR preview mode), kịch trực quan (visual script) tích hợp Twitch Adobe Photoshop Amazone Lumberyard hỗ trợ phát triển game online nhiều người chơi cách dễ dàng Nó sử dụng C++ làm ngơn ngữ lập trình Một số game phát triển Amazon Lumberyard: New World, Star Citizen,… Godot Godot Game Engine sử dụng miễn phí, mã nguồn mở thơng qua giấy phép MIT Godot công cụ phát triển mã nguồn mở chạy máy tính Windows, Linux Mac Công cụ hỗ trợ khả 2D 3D, có trình chỉnh sửa hình ảnh hệ thống cảnh linh hoạt để đưa tiến trình trị chơi Ngồi ra, Godot sử dụng ngơn ngữ GDScript, ngơn ngữ lập trình cấp cao có cú pháp giống với Python Một số game phát triển Godot: Kingdoms of the Dump, Hardcored,… GameMaker: Studio Được phát triển Yoyo, Đây tảng phát triển trị chơi 2D khơng u cầu kinh nghiệm kiến thức lập trình Thay vào đó, người dùng “point and click” để tạo trị chơi nhanh nhiều so với viết mã ngôn ngữ mẹ đẻ Nhìn chung, cơng cụ thân thiện với người bắt đầu mở khả phát triển trò chơi cho tất người Một số game phát triển bưởi GameMaker: Undertale, Hotline Miami,… 1.1.4 Lý lựa chọn đề tài OpenGL kiến thức quan trọng mà nhà phát triển game cần phải nắm rõ Đồng thời 2D Game Engine đề tài mà người bắt Sandbox giới ảo, nơi người chơi xây dựng, sở hữu kiếm tiền từ trải nghiệm chơi game họ blockchain Ethereum đầu tìm hiểu lập trình game nên tìm hiểu Vì cấp cho người nhiều kiến thức, thuật ngữ quan trọng Với định hướng nhóm mong muốn thử thách mình, chúng em định chọn đề tài “Tìm hiểu OpenGL thiết kế 2D Game Engine” để làm đề tài cho môn Đồ án 1.2 Mục tiêu đồ án 1.2.1 Yêu cầu nghiên cứu • Hiểu khái niệm OpenGL • Hiểu nắm rõ kiến thức, quy trình phát triển 2D Game Engine 1.2.2 Yêu cầu tính sản phẩm Được lấy cảm hứng từ Hazel Engine Sản phẩm 2D Game Engine cần có yêu cầu tính sau: • Hỗ trợ phát triển game 2D • Hỗ trợ kéo thả (drag and drop) • Hạn chế lập trình sản xuất game (no-code) 1.2.3 Yêu cầu kỹ thuật sản phẩm Sản phẩm 2D Game Engine cần có yêu cầu kỹ thuật sau: • Giao diện thân thiện, trực quan, đại • Tính dễ sử dụng 1.3 Hướng tiếp cận dự kiến 1.3.1 Công nghệ dự kiến sử dụng • Ngơn ngữ lập trình: Java • Các thư viện hỗ trợ: o ImGui (Immediate Mode GUI): Hỗ trợ tạo giao diện nhanh, linh hoạt, dock cửa sổ lên vị trí hình o OpenAL (Open Audio Library): API hỗ trợ phát âm o GLFW (Graphics Library Framework): Thư viện hỗ trợ làm việc với OpenGL, xử lý liệu đầu vào từ chuột, bàn phím, pad, o LWJGL (Lightweight Java Game Library): Thư viện hỗ trợ render đồ họa Java o JOML (Java math library for OpenGL): Hỗ trợ tính tốn phép tính render o JBOX2D: Hỗ trợ vật lý, va chạm 1.3.2 Đối tượng phạm vi dự án nhắm đến • Những người có đam mê muốn tìm hiểu việc phát triển game, muốn tìm hiểu xem phía sau game thứ • Những người muốn tạo game đơn giản 10 Hình dung vi xử lý tí hon hàng loạt ống xếp dọc kết lại với thành bàn, liệu điểm ảnh bóng bàn Nhét 14.400.000 bóng bàn vào ống đơn lẻ giây khó Nhưng nhiều ống xếp thành hàng 800x600 đưa 480.000 bóng bàn chui qua tới 30 lần giây cách dễ dàng Độ phân giải cao tương tự - phần cứng có lực xử lý song song khối lượng cơng việc mà giải lại lớn Một "siêu lực" khác GPU hàm Toán học tối ưu phần cứng, nên phép toán phức tạp xử lý trực tiếp phần cứng thay phần mềm Điều có nghĩa phép tính lượng giác ma trận tính nhanh - điện ln 2.3 Game Engine 2.3.1 Game Engine gì? Game engine, hay gọi Phần mềm game, phần mềm dùng để xây dựng thiết kế trị chơi điện tử (video game) Hình dung cách đơn giản, game engine cung cấp cho nhà làm game nguyên liệu để từ họ dễ dàng việc phát triển game Một game engine thơng thường bao gồm kết xuất đồ họa cho hình ảnh 2D hay 3D, cơng cụ vật lý, hoạt hình, trí tuệ nhân tạo cho nhân vật trò chơi, phân luồng, tạo dòng liệu xử lý, quản lý nhớ, dựng ảnh đồ thị, Từ game engine phát triển nhiều game khác Đây giải pháp tiết kiệm nhiều thời gian chi phí cho nhà sản xuất 2.3.2 Mục đích đời Game engine đời cung cấp cho nhà phát triển game công cụ để phát triển tái sử dụng phần Từ game engine, người ta phát triển thêm vơ số game khác Nó giải tốn phát triển vơ khó nhằn tốn nhiều thời gian, chi phí cơng sức người Đặc biệt ngành công nghiệp game ngành vơ cạnh tranh có tốc độ phát triển theo cấp số nhân, sản phẩm trí tuệ lại mang tính sống cịn Game engine đời với mục đích giải yêu cầu cấp thiết giảm thiểu chi phí sáng tạo, để từ giảm giá thành tiếp tục trì sức hút với người tiêu dùng 15 2.3.3 Game Engine thời điểm Game engine liên tục phát triển để đáp ứng nhu cầu người dùng Các ứng dụng mở rộng vượt khỏi biên giới giải trí đơn Ứng dụng bao gồm mơ phỏng, huấn luyện ảo, y tế ảo, mô ứng dụng quân sự,… Các game engine phát triển ngơn ngữ lập trình Java C# hay NET, Python Gần đây, Microsoft đầu việc thúc đẩy nhà phát triển game độc lập phát triển game với tốn chi phí hơn; nhờ công nghệ XNA (Microsoft XNA) cung cấp phần mềm phát triển chung cho tất game hệ máy Xbox sản phẩm liên quan 2.3.5 Những thành phần cấu thành nên Game Engine Những thành phần cấu thành nên Game Engine bao gồm: • Rendering Engine for 2D or 3D Graphics • Physics Engine • Collision Detection • Sound • Scripting • Animation • AI • Networking • Streaming • Memory management • Threading • … 2.3.6 Quy trình tạo game dựa vào Game Engine ➢ Bước 1: Tìm kiếm nguyên liệu tạo thành game sprite, âm ➢ Bước 2: Đưa nguyên liệu vào game engine ➢ Bước 3: Tiến hành tạo game object game ➢ Bước 4: Gắn component vào game object, tạo script cần thiết ➢ Bước 5: Chạy thử game engine ➢ Bước 6: Build thành file dựa tảng hướng tới 16 Chương Thiết kế hệ thống 3.1 Kiến trúc hệ thống 3.2 Mô tả thành phần hệ thống Thành phần STT Game Objects Components Scripts Engine App Renderer Physics System Diễn giải Các vật thể tạo nên game Một game object bao gồm nhiều component tạo thành Là kịch cho game object hoạt động, coi component gắn vào nhiều game object Nơi để người dùng kéo thả, tạo game, set thuộc tính, component, tạo scripts,… thực thao tác game mà họ muốn tạo Thực vẽ hình ảnh, sprite, texture game Game giới, giới cần có áp dụng định luật vật lý Physics hỗ trợ tạo định luật áp dụng game Quản lý đầu vào: Chuột, bàn phím, pad,… Các prefabs (vật thể cha) Camera Window Sound manager 17 Chương Phân tích thiết kế 4.1 Phân tích chức 4.1.1 Bảng tính Tên tính STT Ghi Kéo thả Xử lý va chạm định luật vật lý 2D Animation Tạo sprite từ spritesheet Phát âm Transform Rigidbody2D Box2DCollider Circle2DCollider 4.1.2 Danh sách tính phát triển • Kéo thả o Mơ tả: Người dùng kéo thả game object trực tiếp lên hình cách trực quan thay phải code vị trí phải vào code set vị trí o Hình ảnh minh họa: • • Xử lý va chạm định luật vật lý o Mơ tả: Các game object có thể va chạm với vật thể khác chịu định luật vật lý như: lực, trọng lực (lực hút trái đất), vận tốc, phản lực, 2D Animation o Mô tả: Engine hỗ trợ tạo 2D Animation đơn giản theo dạng frame by frame o Ví dụ minh họa: 18 • Tạo sprite từ spritesheet o Mơ tả: Từ spritesheet tách thành nhiều sprite nhằm hỗ trợ cho việc lưu trữ nguyên liệu cho game o Ví dụ minh họa: • Phát âm o Mơ tả: Engine hỗ trợ phát âm trị chơi o Hình ảnh minh họa: • Transform o Mơ tả: Engine hỗ trợ component quan trọng Transform Component hỗ trợ lưu trữ vị trí, scale (độ co), rotation (độ quay), zIndex (sắp lớp layer) o Hình ảnh minh họa: 19 • Rigidbody2D: o Mơ tả: Engine hỗ trợ component quan trọng khác Rigidbody2D Nó kiểm sốt game object có gắn mơ môi trường vật lý chịu tác động định luật vật lý o Hình ảnh minh họa: • Box2DCollider Circle2DCollider o Mơ tả: Đây component quan trọng khác, hỗ trợ cho việc xử lý va chạm Box2DCollider hỗ trợ cho việc tạo vùng va chạm vật thể có hình khối, hình chữ nhật Cịn Circle2DCollider hỗ trợ cho việc tạo vùng va chạm vật thể có hình cầu, hình trịn o Hình ảnh minh họa: 20 ... tài ? ?Tìm hiểu OpenGL thiết kế 2D Game Engine? ?? để làm đề tài cho môn Đồ án 1.2 Mục tiêu đồ án 1.2.1 Yêu cầu nghiên cứu • Hiểu khái niệm OpenGL • Hiểu nắm rõ kiến thức, quy trình phát triển 2D Game. ..BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM BÁO CÁO ĐỒ ÁN TÌM HIỂU VỀ OPENGL VÀ THIẾT KẾ 2D GAME ENGINE Giảng viên hướng dẫn Sinh viên... tạo game dựa vào Game Engine ➢ Bước 1: Tìm kiếm nguyên liệu tạo thành game sprite, âm ➢ Bước 2: Đưa nguyên liệu vào game engine ➢ Bước 3: Tiến hành tạo game object game ➢ Bước 4: Gắn component vào