Tải bản đầy đủ (.pdf) (29 trang)

Đồ án tìm hiểu về opengl và thiết kế 2d game engine

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (974.72 KB, 29 trang )

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
Sinh viên thực hiện 1
Sinh viên thực hiện 2
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 2
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 hiện 1
Sinh viên thực hiện 2
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 2 là 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 và xây dựng. Đồng thời, đây cũng là cơ hội để sinh viên
thực hành những gì đã học trong suốt những năm đại học và học hỏi thêm nhiều kiến thức,
kinh nghiệm và kỹ năng mới phục vụ cho công việc sau này. Hơn hết, đồ án 2 là bước
chuẩn bị cuối cùng để nhóm phát triển lên thành khóa luận tốt nghiệp. Cho nên đây được
xem là thử thách và cũng là cơ hội để sinh viên được rèn luyện, hoàn thiện bản thân bằng
những kĩ năng tích lũy được trong suốt q trình làm đồ án.
Để có thể đi đến đoạn cuối của hành trình là cả sự nỗ lực, cố gắng và kiên trì. Đồng

hành cùng sinh viên vượt qua thử thách này là sự có mặt và giúp đỡ của những người thầy
tận tâm trong cơng việc.
Nhóm xin chân thành cảm ơn cô Thái Thị Hàn Uyển đã tận tình giúp đỡ nhóm em
hồn thành đồ án 2 của mình. Chính nhờ những sự góp ý, động viên của cơ đã giúp đồ án
của nhóm được hồn thiện và chuyên nghiệp nhiều hơn. Bên cạnh đó, nhóm đã học hỏi
được rất nhiều kiến thức, kinh nghiệm và bài học thú vị trong q trình làm khố luận, đó
sẽ là những hành trang hữu ích cho nhóm sau này.
Nhóm cũng xin chân thành cảm ơn các anh chị, bạn bè đã giúp đỡ nhóm trong q
trình thực hiện đồ án. Nhờ mọi người mà nhóm có nhiều góc nhìn khác nhau về đề tài đang
làm, từ đó giúp hồn thiện đồ án của nhóm. Một lần nữa, nhóm xin chân thành cảm ơn cô
và mọi người.

3


Lời nhận xét của giảng viên hướng dẫn
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………

………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………
………………………………………………………………………………………………………

4



Mục lục
Lời cảm ơn ...................................................................................................................................... 3
Lời nhận xét của giảng viên hướng dẫn .......................................................................................... 4
Mở đầu ............................................................................................................................................ 7
Chương 1. Tổng quan ..................................................................................................................... 8
1.1

Lý do chọn đề tài .............................................................................................................. 8

1.1.1 Giới thiệu sơ lược về OpenGL ....................................................................................... 8
1.1.2 Giới thiệu sơ lược về Game Engine ............................................................................... 8
1.1.3 Các Game Engine đã có trên thị trường ......................................................................... 8
1.1.4 Lý do lựa chọn đề tài ..................................................................................................... 9
1.2 Mục tiêu đồ án .................................................................................................................... 10
1.2.1 Yêu cầu về nghiên cứu ................................................................................................. 10
1.2.2 Yêu cầu về tính năng sản phẩm ................................................................................... 10
1.2.3 Yêu cầu về 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 2. Cơ sở lý thuyết ............................................................................................................ 11
2.1 Cách một 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 là gì? .............................................................................................................. 11
2.2.2 OpenGL hoạt động như thế nào? ................................................................................. 11

2.2.3 Lịch sử hình thành, các phiên bản của OpenGL .......................................................... 12
2.2.4 Đối thủ cạnh tranh của OpenGL .................................................................................. 13
2.2.5 Tại sao cần có OpenGL? .............................................................................................. 13
2.2.6 Tại sao Shader lại chạy nhanh tới mức như vậy? ........................................................ 13
2.3 Game Engine ....................................................................................................................... 15
5


