Khóa luận Xây dựng game engine đa nền tảng quản lý tài nguyên và chuyển động của các đối tượng

ĐẠI HC QUC GIA HÀ NI  
TRƯỜNG ĐẠI HC CÔNG NGHỆ  
Hoàng Tuấn Hưng  
XÂY DỰNG GAME ENGINE ĐA NỀN TNG  
QUN LÝ TÀI NGUYÊN VÀ CHUYỂN ĐỘNG CA  
CÁC ĐỐI TƯỢNG  
KHOÁ LUN TT NGHIỆP ĐẠI HC HCHÍNH QUY  
Ngành: Công nghthông tin  
HÀ NI - 2009  
ĐẠI HC QUC GIA HÀ NI  
TRƯỜNG ĐẠI HC CÔNG NGHỆ  
Hoàng Tuấn Hưng  
XÂY DỰNG GAME ENGINE ĐA NỀN TNG  
QUN LÝ TÀI NGUYÊN VÀ CHUYỂN ĐỘNG CA  
CÁC ĐỐI TƯỢNG  
KHOÁ LUN TT NGHIỆP ĐẠI HC HCHÍNH QUY  
Ngành: Công nghthông tin  
Cán bộ hướng dn: TS. Nguyn Vit Hà  
Cán bộ đồng hướng dn: ThS. Vũ Quang Dũng  
HÀ NI - 2009  
Li cảm ơn  
Tôi xin gi li cảm ơn ti các thy cô trong khoa Công nghệ Thông tin trường  
Đại hc Công Nghệ, Đi hc Quc Gia Hà Nội, đặc bit là các thy cô Bmôn Công  
nghPhn mm đã giúp đỡ tôi trưởng thành trong những năm học tp và rèn luyn ở  
môi trường đại hc.  
Xin chân thành cảm ơn thy Nguyn Vit Hà, thy Vũ Quang Dũng và phòng thí  
nghim TOSHIBA-COLTECH đã tạo điều kin cho tôi tìm hiu, nghiên cu và hc  
hi nhng kinh nghim trong quá trình nghiên cu và làm khoá lun.  
Tôi xin gi li cảm ơn tới các bn trong lp K50CD, K50CNPM đã ng h,  
khuyến khích tôi trong sut quá trình hc tp tại trưng.  
Và li cui cùng, tôi xin bày tlòng chân thành và biết ơn vô hạn ti cha m, và  
ngưi thân, những người luôn bên cnh tôi nhng lúc tôi khó khăn nhất, giúp tôi  
vượt qua khó khăn trong học tp cũng như trong cuộc sng.  
Ni, ngày 10 tháng 05 năm 2009  
Sinh viên  
Hoàng Tuấn Hưng  
i
TÓM TT  
Ngày nay, ngành công nghiệp Game đang trên đà phát triển nhanh chóng song  
song vi vic phát trin phn cng. Game engine slà mt công chu ích cho vic  
phát trin Game, nếu như các nhà phát trin mi khi bt tay vào làm một Game nào đó  
từ đầu thì srt vt vvà mt nhiu công sc. Vi mt Game engine thì công việc đó  
trở nên đơn giản và nhanh hơn nhiều, nó scung cấp các API cho người phát trin  
Game có thsdng và to ra nhng hiu ng mt cách nhanh chóng.  
Khóa lun strình bày tng quan kiến trúc vGame engine mà chúng tôi đang  
xây dựng và đi chi tiết vào hai thành phn là qun lí tài nguyên trong Game và các  
chuyển đng của đối tượng.  
Phần đu sgii thiu mt cách tng quan nht vhthng, các thành phn scó  
trong Game engine, và thiết kế cho các thành phần đó.  
Phn thhai khóa luận dành để gii thiu vcác tài nguyên scó trong Game  
engine, tm quan trng ca vic qun lí tài nguyên cho mt hthống. Đặc bit khóa  
lun strình bày cách tchc và qun lí tài nguyên mt cách hiu qunht.  
Phn thba ca khóa lun sgii thiu vcác chuyển động của các đối tượng  
trong Game, các kthuật để có thtạo ra được các loi chuyển động cho đối tượng và  
cách trin khai các kthut vào trong Game engine.  
Phn cui cùng slà tng kết nhng kết quả đã đạt được ca khóa lun, nhng  
vấn đề còn tn tại và hướng phát trin tiếp theo của đề tài.  
ii  
MC LC  
MỞ ĐU...................................................................................................................1  
Chương 1.ĐẶT VẤN ĐỀ ........................................................................................3  
1.1.Bi cnh nghiên cu............................................................................................................. 3  
1.2.Mc tiêu................................................................................................................................ 3  
1.3.Gii thiu chung................................................................................................................... 3  
Chương 2.KIN TRÚC TNG TH.....................................................................6  
2.1.Các dliu cơ bn ................................................................................................................ 7  
2.2.Giao tiếp vi hệ điều hành.................................................................................................. 8  
2.3.Render Engine....................................................................................................................... 9  
2.3.1.Khái quát vRender Engine.......................................................................................... 9  
2.3.2.Kiến trúc ca Render Engine ........................................................................................10  
2.4. Các thành phn còn li.......................................................................................................11  
Chương 3.QUN LÝ TÀI NGUYÊN...................................................................12  
3.1.Gii thiu .............................................................................................................................12  
3.2. Qun lý tài nguyên trong GEM ........................................................................................12  
3.3. Liên kết gia các thành phn ............................................................................................13  
3.4. Các thành phn trong Resource Manager........................................................................14  
3.5. Biểu đồ lp ..........................................................................................................................15  
3.5.1.Qun lý Mesh.................................................................................................................16  
3.5.2.Qun lý Texture .............................................................................................................17  
3.5.3.Qun lý Effect.................................................................................................................19  
3.5.4.Qun lý AnimatedMesh................................................................................................20  
3.5.5.Qun lý Material............................................................................................................21  
Chương 4.CHUYỂN ĐNG CỦA CÁC ĐỐI TƯỢNG ....................................23  
4.1.Gii thiu .............................................................................................................................23  
4.2.Khái quát vanimation ......................................................................................................23  
4.3.Kthut to chuyển động nhân vt ..................................................................................23  
4.3.1.Kthut ni suy Key-Frame.........................................................................................23  
4.3.1.1. Gii thiu..................................................................................................................24  
4.3.1.2. Ni suy bc 1............................................................................................................24  
4.3.1.3. Ni suy bc 2............................................................................................................25  
4.3.1.4.Trin khai kthut key-frame ....................................................................................25  
4.3.2.Kthut skinning ..........................................................................................................27  
4.3.2.1.Gii thiu...................................................................................................................28  
4.3.2.2. Kthut Skeletal Subspace Deformation...................................................................29  
4.3.2.3. Kthut Animation Space........................................................................................31  
iii  
4.3.2.4. Kthut Multi-Weight Enveloping ..........................................................................32  
4.3.2.5.Trin khai skinning....................................................................................................33  
Chương 5.THC NGHIM..................................................................................35  
5.1. Demo key-frame.................................................................................................................35  
5.2. Demo Skinning...................................................................................................................37  
Chương 6.KT LUN............................................................................................39  
6.1.Kết quả đạt được..................................................................................................................39  
6.2.Đnh hướng tương lai.........................................................................................................39  
PHLC.................................................................................................................40  
TÀI LIU THAM KHO......................................................................................44  
iv  
BNG CÁC CHVIT TT  
API  
Application Programming Interface  
CPU  
GPU  
LBS  
MWE  
SBS  
SSD  
Central Processing Unit  
graphics processing unit  
Linear Blend Skinning  
Multi-Weight Enveloping  
Spherical Blend Skinning  
Skeletal Subspace Deformation  
v
DANH MC CÁC HÌNH VBNG BIU  
Hình 1. Kiến trúc phân tng ca GEM .........................................................................4  
Hình 2. Kiến trúc tng th............................................................................................6  
Hình 3. Biểu đồ lp ca thành phn các kiu dliu cơ bn ........................................7  
Hình 4. Quá trình điều phi event ................................................................................9  
Hình 5. Kiến trúc phân tng ca Render Engine.........................................................10  
Hình 6. Biểu đồ gói ca Render Engine .....................................................................11  
Hình 7. Mô hình quan hvi các thành phn khác.....................................................12  
Hình 8.Ví dMesh Bank ...........................................................................................13  
Hình 9. Mô hình liên kết vi các thành phn khác......................................................14  
Hình 10. Các thành phn trong Resource manager.....................................................15  
Hình 11. Biểu đồ lp Mesh và MeshBank..................................................................16  
Hình 12. Biểu đồ lp Texture và TextureBank...........................................................17  
Hình 13. Biểu đồ lp Effect và EffectBank................................................................19  
Hình 14. Biểu đồ lp AnimatedMesh và AnimatedMeshBank ...................................20  
Hình 15. Biểu đồ lp Material....................................................................................21  
Hình 16. Ví dkey-frame ..........................................................................................24  
Hình 17. Ni suy bc 1 và bc 2.................................................................................25  
Hình 18. Mô hình tchc các loi animation.............................................................26  
Hình 19. Biểu đồ lp KeyFrame ................................................................................27  
Hình 20.Ví dSkinning.............................................................................................28  
Hình 21. Thành phn trong mt nhân vt ...................................................................29  
Hình 22. Hn chế kthut SSD .................................................................................30  
Hình 23. Sdng kthut SSD .................................................................................31  
Hình 24. Sdng kthut SBS .................................................................................31  
Hình 25. Sơ đồ chuyn trc tọa đ.............................................................................32  
Hình 26. Mô hình tchc khung xương.....................................................................34  
Hình 27. Demo key-frame .........................................................................................37  
Hình 28. Demo Skinning ...........................................................................................38  
vi  
MỞ ĐẦU  
Trong thời đại công nghệ thông tin như hiện nay, sn phm công nghngày càng  
chu sự đánh giá khắt khe hơn từ phía những người dùng, đặc bit là vsn phm  
Game được nhn rt nhiu sự đánh giá từ phía các game th, hay chlà những người  
chơi bình thường. Ngành công nghip game hin nay có thnói là bùng n, vi tốc độ  
phát triển đến chóng mt, rt nhiu nhng game hay và hp dẫn đã được ra đời trong  
thời gian qua. Đằng sau nhng Game phát trin và ni tiếng như vậy đu có mt Game  
Engine. Game engine là mt công chtr, một middleware giúp người phát trin  
viết game một cách nhanh chóng, đơn giản hơn đồng thi cung cp khả năng tái sử  
dng mã ngun cao do có thphát trin nhiu game tmt game engine. Ti Vit  
Nam, ngành công nghip Game mi chỉ đang phát triển đa số vn là phát hành Game  
là chyếu, còn vic xây dng mt Game Engine vn gần như chưa có. Đây là một lĩnh  
vc tiềm năng, ha hn sphát trin nhanh Vit Nam trong thi gian sp ti.  
Tnhững xu hướng phát trin trên, khóa lun tp trung nghiên cu xây dng mt  
Game engine để phát trin ti Vit Nam. Hin nay nhng Game engine ni tiếng cũng  
khá nhiu, tuy nhiên giá thành một Game engine như vậy không phi là nh, vì vy  
nhóm phát trin mun xây dng mt Game engine phc vcho những người đam mê  
về làm Game nhưng không đủ tài chính để có thể mua được một Game engine thương  
mi.  
Khóa lun stập trung đi sâu vào hai thành phần trong Game engine đó là: quản  
lí tài nguyên và các chuyển đng của đối tượng.  
Trong các phn mm, vic quản lí tài nguyên luôn được xem xét và cân nhc cn  
thận để làm sao có thqun lí mt cách hiu qunhất, đặc bit trong Game thì vấn đề  
này càng cp thiết hơn bao gihết. Mt Game muốn đưc phát trin sphi qun lí tài  
nguyên tt, hn chế ti mc tối đa sử dng tài nguyên của máy tính người chơi và  
cũng để tăng tốc cho chương trình. Cần có cơ chế cp phát và gii phóng bnhmt  
cách hiu qu.  
Trong Game bao gicũng phải có các đối tượng chuyển đng, vì vy cn có cách  
thức phương pháp để qun lí và tạo ra được các nhân vt có chuyển động. Khóa lun  
stp trung vào nghiên cu các kthuật để to ra các chuyển động cho nhân vật để  
cho các chuyển động ngày càng ging vi chuyển động ca con người, tạo được hiu  
ng tt cho Game.  
1
Ngoài phn mở đu kết cu khóa lun bao gồm 6 chương:  
Chương 1, 2: Đặt vấn đề và tng quan vhthng Game engine ca cả  
nhóm.  
Chương 3: Gii thiu vqun lí tài nguyên và cách tchc tài nguyên  
trong hthng.  
Chương 4: Gii thiu vchuyển động cho các đối tượng, đi vào các kỹ  
thut to chuyển đng.  
Chương 5: Thc nghim các kthuật đưc nêu ở chương 4  
Chương 6: Kết lun, thc hiện đánh giá kết quả đã đạt được, hướng phát  
trin sp ti.  
2
Chương 1.ĐẶT VẤN ĐỀ  
1.1.Bối cảnh nghiên cứu  
Ngành công nghip phát trin game trên thế giới đang phát triển như vũ bão.  
Cách đây 20 năm, game rất đơn giản và chcn một người hoc mt nhóm nhỏ người  
phát triển nhưng ngày nay, các game hiện đại với đồ ha và khả năng tương tác ấn  
tượng thường được phát trin bi một đội ngũ đông đảo người thiết kế game, lp trình  
viên, nghsĩ… trong thời gian ròng rã tmột đến ba năm. Chính việc game ngày càng  
trnên phc tạp như vậy nên hiện nay, các game thương mại không còn phát trin từ  
nguyên thy nữa mà được phát trin lên tgame engine. Game engine htrvic xây  
dng game một cách nhanh chóng, đơn giản hơn đồng thi cung cp khả năng tái sử  
dng code cao do có thphát trin nhiu game tmt game engine.  
Vit Nam, Game online mi chthc sthâm nhp vào thị trường cách đây 6  
năm nhưng chỉ trong khong thi gian ít ỏi đó, chúng ta đã có mt số lượng nhà phát  
hành game lên ti con shàng chc, số game được phát hành cũng tương ứng vi số  
lượng đó. Nhưng theo như chúng tôi được biết, gần như tất cả các game online đang  
được phát hành Việt Nam là được nhp khu từ nước ngoài, chyếu là Trung Quc  
và Hàn Quc ( trmt sgame nhỏ chơi trên web như đánh bài, đánh cờ ..) Mt câu  
hi mà có ltt cnhững người chơi game đều trăn trở là “bao gimới được chơi  
game Vit Nam?”.  
Chúng tôi chọn đề tài này làm khóa lun tt nghip không phi vi mt tham  
vng quá ln, chlà muốn đi những bước chân chp chững đầu tiên vào thế gii phát  
trin game rng lớn, để thu lượm kiến thc vlĩnh vực khó khăn nhưng đầy thú vnày  
và hi vng một tương lai không xa, chúng tôi có thể góp mt phn sc lc gii đáp  
trăn trca cộng đồng người chơi game Việt Nam.  
1.2.Mục tiêu  
Xây dng một Game Engine đa nền có thchy trên nhiu hệ điều hành khác  
nhau, hướng đến phân khúc phát trin game nhp vai trc tuyến (MMO). Game  
Engine này được đặt tên là GEM. Đây là mục tiêu dài hn, còn hin ti, do thi gian  
làm luận văn chỉ khong 5 tháng nên nhóm chúng tôi chtp trung hoàn thin thành  
phn Render Engine trong Game Engine ( Xem chi tiết ở chương 2).  
1.3.Giới thiệu chung  
3
Như đã gii thiu trên, Game Engine là mt lp trung gian gia game và nn  
tảng bên dưới, các thư viện lp trình cp thp. GEM là mt game engine nên dĩ nhiên  
nó cũng tuân thủ theo nguyên tc này.  
Hình 1. Kiến trúc phân tng ca GEM  
Đặc điểm đầu tiên ca GEM là khả năng chạy đa nn. Để đt được điều đó, GEM  
sdng các bn build trên các nn tng khác nhau (chkhông phi sdng thông  
dch). Các đoạn mã ngun phthuc nn tng sẽ được phân chia bng vic sdng  
các ctin biên dch, hn chế tối đa việc sdng các lp abstract – vì vic này slàm  
gim hiu suất chương trình đáng kể [10]. Cũng vì lí đo chạy đa nền nên chúng tôi la  
chn OpenGL làm giao din lp trình đồ ha 3D cp thp cho GEM, do chun  
OpenGL là chun mvà không bphthuc vào hệ điu hành.  
GEM được thiết kế hướng đối tượng và yêu cu vhiệu năng chạy cao nên chúng  
tôi sdng ngôn ngC++ - Ngôn ngữ đáp ứng hoàn hảo các điều kiện trên. Đa scác  
Game Engine trên thế gii hiện nay đều được phát trin bng ngôn ngC++.  
Chúng tôi thiết kế GEM nhắm đến phân khúc phát trin game nhp vai trc  
tuyến, nên khả năng tương thích với mt phm vi rng cu hình phn cng là một điều  
kin quan trng, dkiến shtrợ các card đồ ha htropenGL 1.4 và shader 1.0 trở  
4
lên  
Bng cu hình ti thiu dkiến  
Hãng sãn xut  
nVidia  
Dòng card htrợ  
TGeForce4 Ti trlên  
ATI  
TRadeon 9500 trlên  
Intel ( card tích hp )  
TIntel® GMA 3100 ( chipset G31,Q33) trlên  
5
Chương 2.KIẾN TRÚC TỔNG THỂ  
GEM là được chia thành nhiu thành phần để tin cho vic phát trin và bo trì.  
CthGEM gm các thành phần như sau:  
Hình 2. Kiến trúc tng thể  
Ghi chú: Do thi gian làm luận văn có hạn, chúng tôi mi chhoàn thành nhng  
thành phn sau: Giao tiếp vi hệ điu hành, Các kiu dliệu cơ bản, Render Engine.  
Nhng thành phần này đủ để htrợ người sdng to ra các khung cảnh 3D và tương  
tác vi chúng.  
6
2.1.Các dữ liệu cơ bản  
Các kiu dliệu cơ bản là thành phn bao gm các cu trúc dliệu cơ bản như  
mảng động, vector, ma trn… các phép toán trên các kiu dliệu đó cung cấp cho  
thành phn khác sdng.  
Hình 3. Biểu đồ lp ca thành phn các kiu dliệu cơ bản  
Các kiu dliu này có thchia thành 2 nhóm chính:  
- Các yếu ttrong không gian 3D:  
.
Vector2, Vector, Vector4: các loi vector biu din tọa độ 2 chiu, 3  
chiu và tọa độ đồng nht.  
.
Aabb ( Axis aligned bounding box ): hình hp chnht có các cnh dc  
theo 3 trục xyz, được mô tbằng 2 điểm (xmin, ymin, zmin ), ( xmax, ymax,  
zmax)  
7
.
.
.
Sphere: hình cầu, đưc mô tbi tọa độ tm và bán kính.  
LineSequent, Line, Ray: đon thẳng, đường thng, tia.  
Matrix: ma trn sdụng để biu din các phép biến đi: dch, xoay, co  
giãn trong không gian 3 chiu.  
.
.
Plane: mt phẳng được mô tbng các hscủa phương trình: ax + by +  
cz + d = 0.  
Frustum: là hình chóp ct biu din khung nhìn của camera, được mô tả  
bng 6 mt phng to nên nó.  
- Các kiểu đối tượng lưu trữ:  
.
.
.
String.  
Array: mảng động vi hsmrng có thtùy biến.  
GemAllocator: sdng bi các lớp khác để thc thi vic cp phát và gii  
phóng bnh.  
.
.
List: linked list 2 chiu.  
Stack.  
2.2.Giao tiếp với hệ điều hành  
Giao tiếp vi hệ điều hành là thành phn thc thi các công vic cn giao tiếp vi  
hệ điều hành như điều phối event, đọc ghi file, ly thi gian hthống… Trong đó quan  
trng nht là quá trình điều phi event:  
8
Hình 4. Quá trình điều phi event  
GEM ly event tMessage System ca hệ điều hành, từ đó lấy các thông tin cn  
thiết to ra GemEvent - lý do cn tạo ra GemEvent là để tránh bphthuc vào hệ  
điều hành. Sau đó, GemEvent sẽ được gi lần lượt đến các thành phn có khả năng  
nhn và xlý event.  
2.3.Render Engine  
2.3.1.Khái quát vRender Engine  
Render Engine là thành phn ct lõi ca mt Game Engine. Nó htrợ người  
dùng các công vic thiết yếu để to ra mt khung cảnh 3D. Người dùng skhông cn  
biết nhiều đến nhng công vic tng thấp như quá trình đọc file tài nguyên, sdng  
3D Graphic API, quá trình to các effect… mà chcn dùng giao din do Render  
Engine cung cp.  
Render Engine là thành phn duy nht trong Game Engine giao tiếp với các thư  
9
viện đồ ha cp thp ( cthể ở đây là openGL và Cg )  
Hình 5. Kiến trúc phân tng ca Render Engine  
2.3.2.Kiến trúc của Render Engine  
Render engine gm các module sau:  
10  
Hình 6. Biểu đồ gói ca Render Engine  
- Graphic Driver là module duy nht trc tiếp sdng 3D Graphic API  
(openGL), cung cp cho các module khác mt giao diện đơn giản hơn để tương tác vi  
card đha.  
- Qun lý tài nguyên là module qun lý các tài nguyên cn thiết để xây dng mt  
khung cảnh 3D như mesh, animated mesh, texture 2D, cubemap…Module này được  
trình bày chi tiết trong chương 3 của khóa lun này.  
- Qun lý khung cnh là module thc hin vic tchc và kiểm soát các đối  
tượng tn ti trong mt khung cnh 3D, từ đó thực hin quá trình render toàn bkhung  
cnh đó tạo nên hình nh 2D ti vtrí nhìn. Module này được trình bày chi tiết trong  
khóa lun “Xây dựng Game Engine đa nền tng – Qun lý khung cnh” - Trương Đức  
Phương.  
- Hiu ng ánh sáng và vt liu là module mrng các thành phn ca Qun lý  
khung cnh để to các hiu ng vánh sáng, vt liệu, và đổ bóng. Module này được  
trình bày chi tiết trong khóa lun “Xây dựng Game Engine đa nền tng – Hiu ng ánh  
sáng và vt liu” - Bùi Hoàng Khánh.  
- Mô phng tnhiên là module mrng các thành phn ca Qun lý khung  
cnh để mô phng các yếu ttnhiên cn có trong game như nước, địa hình, la,  
khói… Module này được trình bày chi tiết trong khóa lun “Xây dng Game Engine  
đa nn tng –Mô phng tnhiên” - Trần Thái Dương.  
- Chuyển động của đối tượng là module mrng các thành phn ca Qun lý  
khung cnh, thc hin quá trình ni suy trong các mô hình chuyển động ( thường là  
các nhân vt trong game ) thông qua hai kĩ thuật thông dng là key-frame và skinning.  
Module này được trình bày chi tiết trong chương 4 ca khóa lun này.  
2.4. Các thành phần còn lại  
Các thành phn Mng, Trí tunhân to, Tính toán vt lí, Âm thanh chưa được  
triển khai nên chúng tôi không đề cập đến trong tài liu này.  
11  
Chương 3.QUẢN LÝ TÀI NGUYÊN  
3.1.Giới thiệu  
Trong tt ccác Game thì vấn đề được quan tâm đầu tiên chính là tài nguyên ca  
game. Những người chơi khi quyết định cho mình một game nào đó thì hsphi xem  
xét tài nguyên trong máy hcòn bao nhiêu, và tài nguyên mà game stiêu tn bao  
nhiêu để có thqun lý tài nguyên trong máy mình mt cách hp lý nht. Đó mới chỉ  
đơn thuần là về phía người chơi, vấn đề quan trng và nng nhc nht li thuc vphía  
những người viết game. Game dù có hay và hp dẫn đến bao nhiêu đi chăng nữa  
nhưng quản lý tài nguyên không tt cũng rất khó để thành công, bi những người chơi  
game không phi ai cũng shu cho mình nhng bmáy tính siêu mnh, mà mc tiêu  
nhắm đến ở đây là nhiều người có thể chơi đưc và làm sao tốc độ đạt được cũng là tt  
nht. Vì vy cn phi có một cơ chế qun lý tài nguyên tht hiu quvà hp lý. Mt  
game engine thường có các tài nguyên cơ bản: các mesh (thông tin mô thình dng  
vt thể), các texture (thường là các hình nh 2D), các animated mesh (thông tin và các  
vt thcó chuyển động, thường là các nhân vt), các material (vt liu phlên bmt  
các vt th), các effect.  
3.2. Quản lý tài nguyên trong GEM  
Hình 7. Mô hình quan hvi các thành phn khác  
GEM scó một module để qun lý các tài nguyên và sẽ được qun lý mt cách  
tp trung. GEM sẽ có các bank để cha các mesh, animated mesh, texture, effect, …  
12  
đã được nhp vào. Như vậy thì sgiảm được tối đa tài nguyên, bởi vì ta chỉ lưu duy  
nht mt phiên bn ca mỗi đối tượng, còn các đối tượng ging nhau stham chiếu ti  
nó.  
Với phương pháp quản lý như vậy thì mt vấn đề đặt ra là: làm thế nào để xác  
định được đối tượng cn (có thể) được giải phóng. Để gii quyết vấn đề này thì vi  
mi mt bn dliu (mesh, texture, …) chúng ta scó biến đếm slần nó được tham  
chiếu, khi biến đếm t1 trv0 tc là nó không còn được tham chiếu na, thì dliu  
đó có thể đưc gii phóng.  
d:  
Hình 8.dMesh Bank  
3.3. Liên kết giữa các thành phần  
13  
Hình 9. Mô hình liên kết vi các thành phn khác  
Module qun lí tài nguyên là mt thành phn ct lõi trong GEM, tt ccác  
module khác như: quản lí sceneGraph, ánh sáng và đổ bóng, hiu ng tự nhiên đều  
phi sdụng đến các thành phn trong module qun lí tài nguyên. Module này scung  
cấp các tài nguyên như: Mesh, Material, Texture, AnimatedMesh, Effect cho các  
sceneNode ca nhng module khác nhau sdng chúng. Các module khác skhông  
phải quan tâm đến vic qun lí tài nguyên ra sao, mà chvic khai báo và sdng các  
tài nguyên đó. Còn vic qun lí: xóa, cp phát bnh, tham chiếu, … là vic ca qun  
lí tài nguyên.  
3.4. Các thành phần trong Resource Manager  
14  
Hình 10. Các thành phn trong Resource manager  
Trong module qun lí tài nguyên scó các thành phn: các mesh (thông tin mô tả  
hình dng vt thể), các texture (thường là các hình nh 2D), các animated mesh (thông  
tin và các vt thcó chuyển động, thường là các nhân vt), các Material (vt liu phủ  
lên bmt các vt thể), các effect để tương tác với GPU. MeshBank dùng để lưu trữ  
tp trung tt ccác mesh, tương tự như vậy có TextureBank, EffectBank,  
AnimatedMeshBank để lưu trữ các: Texture, Effect, AnimatedMesh. Các lp  
DlightEffect, ShadowEffect, BumpEffect, WaterEffect sẽ được tha kế tlp Effect  
để to ra các effect vi chức năng khác nhau. Lớp AnimatedMesh sẽ được tha kế từ  
hai lp KeyFrame và Skinning.  
3.5. Biểu đồ lớp  
15  
3.5.1.Quản lý Mesh  
Hình 11. Biểu đồ lp Mesh và MeshBank  
Để qun lí mt mesh (các vt th) ta scần lưu những thông tin quan trng sau:  
Lp Mesh  
Các thuc tính:  
- vertexArray: cha thông tin về các đnh ca mesh  
- normalArray: cha thông tin về véc tơ normal  
- texCoordArray: cha thông tin vtexcoordinate  
- numVertices: số lượng đỉnh của mesh đó  
- user: cho biết số lưng tham chiếu đang chiếu ti nó  
Các phương thức:  
-
-
getUser(): ly ra số lưng các tham chiếu đang sử dng nó  
setUser(): Khi ta dùng một mesh nào đó thì tăng số lượng tham chiếu ti nó  
lên (tăng user)  
-
delUser(): Khi ta không dùng một mesh nào đó thì sxóa số lượng tham  
chiếu tới nó đi. Khi nào user=0 thì hthng qun lí tài nguyên stự động  
xóa mesh đó khỏi bnh.  
Lp MeshBank  
16  
Các thuc tính:  
- meshArray: lưu trữ một danh sách các mesh khi được np vào  
Các phương thức:  
- insertMesh(_mesh, k): thêm mt _mesh vào vtrí k trong danh sách  
- appendMesh(_mesh): thêm _mesh vào cui danh sách các mesh hin có  
- deleteMesh(k): xóa mt mesh vtrí k trong danh sách  
- getMeshFromID(meshID): ly ra mt mesh vtrí meshID trong danh  
sách  
- useMesh(meshID): gọi phương thức setUser() ca phn tcó vtrí  
meshID  
- dontUseMesh(meshID): gọi phương thức delUser() ca phn tcó vtrí  
meshID  
3.5.2.Quản lý Texture  
Hình 12. Biểu đồ lp Texture và TextureBank  
Lp Texture  
Các thuc tính:  
- m_User: số lượng đối tượng đang sử dng nó  
- m_NativeGDID: là ID của texture được qun lí bởi card đồ ha  
- m_Info: Thông tin vmt texture  
- m_Name: tên ca texture  
17  
Các Phương thức:  
- Có các phương thức get, set, del User như lớp mesh  
Thông tin vmt textute gm:  
{
E_TEXTURE_FORMAT tfFormat;  
E_PIXEL_FORMAT tfPixelFormat;  
u32 tfMaxMipMapLevels;  
u32 tfWidth;  
u32 tfHeight;  
s32 tfSize;  
bool tfGenMipmap;  
bool tfCompressed;  
E_TEXTURE_FILTER tfFilter;  
E_TEXTURE_WRAP tfWrap;  
E_TEXTURE_TYPE tfType;  
} TextureInfo;  
E_TEXTURE_FORMAT: là mt loại đnh dng của texture trong card đồ ha  
E_PIXEL_FORMAT: định dng ca dliệu fixel được sdụng trong card đồ ha  
tfMaxMipMapLevels: giá trtng ln nht ca MipMap, nếu =0 tc là không có  
mipmap.  
tfWidth, tfHeight: kích cca texture  
tfSize: kích cca dliu pixel  
tfGenMipmap: nếu = true card đồ ha stự động sinh ra mipmap cho texture  
tfCompressed: =true nếu dliệu pixel được tạo đnh dng  
E_TEXTURE_TYPE: loi ca texture: 1D, 2D, 3D, Cubemap  
E_TEXTURE_WRAP: cách gn texcoordinate  
E_TEXTURE_FILTER: để xác định vic gn texture, có 2 loi: min, map tc là thu  
nhhoc phóng to  
Lp TextureBank  
18  
Do texture không lưu dữ liệu mà lưu thông tin về texture, còn nhng dliệu đó  
đã nằm trong card đồ ha. Vì vy bank sẽ không lưu texture dưới dng con trỏ như các  
bank khác. Các phương thức trong lp TextureBank cũng giống như trong lớp  
MeshBank, vì texture có thêm thuc tính m_Name nên trong bank scó thêm các  
phương thức để qun lí theo tên (cũng tương tự như ID).  
3.5.3.Quản lý Effect  
Hình 13. Biểu đồ lp Effect và EffectBank  
Lp Effect  
Các thuc tính:  
- cgContext: lưu context chứa chương trình Cg  
- cgEffect: Lưu effect  
- cgTechnique: lưu technique của chương trình Cg phù hp nht vi GPU hin  
ti  
Các phương thức:  
- updateEffectParameter(): cp nht giá trcác tham số trong chương trình cg  
- getFirstPass(): lấy pass đầu tiên trong chương trình cg  
- getNextPass(aPass): ly pass ngay sau aPass  
Lp EffectBank  
Các thuc tính:  
- effectArray: mảng lưu danh sách các Effect  
Các phương thức:  
- append(_effect): lưu một Effect vào danh sách các effect, trvid ca effect  
19  
thêm vào  
- remove(id): xóa effect có ID là id ra khi danh sách các effect  
- getEffectFromID(id): trvmt Effect có ID là id  
3.5.4.Quản lý AnimatedMesh  
Hình 14. Biểu đồ lp AnimatedMesh và AnimatedMeshBank  
AnimatedMesh là mt loi mesh có sn các chuyển động, để tạo ra được loi  
mesh này ta dùng hai kthut: key-frame và skinning. Lp AnimatedMesh sẽ được  
tha kế t2 lp Key-frame và skinning. Để có thể tương tác đưc vi các mesh có sn  
chuyển đng này thì ta sphi qun lí các thông tin sau:  
Lp AnimatedMesh  
Các thuc tính:  
- vertexArray: cha vị trí các đỉnh ca mesh ti mt thời điểm phthuc vào hàm  
tính ni suy  
- numVertice: số lượng đỉnh cho mt mesh  
- coorPerVer: schiu của đỉnh (thông thường là 3: x,y,z)  
- normalArray: cha thông tin vnormal  
- numNormals: số lưng các normal có trong mng  
20  
- coorPerNor: schiu ca normal  
- texCoordArray: mng cha các textcoordinate (tọa độ texture)  
- numTexcoords: số lưng texcoordinate có trong mng  
- coorPerTex: schiu ca texcoordinate  
- user: số lưng tham chiếu đang chiếu tới mesh (đang sử dng mesh)  
Các phương thức:  
- interpolate(factor): hàm tính ni suy theo factor, hàm này sgọi các phương  
thc ni suy lp Key-frame và skinning để lấy ra các đỉnh, normal, … ca  
mesh ti mt thời điểm.  
- getUser(): trvsố lượng đang tham chiếu tới mesh (đang sử dng nó)  
- setUser(): khi một đối tượng nào đó sử dng mesh thì tăng user lên  
- delUser(): khi một đối tượng không sdng mesh na thì sgim số lượng  
tham chiếu tới mesh đó đi. Khi user=0 tức là không có tham chiếu nào ti nó  
Lp AnimatedMeshBank : cũng được quản lí như trong lớp MeshBank  
3.5.5.Quản lý Material  
Hình 15. Biểu đồ lp Material  
21  
Material là vt liu, cht liệu đưc phủ lên các đối tượng, phc vcho vic tính  
toán ánh sáng. Qun lí material có các thông tin sau:  
Lp Material  
Các thuc tính:  
-
-
-
-
-
-
Illum: loi mô hình chiếu sáng: Phong, Lambert, Blinn …  
Ka: màu ambient ca vt liu  
Kd: màu diffuse ca vt liu  
Ks: màu specular ca vt liu  
Tf: màu ca vt liu  
Ni: hsbóng ca vt liu  
Các phương thức:  
-
-
loadFromMtl(fileName: String): ly thông tin vmaterial tfile .mtl  
Các phương thức khác để set, và get các thuc tính  
22  

Tải về để xem bản đầy đủ

pdf 52 trang yennguyen 09/05/2025 30
Bạn đang xem 30 trang mẫu của tài liệu "Khóa luận Xây dựng game engine đa nền tảng quản lý tài nguyên và chuyển động của các đối tượng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfkhoa_luan_xay_dung_game_engine_da_nen_tang_quan_ly_tai_nguye.pdf