Tải bản đầy đủ (.docx) (59 trang)

Nghiên cứu một số kỹ thuật tạo cảnh trong game. Ứng dụng xây dựng game Sonic Run

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 (1.6 MB, 59 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
_______________________________

ĐỒ ÁN

TỐT NGHIỆP ĐẠI HỌC
Đề tài:

NGHIÊN CỨU MỘT SỐ KỸ THUẬT TẠO
CẢNH TRONG GAME. ỨNG DỤNG XÂY
DỰNG GAME SONIC RUN

Sinh viên thực hiện:

VŨ HỮU TRUNG KIÊN
Lớp KTPM 1 – K6

Giảng viên hướng dẫn:

THS. NGÔ ĐỨC VĨNH

Cán bộ phản biện:
Hà Nội, 5/2015


LỜI MỞ ĐẦU
Sự phát triển của công nghệ mô phỏng và giải trí, ngày càng có nhiều ứng dụng đồ họa và
trò chơi 3D được xây dựng nhằm phục vụ mục đích nghiên cứu, mô phỏng và giải trí… Cùng với đó,
công nghệ phần cứng cũng phát triển rất nhanh, đặc biệt là các phần cứng xử lý đồ họa có thể lập
trình được và các ngôn ngữ lập trình trên các phần cứng này. Tuy nhiên, để xây dựng một ứng dụng


đồ họa và trò chơi 2D đảm bảo các yêu cầu: hỗ trợ một dải phần cứng và phần mềm (cụ thể là hệ
điều hành) lớn, có khả năng lựa chọn API đồ họa mức thấp (OpenGL, OpenGL ES ), dễ dàng quản lý
và phát triển các tài nguyên. Từ những yêu cầu trên, nhóm em đã quyết định lựa chọn đề tài
“Nghiên cứu một số kỹ thuật tạo cảnh trong game. Ứng dụng xây dựng game Sonic Run”.
Xuất phát từ thực tế đó, đề tài nàytập trung nghiên cứu xây dựng các kỹ thuậttạo cảnh
trong game. Tập trung nghiên cứu các kỹ thuật, đưa ra được các phương pháp tối ưu để tạo cảnh,
sau đó áp dụng vào game thực tế. Khi phát triển các ứng dụng game 2D, người lập trình không cần
phải quan tâm đến quá trình quản lý tài nguyên, cũng như xử lý đồ họa ở mức thấp bên dưới. Thay
vào đó, họ chỉ cần tập trung vào quản lý ở mức lôgíc các thành phần của ứng dụng, hoặc thêm mới
các thành phần dựa trên thành phần cơ sở do hệ thống cung cấp.
Đến thời điểm hiện tại, nhóm đã hoàn thành việc nghiên cứu xây dựng cảnh và đã ứng
dụng thành công vào game Sonic Run. Do chưa có nhiều kinh nghiệm trong việc xây dựng game
nên vẫn còn một vài thiếu sót. Trong thời gian tới, nhóm sẽ tiếp tục để phát triển hoàn thiện hơn
nữa.


MỤC LỤC


DANH SÁCH HÌNH VẼ


DANH SÁCH BẢNG BIỂU


DANH SÁCH TỪ VIẾT TẮT
Từ viết tắt
VS
FS
AI

HUD
MMOG
MMORPG
MMORTS
RAM
GPU
RGBA

Từ đầy đủ
Vertex Shader
Fragment Shader
Artificial Intelligence
Head-up Display
Massively Multiplayer Online Game
Massively Multiplayer Online Role-Playing Game
Massively Multiplayer Online Real-Time Game
Random Access Memory
Graphics Processing Unit
Red Green Blue Alpha


PHẦN 1: MỞ ĐẦU
Tên đề tài
Nghiên cứu một số kỹ thuật tạo cảnh trong game. Ứng dụng xây dựng game Sonic Run.

Lý do chọn đề tài
Sự phát triển nhảy vọt của công nghệ thông tin đã tác động mạnh mẽ đến các hoạt động
xã hội, làm thay đổi một cách sâu sắc đến phong cách làm việc của một xã hội. Công nghệ thông tin
đã trở thành trụ cột chính của nền kinh tế tri thức. ứng dụng công nghệ thông tin vào các hoạt
động giải trí của xã hội được nhiều người quan tâm. Phạm vi ứng dụng của công nghệ thông tin

ngày càng mở rộng trên nhiều lĩnh vực: quản lý các hoạt động của con người và xã hội, tự động
hóa, truyền thông, giải trí…
Đời sống của con người ngày càng được nâng cao. Bên cạnh đó nhu cầu về vui chơi giải trí
của con người ngày càng được đòi hỏi. Các trò chơi được thiết kế bằng máy tính đã ra đời và đang
trên đà phát triển để đáp ứng những nhu cầu đòi hỏi đó của con người. Game từ lâu đã là một dịch
vụ giải trí rất phổ biến đối với người dùng Việt Nam. Dịch vụ game có thể được phát triển trên
nhiều nền tảng như PC, mobile, browser... Cùng với game PC và game browser, ngày nay, game
dành cho các thiết bị di động cũng đang thực sự bùng nổ.
Trong phạm vi đồ án của mình, em xin trình bày một số kiến thức cơ bản về quy trình thiết
kế và xây dựng game, cách sử dụng các engine game phổ biến và cách xây dựng game SonicRun
trên nền tảng Win32. Game thuộc thể loại Endless Run với nội dung đơn giản được áp dụng các kỹ
thuật xây dựng hình ảnh bằng OpenGL ES 2.0 và mô phỏng vật lý bằng thư viện Box2D, tạo chữ
chạy bằng FreeType2 cũng như âm thanh 3D sống động bằng irrKlang để làm cho game thêm hấp
dẫn và thú vị.

Mục đích của đề tài
Đề tài “Nghiên cứu một số kỹ thuật tạo cảnh trong game. Ứng dụng xây dựng game
Sonic Run” Nhằm tìm hiểu về quy trình thiết kế game, các kỹ thuật tạo cảnh trong game để áp
dụng vào xây dựng game hoàn chỉnh.

Mục tiêu của đề tài





Tìm hiểu về quy trình thiết kế và xây dựng game
Tìm hiểu về các engine làm game chính
Tìm hiểu về một số kỹ thuật tạo cảnh trong game
Áp dụng vào ây dựng game Sonic Run


Bốc cục đề tài
Nội dung đề tài được chia làm 4 chương chính
CHƯƠNG 1: NỘI DUNG NGHIÊN CỨU
Trong chương này sẽ giới thiệu, trình bày hiểu biết về quy trình phát triển game, các
engine làm game, và các thuật toán sinh map.
CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ GAME SONICRUN


Trình bày quy trình hoàn chỉnh từ phân tích đến thiết kế game SonicRun, chi tiết thiết kế
các thuật toán có trong game.
CHƯƠNG 3: CÀI ĐẶT THỬ NGHIỆM
Từ các thiết kế ở trên, cài đặt, xây dựng game trên hệ điều hành Win32 sử dụng IDE
VisualStudio C++ 2008.
CHƯƠNG 4: KẾT LUẬN
Tổng kết những thành quả đã đạt được trong khi làm đồ án, phương hướng phát triển tiếp
của game hiện có.


PHẦN 2: NỘI DUNG
CHƯƠNG 1: NỘI DUNG NGHIÊN CỨU
1.1 Giới thiệu chung
Phát triển video game cũng như các ngành giải trí khác, thông thường là một lĩnh vực liên
ngành. Các nhà phát triển video game, như cách gọi phổ biến trong ngành công nghiệp, chủ yếu
bao gồm các lập trình viên và các nhà thiết kế đồ họa. Qua nhiều năm,với sự mở rộng ngành công
nghiệp này, nó bao gồm hầu hết mọi loại kỹ năng mà có thể thấy để làm một bộ phim hoặc chương
trình tivi, bao gồm thiết kế âm thanh, âm nhạc, và các loại kỹ thuật khác; và cũng đồng thời có
những kỹ năng chuyên ngành cho video game, như thiết kế game v.v... Tất cả đều được quản lý và
điều hành bởi nhà sản xuất.
Thời kỳ đầu của ngành công nghiệp game, thông thường thì chỉ có một người thực hiện tất

cả vai trò cần thiết để tạo ra một game. Nhưng với các hệ máy ngày càng phức tạp và mạnh mẽ
hơn, thì cần các đội ngũ phát triển lớn hơn để thiết kế hết được các phần như đồ họa, lập trình, kỹ
thuật điện ảnh.... Điều này không có nghĩa là thời kỳ một người làm toàn bộ một game đã kết thúc,
vẫn có thể thấy các game do một người làm ở thị trường các game casual và các game cho hệ máy
cầm tay nơi các game nhỏ hơn đang phổ biến do giới hạn phần cứng như giới hạn bộ nhớ hay
thiếu khả năng dựng hình 3D chuyên dụng trên hệ máy đó(ví dụ như điện thoại di động hay PDA).
Với sự lớn mạnh về quy mô của các đội ngũ phát triển trong ngành công nghiệp, vấn đề
kinh tế cũng tăng theo. Các studio phát triển game cần tiền đủ để trả một mức lương cạnh tranh
với studio khác cho các nhân viên để thu hút và giữ lại các tài năng lớn của mình, trong khi các nhà
phát hành lại không ngừng tìm kiếm cách giữ mức giá thấp để nhằm duy trì lợi nhuận với khoản
đầu tư của họ. Thông thường, một đội ngũ phát triển game trên hệ console có thể có số lượng
người nằm trong khoảng từ 5 tới 50, có lúc còn lên đến 100. Tháng 5/2009, dự án game Assasin's
Creed II còn công bố đội ngũ phát triển của mình lên tới 450. Sự tăng trưởng về quy mô của đội
ngũ phát triển kết hợp với áp lực lớn khi phải hoàn thành dự án kịp ra thị trường đồng thời áp lực
giảm bớt chi phí sản xuất đã dẫn đến sự ra đời của hàng loạt các sản phẩm game phải lùi ngày phát
hành hoặc phát hành thiếu hoàn chỉnh.
Rất nhiều các game sản xuất cho hệ PC được thiết kế với tiêu chí cho phép người sử dụng
được chỉnh sửa game. Những bản chỉnh sửa (mod) này có thể tăng thêm khả năng chơi lại và sự
thú vị cho game. Các hãng phát triển nổi tiếng như id Software, Valve Software, Crytek, Bethesda,
Epic Games và Blizzard Entertainment đưa game của họ với một số công cụ đã dùng để phát triển
game đó, kèm theo một hướng dẫn để hỗ trợ các nhà phát triển các bản mod (phần lớn là các
game thủ yêu thích game). Mạng Internet cung cấp một nơi không tốn kém để quảng cáo và phân
phối các bản chỉnh sửa, và chúng cũng có thể là yếu tố đóng góp vào thành công của game. Có thể
thấy rất rõ việc các bản mod khiến game trở nên phổ biến như trường hợp của Counter-Strike là
bản chỉnh sửa của Half-Life.
Ba khu vực sản xuất lớn nhất và cũng là thị trường lớn nhất của video game là: khu vực Bắc
Mỹ (bao gồm Mỹ và Canada), Nhật Bản và Anh Quốc. Các thị trường quan trọng khác bao gồm Úc,
Tây Ban Nha, Đức, Hàn Quốc, México, Pháp và Ý. Cả Ấn Độ và Trung Quốc đều được coi là các thị
trường mới nổi trong ngành công nghiệp game và doanh số được kỳ vọng là sẽ tăng trưởng rõ rệt
trong những năm sắp tới. Và Ailen thì có số lượng người sử dụng video game lớn nhất tính theo

đầu người.


Doanh thu theo hệ máy của các game rất khác nhau ở các thị trường này do thói quen của
người tiêu dùng địa phương. Các khách hàng Nhật Bản thường mua các game console hơn là game
máy tính, với một ưu tiên mạnh mẽ cho các trò chơi phục vụ cho thị hiếu địa phương. Ở Hàn Quốc
(Nam Triều Tiên), game máy tính lại được ưu tiên hơn, đặc biệt là các game nhập vai trực tuyến
nhiều người chơi(MMORPG) và game chiến thuật thời gian thực. Có hơn 20.000 tiệm cafe internet
ở Hàn Quốc nơi game máy tính có thể chơi và trả phí theo giờ.
Tập đoàn NPD (tập đoàn dẫn đầu Bắc Mỹ về nghiên cứu thị trường) đã nghiên cứu thị
trường bán lẻ video game ở Mỹ nhiều năm. Với báo cáo năm 2004 rằng: Phần mềm cho hệ console
và hệ máy cầm tay: $6.2 tỷ, hơn 8% so với năm 2003. Phần cứng và phụ kiện cho hệ console và hệ
cầm tay: $3.7 tỷ, kém 35% so với năm 2003. Doanh số game PC: $1.1 tỷ, kém 15% so với năm 2003.
Game PC là sản phẩm kỹ thuật số được phân phối bằng cả đường trực tiếp hay qua mạng
internet như hệ thống Steam không được theo dõi bởi NPD, và Steam không lên danh sách doanh
thu các game mà đã được tải về qua dịch vụ của mình. Và phân phối trái phép cũng tràn lan trên hệ
PC nên doanh số game bán lẻ cho máy tính cá nhân giảm đáng kể cũng là điều dễ hiểu.
Các con số trên được tính bằng USD, không phải đơn vị. Các đơn vị vận chuyển cho mỗi
danh mục hàng hóa cao hơn nhiều so với số lượng USD thu về đã chỉ ra ở trên, bởi vì nhiều phần
mềm cũng như phần cứng đã giảm giá vào năm 2003. Nhưng với sự ra đời của các thế hệ console
tiếp theo (Xbox 360, PS3, và Wii), các con số này tăng lên nhanh chóng. Ngành công nghiệp game
và điện ảnh giờ đây cũng trở nên gắn bó với nhau, với các Tập đoàn như Sony đã có những thành
công đáng kể trên cả hai. Một số lượng lớn các "phim bom tấn" mùa hè sinh ra các game cùng tên
đi kèm, và thường phát hành cùng với phim để giảm giá thành quảng cáo.
Thị trường toàn cầu cho game console đã trông thấy một sự tăng trưởng trung bình 6,9%
hằng năm và được kỳ vọng là sẽ thu về 34,7 tỉ USD vào năm 2012. Game bán qua mạng dự kiến sẽ
tăng với tốc độ lớn hơn 16,9%, leo thang từ 6,6 tỷ USD trong năm 2008 lên 14,4 tỉ USD năm 2012.
Dự kiến tăng trưởng lớn nhất, tuy nhiên lại nằm ở game trên di động với tăng trưởng đánh giá
khoảng 19%; tăng từ 5.6 tỉ USD lên 13,5 tỉ trong vòng 4 năm.
Cấu trúc một game được chia nhỏ như sơ đồ dưới đây:



Hình 1.1 Cấu trúc một game
1.2 Quy trình thiết kế và xây dựng game
1.2.1 Tổng quan về quy trình thiết kế và xây dựng game
Phát triển game là một quá trình phát triển phần mềm, một trò chơi điện tử như là phần
mềm với nghệ thuật, âm thanh, và gameplay. Phương pháp phát triển phần mềm chính thống
thường không được sử dụng khi phát triển một game. Nếu phát triển trò chơi với phương pháp
phát triển kém có khả năng vượt quá dự toán ngân sách và thời gian, cũng như có chứa một số
lượng lớn các lỗi. Kế hoạch là quan trọng đối với cá nhân. Các dự án và nhóm giống nhau.
Trò chơi phát triển tổng thể không thích hợp với các phương pháp điển hình trong vòng
đời phần mềm, chẳng hạn như các mô hình thác nước.
Một phương pháp được sử dụng để phát triển trò chơi là phát triển nhanh. Nó được dựa
trên mẫu lặp đi lặp lại, một tập hợp con của các phần mềm tạo mẫu .phát triển Agile phụ thuộc
vào thông tin phản hồi và sàng lọc các bước lặp trò chơi với tăng dần tính năng được thiết
lập.Phương pháp này là hiệu quả bởi vì hầu hết các dự án không bắt đầu với một phác thảo yêu
cầu rõ ràng.Một phương pháp phổ biến của sự phát triển phần mềm nhanh nhẹn là Scrum.
Một phương pháp thành công là cá nhân phần mềm (PSP) đòi hỏi phải đào tạo bổ sung
cho nhân viên để nâng cao nhận thức về quy hoạch của dự án.Phương pháp này là tốn kém hơn và
đòi hỏi sự cam kết của các thành viên trong nhóm. PSP có thể được mở rộng với việc lập các đội
(Team) trong khi phát triển quy trình phần mềm, nơi mà các đội là tự kiểm soát mình với một
người đội trưởng (team leader).


Phát triển trò chơi thường liên quan đến sự chồng chéo của các phương pháp này. Ví dụ,
tạo ra tài sản có thể được thực hiện thông qua mô hình thác nước, vì yêu cầu và đặc điểm kỹ thuật
rõ rang, nhưng thiết kế gameplay có thể được thực hiện bằng cách sử dụng mẫu lặp đi lặp lại.
Quá trình thiết kế trò chơi được dựa trên quá trình thiết kế chung nhưng có một quá trình
chỉ tập trung xung quanh khu vực của trò chơi. Các tiêu đề được đặt ra là khác nhau từ những
người trong quá trình thiết kế chung, nhưng họ đều hoạt động hiệu quả trong các bước tương tự,

chia nhỏ hơn nữa và đổi tên thành cho một công việc cụ thể. Toàn bộ quá trình diễn về hình thức
gồm 3 giai đoạn chính với nhau có chứa một tập hợp con của các giai đoạn cụ thể hơn. Các giai
đoạn đó được gọi là tiền sản xuất, sản xuất và sau sản xuất. Như tên cho thấy các quá trình mục
tiêu trọng tâm là việc tạo ra các trò chơi.

Hình 1.2 Quy trình thiết kế và xây dựng game
1.2.2 Quy trình thiết kế và xây dựng game
Những trò chơi thành công thường cần có một sự phối hợp chặt chẽ giữa sự sáng tạo, kỹ
thuật và chiến lược kinh doanh. Một sự cân bằng tốt giữa những yếu tố trên là chìa khóa để thành
công và nếu một trong những yếu tố trên nổi trội lên thì dự án game sẽ gặp vấn đề. Thực tế sự cân
bằng này rất hiếm khi đạt được.

1.2.2.1 Giai đoạn tiền sản xuất
Hay còn gọi là giai đoạn thiết kế. Là một giai đoạn lập kế hoạch của các dự án tập trung vào
ý tưởng và phát triển nội dung cũng như sản xuất các tài liệu thiết kế ban đầu. Các mục tiêu của
phát triển nội dung là để sản xuất rõ ràng và dễ hiểu tài liệu, trong đó mô tả tất cả các nhiệm vụ,
tiến độ và dự kiến cho nhóm phát triển. Các bộ tài liệu được sản xuất trong giai đoạn này được gọi
là kế hoạch sản xuất. Giai đoạn này thường không được tài trợ bởi một nhà xuất bản. Tuy nhiên các
nhà xuất bản tốt có thể yêu cầu các nhà phát triển để tạo ra các kế hoạch trong thời gian trước khi
sản xuất.
Các tài liệu khái niệm có thể được chia thành ba giai đoạn hoặc các tài liệu có high
concept, pitch và concept; Tuy nhiên, không có tiêu chuẩn ngành quy ước đặt tên, ví dụ, cả Bethke
(2003) và Bates (2004) đề cập đến tài liệu pitch là ”đề nghị game”.


Giai đoạn cuối của tiền sản xuất cũng có thể được gọi là bằng chứng của khái niệm, hoặc
đánh giá kỹ thuật khi văn bản trò chơi chi tiết hơn được sản xuất.
Nhà xuất bản đã bắt đầu mong đợi đề xuất trò chơi rộng lớn hơn thậm chí có tính năng
nguyên mẫu có thể chơi được.
Các bước trong giai đoạn tiền sản xuất:











Bước 1: Phân tích tóm tắt (Analysis of Brief/Sector)
Bước 2: Nghiên cứu (ReSearch)
Bước 3: Suy nghĩ ý tưởng (BrandStorming)
Bước 4: Nội dung game (Game Concepts)
Bước 5: Nội dung về đồ họa (Concept Art)
Bước 6: Phát triển bản đồ chơi (Map Development)
Bước 7: Thiết kế cấp phác thảo
Bước 8: Thương lượng

1.2.2.2 Giai đoạn sản xuất
Sản xuất là giai đoạn chính của sự phát triển, khi tài sản và các mã nguồn cho các trò chơi
được sản xuất.
Sản xuất chủ đạo thường được định nghĩa là khoảng thời gian khi dự án được đầy đủ nhân
viên. Các lập trình viên viết mới mã nguồn , các nghệ sĩ phát triển tài sản game, chẳng hạn như,
sprites hoặc mô hình 3D . Kỹ sư âm thanh phát triển hiệu ứng âm thanh và nhạc sĩ phát triển âm
nhạc cho các trò chơi. thiết kế Cấp tạo các cấp, và nhà văn viết đối thoại cho các đoạn cắt cảnh và
NPC .thiết kế game tiếp tục phát triển dựa trên thiết kế của trò chơi trong cả quá trình sản xuất.
Sau khi đã có được văn bản thiết kế game (Game Design Document), trong giai đoạn sản
xuất sẽ phải trải qua các công việc: thiết kế game, lập trình, sản xuất, âm thanh, đồ họa.


Thiết kế game
Nhiều người lầm tưởng rằng ý tưởng cốt truyện là một thiết kế của game. Xây dựng cốt
truyện chỉ là một phần rất nhỏ công việc của nhà thiết kế game. Bộ phận thiết kế game suy nghĩ về
mọi khía cạnh của game như: cốt truyện, góc quay, hệ thống điều khiển, vũ khí hoặc đồ vật, nhân
vật, tốc độ duy chuyển, cấu trúc nhiệm vụ cá nhân, giao diện, hệ thống menu,... gần như mọi thứ
của game. Mọi chi tiết của game phải được viết ra và nếu bạn đang làm việc với nhà phát hành, họ
sẽ muốn thông qua nó trước. Điều này giúp cho bản thiết kế game trở nên chi tiết nhất và được
cập nhật liên tục suốt quá trình làm dự án.
Bản thiết kế game sẽ đóng vai trò là một bản tham khảo cho tất cả thành viên trong nhóm.
Nếu họ muốn biết điều gì sẽ xảy ra khi bạn bấm nút khai hỏa hỏa tiễn, họ sẽ có thể nhìn vào nó và
thấy được những đặc tả chi tiết về nó. Khi sản phẩm trên đường phát triển, những vai trò thiết kế
cụ thể sẽ phụ thuộc vào thể loại của game. Một vài công ty mong đợi những nhà thiết kế của họ có
khả năng viết script nhiệm vụ và điều này có thể sẽ can thiệp sâu vào lập trình. Một số khác thuê
những nhà thiết kế màn chơi là những người thiết kế layout cơ bản về môi trường. Những nhà
thiết kế nên luôn chơi thử những chức năng đã được cài đặt và yêu cầu những thay đổi nếu cần
thiết cho đến khi cảm thấy đúng thì thôi.


Lập trình
Bộ phận lập trình có trách nhiệm cài đặt theo bản thiết kế. Một vài công ty sẽ phát triển
engine game của riêng họ. Số còn lại sẽ mua bản quyền của những engine game có sẵn như Unreal
hoặc Source. Mua bản quyền một engine tốn chi phí cao nhưng lại tiết kiệm lượng thời gian lớn và
cho phép cả đội ngũ của họ truy xuất vào nguồn dữ liệu có sẵn và tập hợp những công cụ hữu ích
dùng để tạo ra trò chơi. Các công ty khác nhau có thực tế làm việc khác nhau nhưng thông thường
công việc của những người lập trình viên là xem qua một chức năng trong bản thiết kế, hỏi nhà
thiết kế những câu hỏi liên quan và sau đó lên kế hoạch để cài đặt chức năng này. Bất kỳ nhưng
điều gì lệch hướng, hiểu sai sẽ được chỉnh sửa, giải thích lại trong suốt quá trình họp mặt và khi kế
hoạch được thông qua lập trình viên sẽ bắt đầu làm việc với nó. Họ cài đặt mỗi chức năng trong
bản thiết kế và chúng sau đó được kiểm định và tinh chỉnh lại nếu cần. Lập trình viên thường
chuyên biệt vào một lĩnh vực nhưng điều đó phụ thuộc hoàn toàn vào qui mô của công ty và loại

dự án mà họ làm.

Đồ họa
Bộ phận đồ họa chịu trách nhiệm cho phong cách hình ảnh của game. Có rất nhiều vai trò
bên trong của bộ phận đồ họa và tất cả đều bắt đầu với họa sỹ phác thảo. Những phác thảo có thể
đơn giản được vẽ sơ bộ hoặc đầy đủ chi tiết màu sắc. Họ thiết lập phong cách hình ảnh của game
và đem lại cho những thành viên còn lại của đội ngũ đồ họa cảm hứng để tạo ra những nhân vật và
môi trường.
Họa sỹ phụ trách vẽ nhân vật phác thảo hình 2D và sử dụng nó để tạo ra mô hình 3D. Họa
sỹ phụ trách vẽ môi trường vẽ thủ công từng texture và mô hình để mang lại sự sống cho mỗi màn
chơi. Họa sỹ phụ trách mảng hiệu ứng hình ảnh tạo ra những hình ảnh để thể hiện vụ nổ, thời tiết,
… Họa sỹ phụ trách mảng hoạt hình tạo ra những nhân vật hoạt họa riêng lẻ. Sau đó sẽ kết hợp với
mã nguồn của lập trình viên để nó hoạt động.
Mỗi qui trình đơn giản trong game đều đòi hỏi sự cộng tác giữa các bên. Ví dụ, thậm chí
một vài thứ đơn giản như tạo một nhân vật đi bộ thôi cũng phải có sự tham gia của cả 3 bộ phận.
Họa sỹ sẽ tạo ra một chuỗi hình lặp thể hiện hành động đi bộ của nhân vật và lập trình viên sẽ đảm
bảo nhân vật duy chuyển đúng khoảng cách, tốc độ và kích hoạt hành động đi khi bạn nhấn nút W.
Những thông số đặc tả sẽ được quyết định bởi một nhà thiết kế (designer)

Sản xuất
Bộ phận sản xuất thiết lập lịch và quản lý nguồn ngân sách. Họ tạo ra danh sách công việc
và ước lượng thời gian cho mỗi giai đoạn phát triển game. Công việc của họ là đảm bảo tất cả
thành viên biết họ cần làm gì, có cái mà họ cần làm và biết khi nào nó được hỗ trợ để hoàn tất.
Những nhà quản lý (Producers) còn cần giữ mối liên hệ với những ông chủ của công ty và
những người cộng tác bên ngoài (những nhà phát hành). Họ cung cấp những báo cáo tiến độ
thường xuyên, đối mặt với việc sắp xếp nhân lực, thuê thêm nhân lực và thường phải đảm bảo dự
án chạy đúng tiến độ.

Xây dựng âm thanh
Gần đến cuối giai đoạn của sản xuất, những nhà thiết kế âm thanh sẽ tạo ra những hiệu

ứng âm thanh, nhạc nền hoặc thu âm giọng nói nếu cần. Việc này thường để gần cuối vì sự thay
đổi là rất phổ biến trong phát triển game. Nhà thiết kế âm thanh sẽ tạo ra âm thanh hiệu ứng để
khớp với mỗi hành động trong game và nhạc nền để tạo ra chiều sâu cho môi trường xung quanh.


Họ còn sắp xếp diễn viên nam và nữ để thu âm những đoạn hội thoại. Thiết kế âm thanh thường
được đặt hàng làm từ bên ngoài vì nó đòi hỏi phải có những thiết bị chuyên dụng và vì quá trình
này thường được hoàn tất trong vài tháng cuối của quá trình sản xuất.

1.2.2.3 Giai đoạn sau sản xuất
Sau khi đã có được một sản phẩm game chưa hoàn chỉnh, người ta sẽ đi vào kiểm thử và
đóng gói sản phẩm này và xuất ra thị trường... cũng như nâng cấp thêm các tính năng sau này…
trong giai đoạn này, các công việc sẽ bao gồm: kiểm thử, thiết kế lại (khi cần thiết), đóng gói, thúc
đẩy, ra mắt, bảo trì…

Kiểm thử
Vào thời gian cuối của dự án game, đảm bảo chất lượng đóng một vai trò quan trọng.
Testers bắt đầu công việc để xem có thể sẽ có điều gì xảy ra. Đây có thể là một cấp hoặc tập hợp
con của các phần mềm trò chơi có thể được sử dụng cho bất kỳ mức độ hợp lý. Ban đầu, kiểm tra
một trò chơi chiếm một số lượng tương đối nhỏ thời gian sản xuất. kiểm tra game có thể làm việc
để kiểm một số trò chơi cùng một lúc. Khi thời gian cho quá trình sản xuất đến hồi kết thúc, một
trò chơi thường chiếm toàn bộ thời gian của đội kiểm thử(và thường có làm thêm giờ). Họ phấn
đấu để thử nghiệm các tính năng mới và những thử nghiệm đáp lại những yêu cầu hiện thời. Thử
nghiệm là rất quan trọng, trò chơi phức tạp nếu như có những thay đổi có thể dẫn đến những hậu
quả khó lường trước được và ảnh hưởng rất lớn.

Thiết kế lại
Dựa trên những phát hiện trong quá trình kiểm tra các yếu tố khác nhau có thể cần phải
được cố định hoặc thiết kế lại.


Đóng gói
Đóng gói trò chơi liên quan đến phát hành biên soạn các thư mục trò chơi và các tập tin
vào một phiên bản thực thi của trò chơi mà những người khác có thể tải về, cài đặt và chơi. Mặc
dù đây là một trong những giai đoạn cuối cùng. Thành công của nó phụ thuộc vào các thiết lập
chính xác của bản đồ và các tập tin liên quan trong giai đoạn đầu của giai đoạn sản xuất. Ví dụ như
các vật liệu cấp độ thư mục (UPKs) tên phải phù hợp với các trò chơi lưu tên.

Thúc đẩy
Bất kỳ trò chơi cần phải được phát huy tốt thông qua quảng cáo bắt măt, bìa bọc đĩa đẹp,
bao bì hộp DVD, quảng cáo thông qua mạng Internet, áp phích ... Nếu không có chương trình
quảng cáo và giới thiệu tốt, vấn đề đặt ra là như thế nào để cho các trò chơi là để cho ai đó có thể
nghe về nó và do đó sẽ có được cơ hội để họ tiếp xúc và chơi nó.

Phát hành
Dự án phát triển game thương mại có thể được yêu cầu để đáp ứng sự kiện quan trọng
được thiết lập bởi nhà xuất bản. Các cột mốc đánh dấu sự kiện quan trọng trong quá trình phát
triển trò chơi và được sử dụng để theo dõi tiến độ của trò chơi. sự kiện quan trọng như vậy có thể
được, ví dụ, bản đầu tiên có thể chơi được , bản alpha , hoặc beta. Cột mốc dự án phụ thuộc vào
lịch trình phát triển.


Bảo trì
Trong trường hợp của một trò chơi trực tuyến nhiều người chơi (MMOG), chẳng hạn như
một MMORPG hay MMORTS, các lô hàng của trò chơi là giai đoạn khởi đầu của bảo trì. Trò chơi
trực tuyến trong việc bảo trì liên tục như thế giới game liên tục thay đổi và lặp và các tính năng
mới được thêm vào. Các nhân viên bảo trì cho một MMOG phổ biến có thể đánh số đến hàng chục
người, đôi khi bao gồm cả các thành viên của đội ngũ lập trình ban đầu.

1.3 Tổng quan về thư viện Box2D
1.3.1 Giới thiệu về Box2D

Box2D là cái tên mà mọi người biết đến là engine vật lý 2D tốt nhất hiện nay. Engine này
khá nhẹ, hiệu quả, mạnh và tính tương thích cao, miễn phí và là mã nguồn mở. Website chính thức
của Box2D là .
Một engine vật lý mô phỏng môi trường vật lý của các đối tượng sao cho giống thật nhất.
Mặc dù nó có thể được sử dụng cho các ứng dụng khác, Box2D được tạo ra chủ yếu làm thư viện
sử dụng trong game. Engine này được viết và bảo trì bởi Erin Catto với lý do ông không hài lòng về
engine vật lý mà ông đang làm việc.
Box2D được viết bằng C++, nhưng được chuyển sang nhiều ngôn ngữ khác bởi cộng đồng người sử
dụng.Engine vật lý không phải là một game engine. Box2D rất mạnh trong việc mô phỏng vật lý
nhưng nó không được thiết kế để tận dụng sức mạnh đồ họa, network, xây dựng game hoặc load
game level.

1.3.2 Các thành phần chính trong Box2D
1.3.2.1 Rigit Body
Bodies là một đối tượng cơ sở trong lớp vật lý, nhưng chúng không phải là thứ chúng ta có
thể thấy chúng chạy vòng quanh và va chạm với các đối tượng khác.
Chúng ta có thể xem body là các thuộc tính của một đối tượng mà chúng ta không thể thấy
(draw) hoặc va chạm được (collide with). Những thuộc tính ẩn này gồm:








Mass : khối lượng.
Velocity : vận tốc và hướng di chuyển.
Rotational inertia : quán tính quay.
Angular velocity : vận tốc tiếp tuyến và độ lớn của vận tốc.

Location : vị trí.
Angle : hướng của vật thể.

Mặc dù chúng ta đều biết tất cả đặc tính của một đối tượng, chúng ta vẫn không biết được
nó như thế nào và cách mà nó xảy ra khi va chạm với các đối tượng khác. Để thiết lập kích thước và
hình dạng của một đối tượng chúng ta sử dụng fixtures.
Có 3 loại body : static (tĩnh), dynamic (động) và kinematic (động học). Hai loại đầu khá dễ
hiểu khi đọc tên trong khi loại cuối cùng khá khó hiểu.


1.3.2.2 Fixture
Fixture được dùng để mô tả kích thước, hình dạng và đặc điểm vật chất của một đối tượng
trong vật lý. Một body có thể có nhiều fixture được gắn vào chúng, và trọng tâm của body sẽ bị ảnh
hưởng bởi những fixture này. Khi 2 body va chạm với nhau, fixture của chúng được sử dụng để
quyết định kết quả của sự va chạm. Những thuộc tính chính của fixture :






Shape : hình dạng.
Restitution : tính đàn hồi.
Friction : độ trượt (ma sát).
Density : độ nặng.

Mỗi fixture đều có một hình dạng được dùng để xét va chạm với các fixture khác. Một
fixture có thể là hình tròn (circle), hình tam giác (triangle), hình từ giác (rectangle) hoặc đa giác
(polygon).
Đôi khi chúng ta muốn một fixture biểu diễn một đoạn thẳng với độ rộng dày bằng 0.

Chúng ta sử dụng phương thức SetAsEdge để làm điều này, phương thức này sử dụng 2 điểm là 2
đầu của đoạn thẳng. Chúng ta sẽ tạo một static body là một fixture đường thằng, nằm gần đáy của
màn hình vì vậy các dynamic object có thể rơi xuống nó.
Tuy nhiên, phương thức SetAsEdge cho polygon đã được loại bỏ từ Box2D version 2.1.2 trở
lên bởi vì chúng có một kiểu shape riêng, b2EdgeShape.
Density của một fixture nhân cho diện tích sẽ bằng với khối lượng của fixture đó.
Restitution định nghĩa độ đàn hồi của một fixture. Giống friction, giá trị của restitution nằm trong
khoảng [0-1], khi giá trị 0 nghĩa là fixture sẽ hoàn toàn không đàn hồi, và 1 nghĩa mà toàn bộ lực
mà body tác dụng sẽ tác dụng ngược lại hoàn toàn. Khi 2 fixture va chạm với nhau, restitution tổng
có xu hướng cao hơn giá trị restitution của chúng.

1.3.2.3 World
World đã được nhắc đến trong các phần trước như là một thực thể chính mà ở đó chứa
toàn bộ các Box2D body. Khi chúng ta tạo hoặc hủy một body, chúng ta gọi một phương thức từ
đối tượng world để làm điều này, vì vậy đối tượng world quản lý toàn bộ việc cáp phát vùng nhớ
cho các đối tượng này. Vì vậy đối tượng world khá quan trọng, dưới đây là một số tác dụng của đối
tượng này có thể làm:






Định nghĩa trọng lực.
Mô phỏng vật lý.
Tìm các fixture trong một phạm vi cho trước.
Tìm các fixture giao nhau.

Trọng lực được thiết lập có ảnh hưởng lên các đối tượng động trong world, và nó có thể
được thay đổi bằng cách sử dụng phương thức SetGravity.

Biến sleep có nghĩa là một body có được phép “sleep” hay không nếu không có gì xảy ra
với chúng (để tối ưu). Nếu nó được thiết lập là true, các body sẽ “sleep” khi không có gì xảy ra và
sẽ được loại ra khỏi simulation cho đến khi có một cái gì đó đánh thức nó. Điều này có thể là va
chạm với một body khác, hoặc một lực tác dụng lên nó…


Kể từ Box2D v2.2.1 thì biến sleep đã đặt mặc định là true. Để thay đổi nó chúng ta có thể
sử dụng phương thức b2World::SetAllowSleeping(bool).
Khi không sử dụng đối tượng world, chúng ta delete nó như con trỏ bình thường :
//delete myWorld;
Khi một đối tượng world được hủy, nó sẽ xóa tất cả các body bên trong nó. Lưu ý rằng
không được xóa các con trỏ body sau khi đã hủy đối tượng world.

1.4 Tổng quan về thư viện OpenGL ES
1.4.1 Giới thiệu về OpenGL ES
OpenGL ES là một sản phẩm miễn phí bao gồm các hàm API cho phép tạo các ứng dụng 2D,
3D trên các ứng dụng nhúng – bao gồm các thiết bị cầm cầm tay. Nó được định nghĩa như là một
tập con của openGL, tạo ra tính linh hoạt, mạnh mẽ trên giao diện cấp thấp giữa các phần mềm và
đồ họa. OpenGL ES 2.0 nhấn mạnh về tốc độ phần cứng của các hàm API, trong khi OpenGL ES 1.1
chỉ tập trung vào các phần mềm cho phép triển khai. OpenGL ES 2.0 hoàn toàn tương thích với bản
OpenGL ES 1.1 và nó có thể dễ dang thêm các API giữa hai phiên bản
OpenGL (Open Graphics Library) là một bộ thư viện đồ hoạ, bao gồm một tập khoảng 200
hàm, dùng trong các ứng dụng đồ hoạ 2 chiều và 3 chiều.
OpenGL được viết bằng C/C++, là một ngôn ngữ cấp thấp, vì thế mà OpenGL hỗ trợ được
rất nhiều nền tảng khác nhau từ Mac OS, Linux, Windows…
OpenGL ES (Open Graphics Library for Embedded System) là một phiên bản của OpenGL
dành cho các hệ thống nhúng mà tiêu biểu là các thiết bị di động. Phiên bản này gọn nhẹ hơn do
đã được bỏ bớt một số thành phần để phù hợp hơn với các thiết bị có cấu hình thấp hơn so với PC.

1.4.2 Các khái niệm cơ bản về OpenGL ES

1.4.2.1 Nhập dữ liệu từ bàn phím
Đầu tiên phải xây dựng một chức năng để xử lí mọi dữ liệu được đưa vào từ bàn phím,chức
năng này phải chấp nhận một số các tham số nhất định:
-

Tham số thứ nhất là biến UGWindow

-

Tham số thứ hai phải là một biến nguyên (interger), đại diện cho phím đã được bấm

-

Tham số thứ ba và thứ tư cũng là hai biến nguyên (interger), xác định giá trị x, y của con trỏ
thiết bị khi được ấn.

1.4.2.2 Dựng hình (Rendering)
Các bước khởi tạo và thiết lập OpenGL ES, khi vẽ trên màn hình OpenGL ES sử dụng kĩ
thuật của một bộ đêm kép. Khi vẽ chúng ta vẽ trên bộ nhớ đệm. Sau khi có được tất cả các thông
tin của việc vẽ, nó sẽ trao đổi giữa các bộ nhớ đệm và bắt đầu vẽ trên bộ nhớ đệm khác. Điều này
để ngăn chặn ảnh hưởng của việc chớp màn hình bởi hằng số xóa màn hình và vẽ hình khác trên
một bộ nhớ đệm.
Trong hàm Init(), chúng ta sử dụng một lời gọi glClearColor, nó được sử dụng để xác định
màu sắc cho màn hình hiện thị, nó bao gồm 4 tham số, các tham số này đại diện cho hệ màu RGBA


và có giá trị trong khoảng từ 0 đến 1. Ba tham số đầu là màu đỏ xanh lá cây và xanh da trời, còn
tham số thứ 4 là độ sáng tối của window.

1.4.2.3 Phép chiếu song song (Orthographic Projection)

Có hai cách để hiển thị đối tượng đó là sử dụng phép chiếu phối cảnh và phép chiếu song
song.
Phép chiếu song song, view volume được định nghĩa là một hình hộp chữ nhật, vật thể nằm trong
view volume được chiếu trực giao lên khung nhìn do đó trong phép chiếu trực giao khoảng cách từ
camare đến vật thể không ảnh hưởng đến độ lớn của ảnh.
Trong phần này chúng ta sẽ tìm hiểu làm thế nào để hiển thị một hình lên màn hình, hình
được tạo ra bằng cách xác định các đỉnh, đây là những điểm trong không gian 3 chiều vì vậy cần chỉ
rõ các điểm trên hình.
Danh sách các tham số:

Hình 1.3 Mô tả các tham số bằng hình ảnh
Tên tham số

Mô tả

GL_POINTS

Các điểm

GL_LINES

Đoạn thẳng

GL_LINE_STRIP

Đường gấp khúc không khép kín

GL_LINE_LOOP

Đường gấp khúc khép kín


GL_TRIANGLES

Tam giác


GL_TRIANGLE_STRIP

Một dải tam giác được liên kết với nhau

GL_TRIANGLE_FAN

Các tam giác liên kết theo hình quạt

Bảng 1.1 Danh sách các tham số trong thiết kế song song
Khi vẽ điểm, chức năng glPointSize có thể thay đổi kích cỡ của điểm được vẽ, kích cỡ mặc định
là 1.
Khi vẽ đường bạn có thể sử dụng glLineWidth để xác định độ rộng của đường, kích cỡ mặc định
là 1.

1.4.2.4 Màu sắc và tạo bóng (Color and Shader)
Tất cả màu sắc trong OpenGL được đại diện bởi 4 giá trị, 3 giá trị màu đỏ, xanh lá cây và
xanh lam, cuối cùng là giá tri alpha, điều này chỉ thể hiện rõ ràng 1 màu.

1.3.2.5 Các phép biến đổi (Transform)
Phần này sẽ giới thiệu về cách chuyển đổi hình theo các cách khác nhau


Phép tỉ lệ - glScalef: Phép này dùng để tăng giảm kích cỡ của vật theo trục được chọn (trục
x, y, z).




Phép dịch –glTranslatef: Dịch chuyển toạ độ trục (x,y,z)



Phép quay –glRotatef: Quay hình theo góc được chọn.

1.4.2.6 Chiều sâu (Depth)
Depth dùng để thêm chiều sâu vài hình ảnh. Để ác định xem hình nào ở trước, hình nào ở
sau, tạo hiệu ứng không gian 3D. Muốn sử dụng chức năng này thì trong OpenGL sẽ sử dụng
GL_DEPTH_TESTtrong hàm glEnable.

1.4.2.7 Ánh sáng (Lighting)
Bước đầu tiên cần thực hiện là kích hoạt backface culling. Có một số loại ánh sáng có thể
được thêm vào hình trong OpenGL ES như:
Ambient Light: Ánh sáng bao xung quanh, nó không đến từ bất kì một hướng nào cụ thể, khi ánh
sáng bao xung quanh một bề mặt ánh sáng sẽ được phản xạ theo nhiều hướng.
Diffuse Light: Ánh sáng khuếch tán, nó đến từ một hướng, ánh sáng khuếch tán tương tự như anh
sáng bao quanh nó cũng được phản xạ theo nhiều hướng.
Specular Light: Ánh sáng phản chiếu, cũng giống như ánh sáng khuếch tán nhưng nó được phản xạ
theo một hướng, ví dụ như ánh sáng nổi bật trên bề mặt trước.
Emissive Light: Ánh sáng tỏa, ánh sáng này đến từ một đối tượng cụ thể, các đối tượng cso thể
giảm lượng ánh sáng nhưng nó không thể phản chiếu ra bất kì bề mặt ngoài nào.
Pháp tuyến là một vector vuông góc với một bề mặt. nó được sử dụng trong việc tính toán ánh
sáng nên cần phải xác định một pháp tuyến cho mọi đa giác được vẽ nếu muốn nó bị ảnh hưởng
bởi nguồn sáng.



1.4.2.8 Vertex
Một hình phẳng được xác định bởi một tập hợp các Vertex. Các vertex nối với nhau bằng
các đoạn thẳng. Khi tất cả các vertex được nối thì hoàn thành hình dạng.
Để quản lý các kiểu hình dạng khác nhau trong một chương trình được dễ dàng, cần định
nghĩa cặp cấu trúc bao gồm kiểu dữ liệu vertex.
Một vertex bao gồm:

• Tọa độ (x, y, z);
• Màu sắc
• Tọa độ của Texture
Việc truyền dữ liệu từ RAM -> GPU rất tốn kém, vì thế nên tối thiểu số vertex để tiết kiệm bộ
nhớ.

1.4.2.9 Shader
Shaders giống như những mẩu code. chỉ giống các chương trình nhỏ, làm việc trực tiếp
trong GPU để thực hiện các tính toán phức tạp.
Có hai loại:

• Vertex shader
• Fragment shader
Vertex shader: còn gọi là VS, là một chương trình nhỏ được thực thi tại mỗi đỉnh của mesh
(mắt lưới). Lấy ví dụ hình khối lập phương, hình này có 8 đỉnh, trong hình này thì đỉnh 5 là không
thể thấy được. Vì vậy khối lập phương sẽ xử lý 8 lần bởi GPU. Những gì vertex shader sẽ thực hiện
là định nghĩa vị trí cuối cùng của 1 vertex. Vertex Shader cũng chịu trách nhiệm chuẩn bị và đưa ra
thông số chuẩn bị Fragment Shader. Trong OpenGL chúng ta định nghĩa biến trong Vertex Shader
nhưng không đến trực tiếp fragment Shader. Bởi vì biến của chúng ta phải đi qua Vertex Shader.
Nhưng không thể truy cập vào fragmet shader trực tiếp.
Fragment shader: Bên trong Shader Fragment, chúng ta sẽ làm việc với tất cả mọi thứ liên
quan đến bề mặt lưới, giống như vật liệu, hiệu ứng bump, đổ bóng và các hiệu ứng ánh sáng, phản
xạ, khúc xạ, kết cấu và các loại khác của hiệu ứng mà chúng ta muốn. Kết quả cuối cùng để các

fragment là một màu pixel trong RGBA.
Các thông số và mối liên hệ giữa Vertex shader và Fragment Shader được thể hiện bởi hình
dưới đây:


Hình 1.4 Mối liên hệ Vertex Shader và Fragment Shader
Ví dụ về File VS và FS:

Hình 1.5 Ví dụ 2 file Vertex Shader và Fragment Shader
1.4.2.10 Vertex Buffer Object
Hay còn gọi là VBO: Các dữ liệu của Vertex được lưu ở bộ nhớ hệ thống. Mỗi lần muốn sử
dụng cần sử dụng hàm glDrawArray() hoặc glDrawElements. Khi đó, dữ liệu sẽ được chép vào bộ
nhớ đồ họa.

1.4.2.11 Texture
Là một hình ảnh 2D được ứng dụng để tạo nên một đối tượng hình 3D
Model + Texture = 3D Object


Hình 1.6 Texture trong thiết kế 3D
Kích thước của Texture thường là mũ của 2, ví dụ như 1, 2, 4, 8, 16, 32, 64…

1.4.2.12 Model
Một model 3D bao gồm:

• Đa giác
• Đỉnh
• Texture
Định dạng file Model này thường là NFG
Ví dụ một file NFG:


Hình 1.7 Ví dụ một file Model


1.5 Tổng quan về thư viện Free Type 2
FreeType là một engine phông chữ được thiết kế rất nhỏ, hiệu quả, tùy biến cao, và di
động trong khi khả năng sản xuất ra có chất lượng cao (hình ảnh glyph). Nó có thể được sử dụng
trong các thư viện đồ họa, máy chủ hiển thị, công cụ chuyển đổi font chữ, công cụ tạo file văn bản,
và nhiều sản phẩm khác nữa.
FreeType là một dịch vụ phông chữ và không cung cấp API để thực hiện các tính năng cao
cấp hơn như bố trí văn bản hoặc xử lý đồ họa (ví dụ : vẽ ra các ký tự được tô màu, đổ bóng,…). Tuy
nhiên, nó rất đơn giản hóa các nhiệm vụ bằng cách cung cấp một giao diện đơn giản, dễ sử dụng,
và thống nhất để truy cập vào nội dung của các file font.
FreeType cũng được gọi là FreeType2, điều này nhằm phân biệt với FreeType1, một phiên
bản tiền nhiệm đã không còn được duy trì và hỗ trợ.
Một số tính năng của FreeType có thể kể đến như :

• FreeType cung cấp một API đơn giản và dễ sử dụng để truy cập vào nội
dung phông chữ một cách thống nhất, độc lập với các định dạng file.
Ngoài ra, một số các API định dạng cụ thể có thể được sử dụng để truy
cập dữ liệu đặc biệt trong các file font.
• Các thiết kế của FreeType dựa trên mô-đun có thể được hoặc là liên kết
tĩnh để thư viện tại thời gian biên dịch, hoặc nạp theo yêu cầu tại thời gian
chạy. Module được sử dụng để hỗ trợ các định dạng phông chữ cụ thể,
hoặc thậm chí các định dạng hình ảnh glyph mới.
• FreeType được viết với các hệ thống nhúng. Điều này có nghĩa rằng nó
không sử dụng khả năng ghi dữ liệu tĩnh (tức là, nó có thể chạy trực tiếp
từ ROM), và các ứng dụng khách hàng có thể cung cấp cho người quản lý
của riêng mình bộ nhớ và luồng I / O thực hiện. Sau này cho phép bạn dễ
dàng đọc từ ROM, nén hoặc điều khiển từ xa các file font với cùng API.

Một số luồng triển khai có thể được sử dụng đồng thời với một thể hiện
đơn FreeType.
• FreeType hỗ trợ rất nhiều loại phông chữ, không chỉ đơn giản là
TrueType và OpenType, bao gồm :
o Font TrueType (TTF) và các bộ sưu tập TrueType (TTC)
o Font CFF
o Font WOFF
o Font OpenType (OTF, cả TrueType và CFF biến thể) và các bộ sưu
tập OpenType (OTC)
o Loại 1 font chữ (PFA và PFB)
o CID-keyed Loại 1 font
o SFNT dựa trên phông chữ bitmap, bao gồm màu sắc Emoji
o Phông chữ X11 PCF
o Phông chữ Windows FNT









o Font BDF (bao gồm cả những người anti-aliased)
o Font PFR
o Loại 42 fonts (hỗ trợ giới hạn)
Từ một phác thảo glyph được chỉ định, FreeType có khả năng sản xuất
một bitmap đơn sắc chất lượng cao hoặc một anti-aliased pixmap sử dụng
256 mức của “gray”.
FreeType hỗ trợ tất cả các ánh xạ ký tự được xác định bởi các thông số kỹ

thuật TrueType và OpenType.
Lõi API FreeType cung cấp các chức năng đơn giản để truy cập thông tin
tiên tiến như tên glyph hoặc dữ liệu kerning cơ bản.
Một trình thông dịch bytecode đầy đủ tính năng và hiệu quả, cố gắng để
phù hợp với kết quả từ engine bytecode của Windows.
FreeType cung cấp hệ thống bộ nhớ đệm riêng của mình. Nó có thể được
sử dụng để lưu lại bộ nhớ đệm cho phông chữ hoặc hình ảnh các glyph
một cách hiệu quả.

FreeType được viết theo tiêu chuẩn công nghiệp ANSI C và có thể được biên dịch một cách
dễ dàng với bất kỳ một trình biên dịch C hoặc C ++ nào.
Ngoài một thư viện chuẩn ANSI C, FreeType không có bất kỳ sự phụ thuộc bên ngoài và có
thể được biên dịch và cài đặt trên bất kỳ loại hệ thống nào của chính mình. Một số module cần thư
viện bên ngoài (ví dụ, để xử lý các phông chữ được nén với gzip hoặc bz2), tuy nhiên chúng là tùy
chọn và có thể được vô hiệu hóa.

1.6 Tổng quan về thư viện irrKlang
irrKlang là một API mạnh mẽ, ở mức cao phục vụ việc phát âm thanh trong các ứng dụng
không gian 3D và 2D như trò chơi, trực quan khoa học và các ứng dụng đa phương tiện. irrKlang là
thư viện miễn phí cho việc sử dụng phi thương mại. Ngoài ra còn có một phiên bản cao cấp hơn
của irrKlang đó là “irrKlang pro” có thể được mua với một khoản lệ phí cấp giấy phép nhỏ và có thể
được sử dụng trong các sản phẩm thương mại.
irrKlang hiện tại hỗ trợ các định dạng :

o
o
o
o
o
o

o
o

RIFF WAVE (*.wav)
Ogg Vorbis (*.ogg)
MPEG-1 Audio Layer 3 (*.mp3)[2]
Free Lossless Audio Codec (*.flac)
Amiga Modules (*.mod)
Impulse Tracker (*.it)
Scream Tracker 3 (*.s3d)
Fast Tracker 2 (*.xm)

irrKlang là nền tảng và làm việc cho các lập trình viên, độc lập với nền tảng nó đang chạy. Các
nền tảng sau đây hiện đang được hỗ trợ cùng với các phần phụ trợ đầu ra âm thanh tương ứng:


Windows 98, ME, NT 4, 2000, XP, Vista, Windows 7, Windows 8


×