2.3.1 Game Engine là gì? ...................................................................................................... 15
2.3.2 Mục đích ra đời ............................................................................................................ 15
2.3.3 Game Engine trong thời điểm hiện tại ......................................................................... 16
2.3.5 Những thành phần nào cấu thành nên Game Engine ................................................... 16
2.3.6 Quy trình tạo ra game dựa vào Game Engine .............................................................. 16
Chương 3. Thiết kế hệ thống ........................................................................................................ 17
3.1 Kiến trúc hệ thống ............................................................................................................... 17
3.2 Mô tả các thành phần trong hệ thống .................................................................................. 17
Chương 4. Phân tích thiết kế ......................................................................................................... 18
4.1 Phân tích chức năng ............................................................................................................ 18
4.1.1 Bảng tính năng ............................................................................................................. 18
4.1.2 Danh sách các tính năng đã phát triển ......................................................................... 18
4.1.3 Danh sách các tính năng đang trong quá 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 5. 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 quả đánh giá .......................................................................................................... 24
Kết luận ......................................................................................................................................... 25

Hướng phát triển ........................................................................................................................... 26
Cài đặt và sử dụng......................................................................................................................... 27
Phân công công việc ..................................................................................................................... 28
Tài liệu tham khảo ........................................................................................................................ 29

6


Mở đầu
Ngày nay, tốc độ phát triển của nghành Công nghệ thơng tin phải nói là nhanh đến
chóng mặt. từ những bước ban đầu chỉ dùng để tính tốn, xem tin tức, lưu trữ một số
thông tin quan trọng và cho đến bây giờ, nó gần như cho phép con người có thể đi vào
một thế giới quan với những thao tác gõ phím đấp chuột là có thể xây dựng nên một
Game đơn giản như là Mario, Pinball, …. Một phần tạo nên sự thành công ấy là công
nghệ OpenGL. OpenGL là viết tắt cho "Open Graphics Library" và nó được dùng rất
nhiều trong ngơn ngữ máy tính.
Bên cạnh sự phát triển nhanh chóng ấy, xu hướng có thể tạo một tựa Game đơn giản
đang dần được mọi người u thích quan tâm. Và chúng ta có thể ngày nay có rất nhiều
phần mềm giúp con người tạo được những tựa Game từ đơn giản đến nâng cao. Đó là lí
do mà chúng em tìm hiểu về cơng nghệ OpenGL và làm nên phần mềm công cụ giúp
thiết kế Game 2D một cách dễ dàng dễ hiểu cho người dùng.
Các cơng việc chính mà phần mềm hỗ trợ để giúp cho việc phát triển game một cách
dễ dàng hơn là: Hỗ trợ render hình ảnh với FPS cao, kéo thả các vật thể trong game, dễ
dàng thêm các component cho vật thể trong game, hỗ trợ phát âm thanh, tạo animation,...

7


Chương 1. Tổng quan
1.1 Lý do chọn đề tài

1.1.1 Giới thiệu sơ lược về OpenGL
OpenGL là viết tắt của “Open Graphics Library”, là một API đa nền tảng, đa ngôn ngữ
cho việc render đồ họa 2D và 3D.
OpenGL xử lý các phép tính đồ họa trực tiếp trên GPU thay vì CPU, điều này làm cho
giảm các cơng việc cực nhọc trên GPU, từ đó làm cho đồ họa được render nhanh hơn.
1.1.2 Giới thiệu sơ lược về Game Engine
Game Engine là một phần mềm dùng để xây dựng và thiết kế trị chơi điện tử. Hình
dung một cách đơn giản thì game engine cung cấp cho các nhà sản xuất game những nguyên
liệu cơ bản để từ đó họ sẽ dễ dàng hơn trong việc phát triển game của mình.
Lợi ích của Game Engine:
• Tạo ra game mà hạn chế hoặc khơng sử dụng lập trình
• Tiết kiệm thời gian, cơng sức và tiền bạc
• Đồ họa chân thực
• Hỗ trợ đa nền tảng
1.1.3 Các Game Engine đã có trên thị trường
Hiện nay có rất nhiều Game Engine trên thị trường, đây là một số game engine nổi bật:
• Unity
• Unreal Engine
• CryEngine
• Coco’s Creator
• Amazon Lumberyard
• Godot
• GameMaker: Studio
Unity
Unity là một trong số những game engine phổ biến nhất trên toàn thế giới được phát
triển bởi Unity Technologies. Chúng ta có thể dễ dàng nhìn thấy một game được phát triển
bởi Unity. Nó cũng được sử dụng để phát triển game trên điện thoại di động. Unity là một
game engine đa nền tảng cho phép các nhà phát triển tạo ra nội dung 3D một cách thuận
tiện. Nó hỗ trợ cả nội dung 2D và 3D cùng với việc phát triển VR và AR. Unity có một cộng
đồng rộng lớn, và có Assets Store của riêng mình, nơi cung cấp những packages miễn phí và

trả phí. Nó hỗ trợ cho Windows, Mac, Linux, Android, iOS,… Một số game được phát triển
bởi Unity: Temple Run, Assassin’s Creed Identity,…
Unreal Engine
Unreal Engine cũng là một trong số những game engine phổ biến nhất trên toàn thế giới
được phát triển bởi Epic Games. Nó là một game engine đa nền tảng. Game được tạo ra bởi
Unreal Engine được hỗ trợ trên Microsoft Windows, macOS, Linux, SteamOS, HTML5,
iOS, Android, Nintendo Switch, PlayStation 4, Xbox One. Nó có một Market của riêng
mình, nơi mà các packages có thể được mua. Ngồi ra, đối với những chương trình nặng về
8


đồ họa, nó u cầu một máy tính mạnh hơn những engine khác như Unity. Một số game
được làm bởi Unread Engine: Fornite, Batman Arkham City,…
CryEngine
Được phát triển bởi CryTek. CryEngine là một trình chỉnh sửa Sandbox 1đầy đủ tính
năng dùng để phát triển cho hầu hết nền tảng chính bao gồm: Xbox, PlayStation, PC và
Oculus. Một số game được phát triển bởi CryEngine: War of Rights, Last Kingdom,…
Coco’s Creator
Nó là một công cụ tập trung vào việc tạo nội dung được phát triển bởi Xiamen; nó có
một bộ các tính năng mạnh mẽ và rất thân thiện với người dùng. Đây là một cơng cụ phát
triển trị chơi đa nền tảng hỗ trợ nhiều nền tảng khác nhau, bao gồm web, iOS, Android,
Windows và Mac. Nó hỗ trợ cả phát triển trò chơi 2D và 3D. Họ cũng cung cấp các giải
pháp khác như Cocos 2D và Cocos 2Dx. Một số game được phát triển bởi Coco’s Creator:
Magic Rush, Ark of Conquest, Idle Heroes,…
Amazon Lumberyard
Được phát triển bởi Amazon. Nó chủ yếu được sử dụng để phát triển game 3D. Nó hỗ
trợ chế độ xem trước VR (VR preview mode), kịch bản trực quan (visual script) và tích hợp
Twitch của Adobe Photoshop. Amazone Lumberyard hỗ trợ phát triển game online nhiều
người chơi một cách dễ dàng. Nó sử dụng C++ làm ngơn ngữ lập trình chính. Một số game
được phát triển bởi Amazon Lumberyard: New World, Star Citizen,…

Godot
Godot là một Game Engine sử dụng miễn phí, được mã nguồn mở thông qua giấy phép
MIT. Godot là một công cụ phát triển mã nguồn mở chạy trên máy tính Windows, Linux và
Mac. Công cụ hỗ trợ cả khả năng 2D và 3D, và nó có trình chỉnh sửa hình ảnh và hệ thống
cảnh linh hoạt để đưa ra tiến trình trị chơi. Ngồi ra, Godot sử dụng ngơn ngữ GDScript, là
một ngơn ngữ lập trình cấp cao có cú pháp khá giống với Python. Một số game được phát
triển bởi Godot: Kingdoms of the Dump, Hardcored,…
GameMaker: Studio
Được phát triển bởi Yoyo, Đây là một nền tảng phát triển trò chơi 2D khơng u cầu
kinh nghiệm hoặc kiến thức lập trình. Thay vào đó, người dùng có thể “point and click” để
tạo trò chơi nhanh hơn nhiều so với viết mã bằng ngơn ngữ mẹ đẻ. Nhìn chung, cơng cụ này
rất thân thiện với người mới bắt đầu và mở ra khả năng phát triển trò chơi cho tất cả mọi
người. Một số game được phát triển bưởi GameMaker: Undertale, Hotline Miami,…
1.1.4 Lý do lựa chọn đề tài
OpenGL là một kiến thức cực kỳ quan trọng mà bất kỳ một nhà phát triển game nào
cũng cần phải nắm rõ. Đồng thời 2D Game Engine cũng là một đề tài mà một người mới bắt
1

Sandbox là một thế giới ảo, nơi người chơi có thể xây dựng, sở hữu và kiếm tiền từ trải nghiệm chơi game của họ
trên blockchain Ethereum

9


đầu tìm hiểu về lập trình game cũng nên tìm hiểu. Vì nó cũng cấp cho những người mới rất
nhiều kiến thức, thuật ngữ quan trọng.
Với định hướng của cả nhóm và mong muốn thử thách chính mình, chúng em quyết định
chọn đề tài “Tìm hiểu về OpenGL và thiết kế 2D Game Engine” để làm đề tài cho môn Đồ
án 2.


1.2 Mục tiêu đồ án
1.2.1 Yêu cầu về nghiên cứu
• Hiểu những khái niệm cơ bản về OpenGL
• Hiểu và nắm rõ các kiến thức, quy trình phát triển 2D Game Engine
1.2.2 Yêu cầu về tính năng sản phẩm
Được lấy cảm hứng từ Hazel Engine. Sản phẩm 2D Game Engine cần có những u cầu
về tính năng 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 khi sản xuất game (no-code)
1.2.3 Yêu cầu về kỹ thuật sản phẩm
Sản phẩm 2D Game Engine cần có những yêu cầu về kỹ thuật như sau:
• Giao diện thân thiện, trực quan, hiện đại
• Tính năng 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 mọi vị trí trên màn hình
o OpenAL (Open Audio Library): API hỗ trợ phát âm thanh
o GLFW (Graphics Library Framework): Thư viện hỗ trợ làm việc với
OpenGL, xử lý dữ 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
trong Java
o JOML (Java math library for OpenGL): Hỗ trợ tính tốn các 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ê và muốn tìm hiểu về việc phát triển game, muốn tìm
hiểu xem phía sau của một game là thứ gì.
• Những người muốn tạo ra một game đơn giản

10


Chương 2. Cơ sở lý thuyết
2.1 Cách một game hoạt động
2.1.1 Loop
Về cơ bản, chúng ta có thể hiểu game là một lịng lặp vơ tận, trị chơi được bật lên và chỉ
dừng lại khi nào người chơi tắt chúng đi.
2.1.2 Render
Trị chơi được render lên màn hình với một thông số kỹ thuật là FPS (Frame per second)
thể hiện bao nhiêu khung hình được render trong một giây. Ví dụ ta được giới thiệu rằng game X
có tốc độ render 60 FPS thì ta hiểu rằng trong 1s thì màn hình game sẽ được render 60 lần.
2.1.3 Game object
Hãy tưởng tượng thế giới của chúng ta có những thứ gì: con người, các lồi động vật, các
lồi cây cối, mặt đất, khơng khí, biển cả,… Game cũng vậy, thế giới của game bao gồm nhiêu
thực thể được gọi là Game Object.
2.1.3 Component
Một Game object được cấu thành từ một hoặc nhiều Component. Component được hiểu
là một thành phần cấu tạo nên game object. Ví dụ: Mario thì có hình ảnh của chính nó,
animation, vị trí, vùng va chạm,…
2.1.4 Script
Script (kịch bản) được hiểu rằng là một Component, nhưng nó khác ở chỗ là Component
này do người lập trình viên tạo ra. Ví dụ: Mario sẽ di chuyển theo hướng trái/phải dựa trên phím
bấm của người chơi hay Viên đạn được xuất hiện khi người dùng bắn nó từ tàu con thoi. Những
thứ đó được gọi là Script.


2.2 OpenGL
2.2.1 OpenGL là gì?
OpenGL là viết tắt cho “Open Graphics Library” và nó được sử dụng rất nhiều trong
ngơn ngữ máy tính. OpenGL là một API đa nền tảng, đa ngôn ngữ cho render đồ họa vector 2D
và 3D. API thường được sử dụng để tương tác với bộ xử lý đồ họa (GPU), nhằm đạt được tốc độ
render phần cứng.
2.2.2 OpenGL hoạt động như thế nào?
OpenGL là nơi gần nhất giữa CPU (cái mà những developer chạy các ứng dụng trên các
ngơn ngữ lập trình) và GPU (chip xử lý đồ họa). Vì vậy OpenGL cần phải được hỗ trợ bởi các
nhà sản xuất card đồ họa (vd: NVidia) và được cài đặt bởi những đối tác phát triển hệ điều hành
(giống như Apple hay Microsoft) và cuối cùng OpenGL cho chúng ta một API thống nhất để làm
việc. API này là các "Ngơn ngữ miễn phí" (hoặc hầu như miễn phí). Việc này q thuận lợi vì
nếu sử dụng C hoặc C++ hay thậm chí là Objective-C, Perl, C# hay Javascript hay bất kỳ ngôn
ngữ nào bạn muốn, API của OpenGL luôn giống nhau, xử lý giống nhau, chung chức năng, dịng
lệnh
Đi sâu vào bộ xử lý tính tốn của OpenGL, ta thấy OpenGL sử dụng tính tốn trực tiếp
trên GPU - phần cứng xử lý đồ họa cho máy tính - và sử dụng dấu phảy động (floating points).
CPU (Central Processing Unit) là chip xử lý của máy tính. Còn GPU (Graphics Processing Unit)
là chip xử lý đồ họa. Chip xử lý đồ họa này giúp cho CPU giảm thiểu các công việc nặng nhọc:
11


nó có thể xử lý ảnh trước khi hiện ra màn hình. Hay sâu hơn, những gì OpenGL thực hiện chính
là trên GPU, thay vì tính tốn trên CPU. GPU nhanh hơn rất rất nhiều với các số thực so với
CPU. Đây là lý do cơ bản để các trò chơi 3D chạy nhanh hơn khi có card đồ họa. Đây cũng chính
là lý do cho các phần mềm xử lý 3D chuyên nghiệp giúp chúng ta làm việc với "Software's
Render" (xử lý trên CPU) hoặc "Graphics Card's Render" (xử lý trên GPU). Một vài phần mềm
cũng cho chúng ta một tùy chọn: Có dùng OpenGL hay khơng? Và đó, giờ bạn đã biết rồi. Tùy
chọn đó chính là dành cho việc xử lý sẽ ở trên GPU hay không. Vì vậy, OpenGL sẽ hồn tồn
làm việc với GPU hay không? câu trả lời là không chắc. Chỉ những thao tác xử lý ảnh và vài thứ

khác thôi. OpenGL cho chúng ta rất nhiều chức năng để lưu trữ ảnh, dữ liệu, thông tin trong một
định dạng cụ thể. Những định dạng này được xử lý trực tiếp bởi GPU. Vì vậy OpenGL phụ thuộc
13 vào phần cứng. Nếu phần cứng không hỗ trợ OpenGL, chúng ta không thể sử dụng nó. Quá
buồn! Các phiên bản mới của OpenGL thường xuyên cần những tính năng mới của GPU. Nhưng
cũng đừng lo lắng, OpenGL ln cần những nhà sản xuất tích hợp vào, chúng ta (những
developer - coder) sẽ làm việc trên các phiên bản OpenGL mới chỉ khi thiết bị đã sẵn sàng.
Trong thực tế, tât cả các chip đồ họa hiện tại đều hỗ trợ OpenGL. Vì vậy bạn có thể sử dụng
OpenGL với rất nhiều ngơn ngữ và thiết bị. Thậm chí với Microsoft Windows.
2.2.3 Lịch sử hình thành, các phiên bản của OpenGL
Những năm 1980, việc phát triển phần mềm có thể hoạt động trên nhiều loại phần cứng
đồ họa thực sự là một thử thách. Các nhà phát triển phần mềm đã tùy chỉnh interfaces và drivers
cho từng phần cứng. Điều này gây ra tốn kém và nỗ lực gấp bội Trong những năm đầu thập niên
1990, Silicon Graphics, Inc.(SGI) là công ty dẫn đầu trong lĩnh vực đồ họa 3D cho các máy trạm.
IRIS GL trở thành tiêu chuẩn công nghiệp, được sử dụng rộng rãi hơn PHIGS. Điều này được lý
giải là do IRIS GL dễ sử dụng hơn và vì nó được hỗ trợ chế độ render tức thì. Ngược lại, PHIGS
được coi là khó sử dụng và lỗi thời về chức năng. Đối thủ cạnh tranh của SGI (bao gồm: Sun
Microsystems, Hewlett-Packark, MBI) đã tung ra thị trường các phần cứng 3D được hỗ trợ bởi
extensions theo tiêu chuẩn của PHIGS. Điều này gây áp lực khiến cho SGI phải mã nguồn mở
một phiên bản IRIS GL như một tiêu chuẩn công khai được gọi là Open GL vào năm 1992.
Các phiên bản:

Phiên bản

Ngày ra mắt

1.0 June 30, 1992
1.1 1995
1.2
March 16, 1998
1.2.1

1.3
1.4
1.5
2.0

October 14, 1998
August 14, 2001
July 24, 2002
July 29, 2003
September 7, 2004

2.1 July 2, 2006
3.0 August 11, 2008
3.1

March 24, 2009

Tính năng
First release
Texture objects, Vertex Arrays
3D textures, BGRA and packed pixel formats, introduction of
the imaging subset useful to image-processing applications
A concept of ARB extensions
Multitexturing, multisampling, texture compression
Depth textures, GLSlang
Vertex Buffer Object (VBO), Occlusion Queries
GLSL 1.1, MRT, Non Power of Two textures, Point Sprites,
Two-sided stencil
GLSL 1.2, Pixel Buffer Object (PBO), sRGB Textures
GLSL 1.3, Texture Arrays, Conditional rendering, Frame

Buffer Object (FBO)
GLSL 1.4, Instancing, Texture Buffer Object, Uniform Buffer
Object, Primitive restart
12


3.2 August 3, 2009
3.3
March 11, 2010
4.0

March 11, 2010

4.1 July 26, 2010
4.2 August 8, 2011
4.3 August 6, 2012

4.4
July 22, 2013

4.5
August 11, 2014

4.6
July 31, 2017

GLSL 1.5, Geometry Shader, Multi-sampled textures
GLSL 3.30, Backports as much function as possible from the
OpenGL 4.0 specification
GLSL 4.00, Tessellation on GPU, shaders with 64-bit

precision
GLSL 4.10, Developer-friendly debug outputs, compatibility with
OpenGL ES 2.0
GLSL 4.20, Shaders with atomic counters, draw transform feedback
instanced, shader packing, performance improvements
GLSL 4.30, Compute shaders leveraging GPU parallelism, shader
storage buffer objects, high-quality ETC2/EAC texture compression,
increased memory security, a multi-application robustness extension,
compatibility with OpenGL ES 3.0
GLSL 4.40, Buffer Placement Control, Efficient Asynchronous Queries,
Shader Variable Layout, Efficient Multiple Object Binding, Streamlined
Porting of Direct3D applications, Bindless Texture Extension, Sparse
Texture Extension
GLSL 4.50, Direct State Access (DSA), Flush Control, Robustness,
OpenGL ES 3.1 API and shader compatibility, DX11 emulation
features
GLSL 4.60, More efficient geometry processing and shader execution,
more information, no error context, polygon offset clamp, SPIR-V,
anisotropic filtering

2.2.4 Đối thủ cạnh tranh của OpenGL
OpenGL ra đời bản đầu tiên vào 1992, cùng thời điểm đó, Microsoft đã có Windows 3.
Như Microsoft ln tin rằng "khơng gì được tạo ra, mọi thứ được copy", Microsot đã có gắng
copy OpenGL trong những gì họ gọi là DirectX và được giới thiệu lần đầu năm 1995 trong
Windows 95 tương ứng.
2.2.5 Tại sao cần có OpenGL?
Đơn giản là chúng ta cần một màn hình của chúng ta render hình ảnh thật mượt mà, đặc
biệt là game, thứ yêu cầu render nhanh đến mức 60FPS hay 120FPS.
2.2.6 Tại sao Shader lại chạy nhanh tới mức như vậy?
Hãy tưởng tượng CPU là một dây chuyền công nghiệp lớn, và mọi tác vụ đi qua dây

chuyền là một khâu. Có vài khâu đồ sộ hơn các khâu khác, tức là chúng cần nhiều thời gian và
năng lượng hơn để xử lý. Ta nói chúng cần nhiều năng lực xử lý hơn. Kiến trúc của máy tính
khiến mỗi khâu phải thực hiện tuần tự; khâu này kết thúc rồi mới đến khâu tiếp theo. Máy tính
hiện đại thường có tới 4 bộ xử lý tương tự như 4 dây chuyền sản xuất này, lần lượt thực thi từng
tác vụ nhỏ. Mỗi dây chuyền nhỏ trong đó gọi là một thread.

13


Các trò chơi điện tử và các ứng dụng đồ hoạ cần nhiều năng lực xử lý hơn hẳn các phần
mềm khác. Vì các nội dung đồ hoạ của chúng yêu cầu thực hiện rất nhiều phép toán, cho từng
điểm ảnh một. Mỗi điểm ảnh trên màn hình đều phải được tính đến, cịn trong các trị chơi 3
chiều thì cả các vật thể lẫn các góc camera cũng phải được tính ln.
Quay trở lại phép so sánh về dây chuyền và tác vụ. Mỗi điểm ảnh trên màn hình đại diện
cho 1 tác vụ nhỏ. Bản thân từng tác vụ không phải là vấn đề lớn với CPU, nhưng (vấn đề ở đây
là) các tác vụ bé xíu này lại phải được thực thi cho từng điểm ảnh trên cả màn hình. Có nghĩa là
trên màn hình cũ có độ phân giải 800x600, có tới 480.000 điểm ảnh cần phải được xử lý mỗi
khung hình, tương đương với 14.400.000 phép tính mỗi giây! Đúng thế! Đó chính là điều khiến
bộ vi xử lý bị quá tải. Còn ở màn hình retina thời hiện đại có độ phân giải 2880x1800 hiển thị 60
khung hình một giây, thì số phép tính mỗi giây lên tới 311.040.000. Bằng cách nào mà các kỹ sư
đồ hoạ giải quyết được vấn đề này?

Đây là lúc mà xử lý song song trở thành một giải pháp tốt. Thay vì phải trang bị vài bộ vi
xử lý to lớn và mạnh mẽ, hoặc các dây chuyền, sẽ là thông minh hơn nếu để cho hàng loạt các bộ
vi xử lý tí hon chạy song song. Và đó chính là việc mà các bộ xử lý đồ hoạ (GPU) làm.

14


Hình dung các bộ vi xử lý tí hon là hàng loạt những ống xếp dọc và kết lại với nhau thành

một cái bàn, còn dữ liệu của mỗi điểm ảnh là một quả bóng bàn. Nhét 14.400.000 quả bóng bàn
vào một ống đơn lẻ trong một giây sẽ rất khó. Nhưng khi rất nhiều ống xếp thành hàng 800x600
thì có thể đưa 480.000 quả bóng bàn chui qua tới 30 lần một giây một cách dễ dàng. Độ phân
giải cao hơn cũng tương tự - phần cứng càng có năng lực xử lý song song thì khối lượng cơng
việc mà nó có thể giải quyết lại lớn hơn.
Một "siêu năng lực" khác của GPU là các hàm Toán học được tối ưu bằng phần cứng,
nên các phép toán phức tạp sẽ được xử lý trực tiếp trên phần cứng thay vì phần mềm. Điều đó có
nghĩa là các phép tính lượng giác và ma trận sẽ được tính cực kỳ nhanh - như điện luôn.

2.3 Game Engine
2.3.1 Game Engine là gì?
Game engine, hay cịn được gọi là Phần mềm game, là một phần mềm dùng để xây dựng
và thiết kế một trị chơi điện tử (video game). Hình dung một cách đơn giản, game engine cung
cấp cho các nhà làm game những nguyên liệu cơ bản để từ đó họ sẽ dễ dàng hơn trong việc phát
triển game của mình. Một game engine thơng thường bao gồm kết xuất đồ họa cho các hình ảnh
2D hay 3D, cơng cụ vật lý, hoạt hình, trí tuệ nhân tạo cho những nhân vật trò chơi, phân luồng,
tạo dòng dữ liệu xử lý, quản lý bộ nhớ, dựng ảnh đồ thị,... Từ 1 game engine có thể phát triển ra
rất nhiều các game khác nhau. Đây là giải pháp tiết kiệm nhiều thời gian và chi phí cho các nhà
sản xuất.
2.3.2 Mục đích ra đời
Game engine ra đời đã cung cấp cho các nhà phát triển game một bộ công cụ nền để phát
triển và có thể tái sử dụng từng phần. Từ một game engine, người ta có thể phát triển thêm vơ số
các game khác nhau. Nó đã giải quyết bài tốn phát triển vơ cùng khó nhằn và tốn kém nhiều
thời gian, chi phí cũng như cơng sức của con người. Đặc biệt trong ngành công nghiệp game một ngành vơ cùng cạnh tranh và có tốc độ phát triển theo cấp số nhân, thì những sản phẩm trí
tuệ lại mang tính sống cịn. Game engine ra đời với mục đích giải quyết những yêu cầu cấp thiết
về giảm thiểu chi phí và sáng tạo, để từ đó giảm giá thành và tiếp tục duy trì sức hút với người
tiêu dùng.
15



2.3.3 Game Engine trong thời điểm hiện tại
Game engine hiện nay vẫn đang liên tục được phát triển để đáp ứng được nhu cầu của
người dùng. Các ứng dụng của nó đã mở rộng và vượt ra khỏi biên giới giải trí đơn thuần. Ứng
dụng này bao gồm mơ phỏng, huấn luyện ảo, y tế ảo, và mô phỏng các ứng dụng quân sự,…
Các game engine hiện nay được phát triển trên ngơn ngữ lập trình như Java và C# hay
.NET, Python. Gần đây, Microsoft đã đi đầu trong việc thúc đẩy các nhà phát triển game độc lập
phát triển game với ít 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 cả các game trên hệ máy Xbox và các sản phẩm liên quan.
2.3.5 Những thành phần nào cấu thành nên Game Engine
Những thành phần cấu thành nên một 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 ra game dựa vào Game Engine
➢ Bước 1: Tìm kiếm các nguyên liệu tạo thành game như sprite, âm thanh
➢ Bước 2: Đưa các nguyên liệu đó vào game engine
➢ Bước 3: Tiến hành tạo ra các game object trong game
➢ Bước 4: Gắn component vào các game object, tạo script nếu cần thiết
➢ Bước 5: Chạy thử trên game engine
➢ Bước 6: Build ra thành file dựa trên nền tảng hướng tới


16


Chương 3. Thiết kế hệ thống
3.1 Kiến trúc hệ thống

3.2 Mô tả các thành phần trong hệ thống
Thành phần

STT

1 Game Objects
2 Components
3 Scripts

4 Engine App

5 Renderer
6 Physics

7 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à một kịch bản cho game object hoạt động, nó được
coi như là một component gắn vào một hoặc nhiều
game object
Nơi để người dùng kéo thả, tạo ra game, set các

thuộc tính, component, tạo ra scripts,… thực hiện các
thao tác đối với game mà họ muốn tạo ra
Thực hiện vẽ các hình ảnh, sprite, texture trong game
Game là một thế giới, và thế giới thì cần có áp dụng
định luật vật lý. Physics hỗ trợ tạo ra các định luật và
áp dụng nó trong 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 4. Phân tích thiết kế
4.1 Phân tích chức năng
4.1.1 Bảng tính năng

Tên tính năng

STT
1
2
3
4
5
6
7
8


Ghi chú

Kéo thả
Xử lý va chạm và các định luật vật lý
2D Animation
Tạo sprite từ spritesheet
Phát âm thanh
Transform
Rigidbody2D
Box2DCollider và Circle2DCollider

4.1.2 Danh sách các tính năng đã phát triển
• Kéo thả
o Mơ tả: Người dùng có thể kéo và thả các game object trực tiếp lên màn hình một
cách rất trực quan thay vì 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 và các định luật vật lý
o Mơ tả: Các game object có thể có thể va chạm với các vật thể khác và chịu các
đị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 ra các 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ừ một spritesheet có thể được tách ra 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 thanh
o Mơ tả: Engine hỗ trợ phát âm thanh trong trị chơi
o Hình ảnh minh họa:



Transform
o Mơ tả: Engine hỗ trợ một component rất quan trọng đó là Transform. Component
này 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ợ một component quan trọng khác là Rigidbody2D. Nó sẽ
kiểm sốt game object nào có gắn nó được mơ phỏng trong một mơi trường vật lý
và chịu tác động của những định luật vật lý.

o Hình ảnh minh họa:



Box2DCollider và Circle2DCollider
o Mơ tả: Đây là 2 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 đối với các 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 đối với
các vật thể có hình cầu, hình trịn
o Hình ảnh minh họa:

20



×