ĐẠI HỌC ĐÀ NẴNG TRƢỜNG ĐẠI HỌC SƢ PHẠM KHOA TIN HỌC
KHÓA LUẬN TỐT NGHIỆP NGÀNH CÔNG NGHỆ THÔNG TIN ĐỀ TÀI:
XÂY DỰNG GAME 3D CHÉM TRÁI CÂY TRÊN
WINDOWS VÀ ĐTDĐ SỬ DỤNG HĐH ANDROID
GVHD : TRẦN UYÊN TRANG SVTH : NHỮ THỊ TRÀ MY LỚP : 08CNTT02
ĐÀ NẴNG, 05/2012
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
NHẬN XÉT CỦA CÁN BỘ HƢỚNG DẪN ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… …………………………………………………………………………………
Đà Nẵng, ngày …, tháng …, năm 2012 Cán bộ hƣớng dẫn
Trần Uyên Trang
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 2
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
NHẬN XÉT CỦA CÁN BỘ PHẢN BIỆN ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… …………………………………………………………………………………
Đà Nẵng, ngày …, tháng …, năm 2012
Cán bộ phản biện
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 3
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
LỜI CẢM ƠN
Em xin chân thành cảm ơn các thầy cô giáo trong khoa TIN HỌC cùng toàn thể thầy cô của trường Đại Học Sư Phạm Đà Nẵng đã truyền đạt cho em những kiến thức quý giá trong suốt bốn năm học vừa qua.
Xin chân thành cảm ơn cô: Trần Uyên Trang đã tận tình chỉ bảo và giúp đỡ em hoàn thành đề tài này.
Cuối cùng em xin cảm ơn các anh chị trong công ty Gameloft cùng các bạn trong khoa TIN HỌC, những người đã giúp đỡ, chia sẽ những kiến thức, kinh nghiệm, tài liệu…trong suốt quá trình nghiên cứu thực hiện đề tài.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 4
LỜI CAM ĐOAN
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Em xin cam đoan:
1 Những nội dung trong báo cáo này là do em thực hiện.
2 Mọi tham khảo dùng trong báo cáo này đều được trích dẫn rõ ràng tên
tác giả, tên công trình, thời gian, địa điểm công bố.
3 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, em xin chịu hoàn toàn trách nhiệm.
Sinh viên thực hiện Nhữ Thị Trà My
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 5
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
MỤC LỤC
LỜI CẢM ƠN ........................................................................................................................... 4
LỜI CAM ĐOAN ..................................................................................................................... 5
CHƢƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI ............................................................................... 14
1.1. Giới thiệu đề tài ............................................................................................................ 14
1.2. Mục đích, ý nghĩa của đề tài ......................................................................................... 14
1.3. Phƣơng án triển khai đề tài ........................................................................................... 14
CHƢƠNG 2 CƠ SỞ LÝ THUYẾT ....................................................................................... 16
2.1. Giới thiệu các công cụ để làm game 3D........................................................................ 16
2.1.1. Visual C++ ............................................................................................................. 16
2.1.2. Giới thiệu về OpenGL............................................................................................. 16
2.1.3. Giới thiệu về OpenGL ES 2.0 ................................................................................. 21
2.1.4. Giới thiệu về hệ điều hành ANDROID.................................................................... 22
2.2. Giới thiệu về 3D cơ bản ................................................................................................ 25
2.2.1. Hệ tọa độ 3D ........................................................................................................... 25
2.2.2. Quy tắc bàn tay trái- bàn tay phải ............................................................................ 26
2.2.3. Xác định vị trí của một điểm trong tọa độ 3D.......................................................... 26
2.2.4. Các phép dịch chuyển cơ bản ở trong 3D ................................................................ 27
2.2.5. Phép chiếu trong 3D ............................................................................................... 31
2.2.6. Tọa độ thực đến thiết bị .......................................................................................... 33
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 6
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
2.3. Cấu trúc của một game ................................................................................................. 35
2.3.1. Game Loop (vòng lặp của game) ............................................................................ 35
2.3.2. Framerate (FPS) ...................................................................................................... 36
2.3.3. Bộ nhớ (memory).................................................................................................... 37
2.3.4. State ........................................................................................................................ 37
2.4. Giới thiệu về NDK ....................................................................................................... 38
CHƢƠNG 3. PHÂN TÍCH TRÒ CHƠI .................................................................................. 42
3.1. Hệ thống và tính khả chuyển (portability): .................................................................... 42
3.1.1. C/C++ và thƣ viện .................................................................................................. 42
3.1.2. Phân tích tính khả chuyển (portability) của các thành phần trong trò chơi ............... 43
3.2. Xây dựng hệ thống khả chuyển..................................................................................... 46
3.2.1. Sử dụng các tiền xử lý............................................................................................. 47
3.2.2. Sử dụng nguyên mẫu hàm, lớp trừu tƣợng .............................................................. 47
3.3. Cấu trúc của một Trò chơi ............................................................................................ 48
3.3.1. Vòng lặp trò chơi .................................................................................................... 48
3.3.2. Cấu trúc trò chơi ..................................................................................................... 50
3.3.3. Nội dung trò chơi .................................................................................................... 52
3.3.4. Đồ họa .................................................................................................................... 54
3.3.5. Âm Thanh ............................................................................................................... 56
CHƢƠNG 4. QUÁ TRÌNH LẬP TRÌNH ................................................................................ 58
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 7
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
4.1. Thiết kế chƣơng trình ................................................................................................... 58
4.2. Vòng lặp trò chơi .......................................................................................................... 59
4.3. Nội dung trò chơi ......................................................................................................... 60
4.3.1. Khởi tạo vị trí hiện tại của trái cây .......................................................................... 61
4.3.2. Cập nhật trạng thái của trái cây ............................................................................... 61
4.3.3. Kiểm tra va chạm .................................................................................................... 62
4.3.4. Tính toán lại các trạng thái sau khi va chạm ............................................................ 62
4.4. Đồ Họa ......................................................................................................................... 62
4.4.1.Tải shader và biên dịch ............................................................................................ 63
4.4.2. Vẽ một đối tƣợng 3D .............................................................................................. 63
4.4.3. Vẽ một đối tƣợng 2D .............................................................................................. 64
4.5. Nhập............................................................................................................................. 64
4.6. Âm thanh...................................................................................................................... 65
4.7. Giao diện ứng dụng ...................................................................................................... 65
4.8. Giao diện xuất nhập tập tin ........................................................................................... 66
CHƢƠNG 5. QUY TRÌNH CHUYỂN TRÒ CHƠI ................................................................. 67
5.1. Chuyển sang Android ................................................................................................... 67
5.1.1 Cài đặt phần mềm .................................................................................................... 67
5.1.2. Hoạt động của JNI và quy trình biên dịch ............................................................... 67
5.1.3. Đồ họa .................................................................................................................... 68
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 8
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
5.1.4. Âm thanh ................................................................................................................ 69
5.1.5. Cảm ứng chạm ........................................................................................................ 70
5.1.6. Giao diện ứng dụng ................................................................................................. 71
5.1.7. Xử lí file ................................................................................................................. 71
CHƢƠNG 6. QUÁ TRÌNH CÀI ĐẶT HỆT THỐNG TRÊN MOBIE .................................... 73
6.1. Cài đặt hệ thống trên Android ....................................................................................... 73
CHƢƠNG 7.MỘT SỐ KẾT QUẢ VÀ DEMO CỦA GAME .................................................. 74
7.1. Kết quả demo trên Windows ........................................................................................ 74
7.2. Kết quả demo trên Android (điện thoại Galaxy mini) ................................................... 79
CHƢƠNG 8. KẾT LUẬN ....................................................................................................... 82
8.1. Kết quả đạt đƣợc .......................................................................................................... 82
8.2. Những vấn đề còn tồn đọng .......................................................................................... 82
8.3. Hƣớng phát triển của đề tài ........................................................................................... 82
TÀI LIỆU THAM KHẢO ....................................................................................................... 83
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 9
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
MỤC LỤC CÁC HÌNH
Hình 1. Biễu diễn OpenGl và mối quan hệ với các API ........................................................... 20
Hình 2. Biễu diễn đường ống dẫn trong OpenGL .................................................................... 21
Hình 3. Biễu diễn đường ống dẫn trong OpenGL 2.0 .............................................................. 22
Hình 4. Biễu tượng của hệ điều hành Android ......................................................................... 23
Hình 5. Biễu diễn hệ tọa độ 3D ............................................................................................... 25
Hình 6. Biễu diễn quy tắc bàn tay trái- bàn tay phải................................................................ 26
Hình 7. Biễu diễn một điểm trong hệ tọa độ 3D ....................................................................... 26
Hình 8. Biễu diễn phép tịnh tiến một đối tượng theo một vector .............................................. 27
Hình 9. Biễu diễn phép biến dạng theo một tỷ lệ. ..................................................................... 28
Hình 10. Biễu diễn phép biến dạng không theo tỷ lệ. ............................................................... 28
Hình 11. Biễu diễn phép quay quanh một trục tọa độ theo một góc a ...................................... 29
Hình 12. Phép quay theo trục Ox ............................................................................................ 30
Hình 13. Phép quay theo trục Oz ............................................................................................. 31
Hình 14. Biễu diễn phép chiếu phối cảnh ................................................................................ 32
Hình 15. Biễu diễn phép chiếu vuông góc ................................................................................ 33
Hình 16. Biễu diễn tọa độ thực đến thiết bị thông qua NDC .................................................... 33
Hình 17. Biễu diễn về NDC ..................................................................................................... 34
Hình 18. Biễu diễn sự biến đổi 3 chiều thành 2 chiều .............................................................. 34
Hình 19. Biễu diễn quá trình xây dựng và chuyển trò chơi. ..................................................... 46
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 10
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Hình 20. Biễu diễn vòng lặp của trò chơi ................................................................................ 48
Hình 21. Cấu trúc của một trò chơi ......................................................................................... 50
Hình 22. Giao diện của trò chơi .............................................................................................. 51
Hình 23. Trạng thái của trò chơi ............................................................................................. 51
Hình 24. Biễu diễn chuyển động của trái cây .......................................................................... 53
Hình 25. Biễu diễn thanh kiếm của người chơi ........................................................................ 53
Hình 26. Biễu diễn va chạm giữa thanh kiếm và trái cây ......................................................... 53
Hình 27. Biễu diễn tính toán tọa độ sau va chạm ..................................................................... 54
Hình 28. Biễu diễn đối tượng 3D trong trò chơi ...................................................................... 55
Hình 29. Biễu diễn giao diện 2D ............................................................................................. 55
Hình 30. Biễu diễn cách bố trí để vẽ giao diện 2D trong trò chơi ............................................ 56
Hình 31. Biễu diễn khung thiết kế của chương trình ................................................................ 58
Hình 32. Cách kế thừa các lớp trừ tượng trên các nền tảng khác nhau .................................... 59
Hình 33. Biễu diễn vòng lặp của trò chơi ................................................................................ 60
Hình 34. Vòng đời của một trái cây ......................................................................................... 61
Hình 35. Sơ đồ hoạt động của OpenGl ES 2.0 trong chương trình .......................................... 62
Hình 36. Kết quả demo về main menu ở trên Windows ............................................................ 74
Hình 37. Kết quả demo giao diện lúc đang chơi game trên windows ....................................... 75
Hình 38. Kết quả demo lúc người chơi chạm vào trái cây trên windows .................................. 76
Hình 39. Kết quả demo lúc Game over trên windows .............................................................. 77
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 11
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Hình 40. Demo giao diện màn hình highscore trên windows ................................................... 78
Hình 41. Kết quả demo biểu tượng icon của game trên Android .............................................. 79
Hình 42. Kết quả demo màn hình mainmenu trên Android ...................................................... 79
Hình 43. Kết quả demo màn hình game play trên Android ...................................................... 80
Hình 44. Kết quả demo màn hình highScore trên Android ....................................................... 80
Hình 45. Kết quả demo màn hình GameOver trên Android ..................................................... 81
Hình 46. Kết quả demo màn hình About trên Android ............................................................. 81
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 12
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
MỤC LỤC CÁC BẢNG
Bảng 1. Biễu diễn các kiểu dữ liệu trong OpenGL ................................................................... 18
Bảng 2. Các phiên bản OpenGL ES có thể sử dụng ND để tạo ra thư viện native .................... 41
Bảng 3. Thực tế của các thành phần trong trò chơi trên 3 hệ thống......................................... 44
Bảng 4. Bảng nhận xét các thành phần trò chơi trên cả 3 hệ thống. ........................................ 45
Bảng 5. Bản thiết kế âm thanh ................................................................................................. 57
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 13
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
CHƢƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI
1.1. Giới thiệu đề tài
Ngày nay, những thiết bị di động cầm tay đã trở thành một trợ thủ không thể thiếu của đa
số mọi ngƣời. Nó không đơn giản chỉ là những thiết bị dùng để liên lạc nữa mà hơn thế nữa nó còn là một trung tâm giải trí với những kho ứng dụng độc đáo. Đặc biệt sự ra đời của một số hệ
điều hành trên di động nhƣ: IOS, Android, Windows Phone…đã tạo bƣớc phát triển mạnh mẽ
cho những ứng dụng này.
Nói tới giải trí game luôn đứng hàng đầu. Với sự phát triển của công nghệ cũng nhƣ đáp
ứng nhu cầu của thị trƣờng, các Game ngày càng có chất lƣợng cao. Thời gian gần đây một xu
hƣớng mới là Game 3D đang đƣợc ƣa chuộng. Vì những lý do trên nên em xin chọn đề tài này
nhằm nghiên cứu nhằm nghiên cứu kỹ thuật làm Game 3D trên ĐTDĐ có HĐH riêng.
1.2. Mục đích, ý nghĩa của đề tài
Củng cố những kiến thức đã học. Tìm hiểu hệ điều hành Android , nghiên cứu công ghệ làm game 3D. Nghiên cứu cách xây dựng một game đa nền tảng, và quá trình chuyển từ Windows sang Android
Xây dựng trò chơi chém trái cây trên Windows và ĐTDĐ có hệ điều hành Android.
1.3. Phương án triển khai đề tài
Để hoàn thành đề tài này, trong quá trình triển khai thực hiện cần tuân thủ các bƣớc sau:
Lập kế hoạch thực hiện đề tài.
Tìm hiểu những vấn đề liên quan tới đề tài.
Phân tích và thiết kế hệ thống, dữ liệu.
Xây dựng chƣơng trình (chia nhỏ các chức năng thành các module và component để giải
quyết từng phần).
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 14
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Củng cố kết quả đã đạt đƣợc (bao gồm kiểm thử các module và chức năng của hệ thống,
chỉnh sửa lỗi nếu có và tiến tới hoàn thiện chƣơng trình ở mức có thể).
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 15
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
CHƢƠNG 1 CƠ SỞ LÝ THUYẾT
2.1. Giới thiệu các công cụ để làm game 3D
2.1.1. Visual C++
Microsoft Visual C++ (còn đƣợc gọi là MSVC) là một sản phẩm Môi trƣờng phát triển
tích hợp (IDE) cho các ngôn ngữ lập trình C, C++, và C++/CLI của Microsoft. Visual C++ là
bộ công cụ lập trình nằm trong bộ Visual Studio. Đây là một môi trƣờng lập trình đa năng dành
cho ngôn ngữ C/C++ và vì là một môi trƣờng lập trình trên hệ điều hành Windows nên Visual C++ cho phép lập trình viên thực hiện rất nhiều công việc, hỗ trợ lập trình viên việc coding,
thiết kế giao diện.. Trong VC++ chúng ta có thể tạo đƣợc : các ứng dụng trên Windows,
ActiveX, hay thƣ viện liên kết động DLL…VC++ có nhiều công cụ giúp việc thiết kế giao diện
cho chƣơng trình, kiểm lỗi và sửa lỗi.
2.1.2. Giới thiệu về OpenGL
2.1.2.1. Giới thiệu
OpenGL( Open Graphics Library) một bộ thƣ viện đồ họa mở,có mục đích lập ra một giao diện lập trình ứng dụng( API) đa chiều. Bộ thƣ viện đồ họa này chứa khoảng 150 hàm để vẽ các cảnh phức tạp từ những hàm đơn giản. Nó đƣợc dùng rộng rãi trong các trò chơi điện tử. Ngoài ra nó còn dùng trong các ứng dụng CAD, thực tế ảo, mô phỏng khoa học, mô phỏng thông tin, phát triển trò chơi. OpenGL còn có một đối thủ cạnh tranh là DirectX của Microsoft.
Không gian trong OpenGL đƣợc miêu tả qua hình học xạ ảnh. Một điểm trong không gian này có tất cả 4 tọa độ. Cách thể hiện các điểm trong không gian bằng 4 tọa độ cho phép xử lý các điểm vô tận một cách tổng quát. Vì vậy mã nguồn các ứng dụng đã đƣợc đơn giản hóa đi nhiều.
OpenGL hỗ trợ các hàm đồ họa:
• Xây dựng các đối tƣợng phức tạp từ các thành phần hình học cơ bản (điểm, đoạn, đa
giác, ảnh bitmap).
• Sắp xếp đối tƣợng trong 3D và chọn điểm thuận lợi để quan sát.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 16
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
• Tính toán màu sắc của các đối tƣợng (màu sắc của đối tƣợng đƣợc quy định bởi điều
kiện chiếu sáng, texture của đối tƣợng, mô hình đƣợc xây dựng hoặc là kết hợp của cả 2 hoặc 3 yếu tố đó).
• Biến đổi những mô tả toán học của đối tƣợng và thông tin màu sắc thành phần các
pixel trên màn hình (quá trình này đƣợc gọi là rasterization).
• Có API đa nền tảng: Windows, Mac, Linux, Unix.
• Các hệ thống dùng để nhúng:
- Iphone, Windows mobile…
• Dùng cho đa ngôn ngữ:
- C, C++, Python, Ruby, PHP…
• Dùng cho cả cách vẽ trong 2D và 3D.
Những thứ OpenGL không hỗ trợ:
- Bản thân OpenGL không có sẵn các hàm nhập xuất hay thao tác trên
windows.
- OpenGL không có sẵn các hàm cấp cao để xây dựng các mô hình đối tƣợng, thay vào đó, ngƣời dùng phải tự xây dựng từ các thành phần hình học cơ bản
(điểm, đoạn thẳng, đa giác).
2.1.2.2. Cấu trúc lệnh trong OpenGL
OpenGL sử dụng tiền tố gl và tiếp theo đó là những từ những từ đƣợc viết hoa ở chữ cái đầu để tạo nên tên của một lệnh, ví dụ glClearColor(). Tƣơng tự, OpenGL đặt tên các hằng số bắt đầu bằng GL_ và các từ tiếp sau đều đƣợc viết hoa và cách nhau bởi dấu ’_’, ví dụ:
GL_COLOR_BUFFER_BIT.
Bên cạnh đó, với một số lệnh, để ám chỉ số lƣợng cũng nhƣ kiểu tham số đƣợc truyền,
một số hậu tố đƣợc sử dụng nhƣ trong bảng sau:
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 17
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Hậu tố Kiểu dữ liệu Tƣơng ứng với Tƣơng ứng với
kiểu trong C kiểu trong
B
8-bit integer
Signed char
Glbyte
S
16-bit integer
Short
Glshort
I
32-bit integer
Int or long
Glint, Glsizei
F
32-bit floating-
Float
GLfloat,
Glclampf
point
D
Glbouble,
64-bit floating-
Double
Glclampd
point
Ub
8-bit unsigned
Unsigned char GLubyte,
Glboolean
integer
Us
16-bit unsigned
Unsigned short Glushort
integer
Ui
32-bit unsigned
Unsigned int or
GLuint,
integer
unsigned long
GLenum,
Glbitfield
OpenGL
Bảng 1. Biễu diễn các kiểu dữ liệu trong OpenGL
Ví dụ: glVertex2i(1, 3) tƣơng ứng với xác định một điểm(x, y) với x, y nguyên.
Lưu ý:
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 18
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
OpenGL có định nghĩa một số kiểu biến, việc sử dụng các định nghĩa này thay vì định
nghĩa có sẵn của C sẽ tránh gây lỗi khi biên dịch code trên một hệ thống khác.
Một vài lệnh của OpenGL kết thúc bởi v ám chỉ rằng tham số truyền vào là một vector.
Ví dụ: glColor3fv(color_array) là mảng 1 chiều có 3 phần tử là float.
2.1.2.3. Thƣ viện OpenGL
Core library
OpenGL utility library(GLU)
Links với hệ thống window
OpenGL Utility Toolkit(Glut)
Để khắc phục một số nhƣợc điểm của OpenGL, GLUT đƣợc tạo ra với nhiều hàm hỗ
trợ:
Quản lý window
Display callback
Nhập xuất (bàn phím, chuột…)
Vẽ một số đối tƣợng 3D phức tạp (mặt cầu, khối hộp…)
OpenGL cho hệ thống nhúng
• Mobile phone
• PDAS
• Video game consoles
Hệ tọa độ của OpenGL
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 19
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
OpenGL dùng hệ tọa độ theo quy tắc bàn tay phải.
Mối quan hệ giữa OpenGL với các API
Hình 1. Biễu diễn OpenGl và mối quan hệ với các API
2.1.2.4. Đƣờng ống dẫn trong OpenGL (OpenGL Rendering pipeline)
Đƣờng ống dẫn của OpenGL gồm một chuỗi các quá trình xử lý theo trình tự. Hai đồ
họa thông tin, dữ liệu vertex-based và pixel-based, đƣợc xử lý thông qua các đƣờng ống, Kết
hợp với nhau sau đó đƣợc viết vào frame buffer.Chú ý rằng OpenGL có thể gửi các dữ liệu đã
đƣợc xử lý lại cho ứng dụng của chúng ta.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 20
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Hình 2. Biễu diễn đường ống dẫn trong OpenGL
2.1.3. Giới thiệu về OpenGL ES 2.0
Là một phần mềm giao diện để vẽ đồ họa 3D phức tạp trên các thiết bị cầm tay và
nhúng. Nó chính là thƣ viện đồ họa cho các thiết bị cầm tay và nhúng với lập trình 3D phần
cứng bao gồm điện thoại di động, PDA, thiết bị, xe cộ, và hệ thống điện tử. Với OpenGL ES
2.0 thì chúng ta có thể lập trình shader trên các thiết bị nhỏ và di động.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 21
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Đường ống dẫn(pipeline) trong OpenGL ES 2.0
Hình 3. Biễu diễn đường ống dẫn trong OpenGL 2.0
2.1.4. Giới thiệu về hệ điều hành ANDROID
2.1.4.1. ANDROID là gì?
Android là một hệ điều hành điện thoại di động đƣợc dựa trên một phiên bản sửa lỗi của Linux. Ban đầu nó đƣợc phát triển bởi một tổ chức cùng tên là Android. Vào năm 2005, nhƣ là một chiến lƣợc của mình vào thị trƣờng di động, Google đã mua lại Android và đã qua công tác phát triển nó. Các nhà phát triển viết ứng dụng cho Android dựa trên ngôn ngữ Java. Sự ra mắt của Android vào ngày 5 tháng 11 năm 2007 gắn với sự thành lập của liên minh thiết bị cầm tay mã nguồn mở, bao gồm 78 công ty phần cứng, phần mềm và viễn thông nhằm mục đính tạo nên một chuẩn mở cho điện thoại di động trong tƣơng lai.
Các lợi thế chính của việc áp dụng Android là nó cung cấp một cách tiếp cận thống nhất để phát triển ứng dụng. Các nhà phát triển chỉ cần phát triển cho Android và các ứng dụng của họ sẽ có thể chạy trên nhiều thiết bị khác nhau, miễn là thiết bị đƣợc hỗ trợ
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 22
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
bằng cách sử dụng Android. Trong thế giới của điện thoại thông minh ứng dụng là một phần quan trọng nhất của chuỗi thành công. Do đó, các nhà sản xuất thiết bị nhìn thấy Android nhƣ hy vọng tốt nhất của họ để thách thức sự tấn công dữ dội của Iphone, mà đã chỉ huy một cơ sở lớn các ứng dụng.
Android cung cấp một bộ đầy đủ các phần mềm cho các thiết bị di động: Nó là một hệ thống điều hành, middleware và các ứng dụng di động chủ chốt. Các Android Software
Development Kit (SDK) bây giờ đã có.
Hình 4. Biễu tượng của hệ điều hành Android
Android đƣợc xây dựng để cho phép các nhà phát triển tạo ra các ứng dụng di động hấp dẫn tận dụng tất cả một chiếc điện thoại đã cung cấp. Nó đƣợc xây dựng để đƣợc thực sự mở. Ví dụ, một ứng dụng có thể kêu gọi bất kỳ chức năng lõi của điện thoại nhƣ thực hiện cuộc gọi, gửi tin nhắn văn bản, hoặc bằng cách sử dụng máy ảnh, cho phép các nhà phát triển để tạo ra phong phú hơn và nhiều hơn nữa những kinh nghiệm cố kết cho ngƣời dùng.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 23
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Hơn nữa, nó sử dụng một máy ảo tuỳ chỉnh đƣợc thiết kế để tối ƣu hóa bộ nhớ và tài nguyên phần cứng trong một môi trƣờng di động. Android là mã nguồn mở, nó có thể
đƣợc liberally mở rộng.
Android không phân biệt giữa các ứng dụng lõi của điện thoại và các ứng dụng của bên thứ ba. Với các thiết bị xây dựng trên Hệ điều hành Android, ngƣời dùng có thể hoàn toàn thích ứng với điện thoại đến lợi ích của họ. Họ có thể trao đổi trên màn hình của điện thoại, những phong cách của dialer, hoặc bất kỳ ứng dụng.
Android phá bỏ rào cản để xây dựng các ứng dụng mới và sáng tạo. Ví dụ, một nhà phát triển có thể kết hợp thông tin từ các trang web với dữ liệu trên điện thoại di động của
một cá nhân – ví dụ nhƣ địa chỉ liên hệ của ngƣời dùng, lịch, hoặc vị trí địa lý – để cung
cấp một trải nghiệm ngƣời dùng có liên quan hơn. Với Android, một nhà phát triển có
thể xây dựng một ứng dụng cho phép ngƣời dùng xem vị trí của bạn bè của họ và đƣợc
cảnh báo khi họ đang có trong vùng phụ cận cho họ một cơ hội để kết nối.
Với Android tốc độ nhanh và phát triển ứng dụng dễ dàng.
Android cung cấp truy cập đến một loạt các thƣ viện công cụ hữu ích và có thể đƣợc sử dụng để xây dựng các ứng dụng phong phú. Ví dụ, Android cho phép các nhà phát triển
để có đƣợc vị trí của điện thoại, và cho phép các thiết bị giao tiếp với nhau tạo điều kiện
cho đồng đẳng rich-to-peer ứng dụng xã hội.
Rất nhiều nhà phát triển hệ điều hành Android đã vào cuộc và các ROM cho Android
độc đáo đƣợc ra đời với nhiều tích năng nổi trội đƣợc tích hợp và đầy sáng tạo.
2.1.4.2. Các phiên bản của ANDROID
Android 1.5
Android 1.6
Android 2.0
Android 2.1
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 24
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Android 2.2
Android 2.3.3
Android 3.0
Android 3.1
Android 3.2
Android 4.0
Android 4.0.3
2.2. Giới thiệu về 3D cơ bản
2.2.1. Hệ tọa độ 3D
Đƣợc định nghĩa bởi 3 trục tọa độ: ox, oy, oz.
Hình 5. Biễu diễn hệ tọa độ 3D
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 25
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
2.2.2. Quy tắc bàn tay trái- bàn tay phải
Hình 6. Biễu diễn quy tắc bàn tay trái- bàn tay phải
2.2.3. Xác định vị trí của một điểm trong tọa độ 3D
Cho điểm P (Px, Py, Pz) trong tọa độ 3D. Ta biểu diễn nhƣ sau:
Hình 7. Biễu diễn một điểm trong hệ tọa độ 3D
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 26
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
2.2.4. Các phép dịch chuyển cơ bản ở trong 3D
Translate
Scale
Rotate
2.2.4.1. Phép Tịnh tiến (Translate)
Tịnh tiến một đối tượng P theo một vector V
Hình 8. Biễu diễn phép tịnh tiến một đối tượng theo một vector
Cho vector V:
V = Vx * i + Vy *j + Vz *k
Phép tịnh tiến P thành P’ theo vector V đƣợc xác định nhƣ sau:
Tv: P -> P’
Tv = { Px’ = Px + Vx, Py’ = Py + Vy, Pz’ = Pz + Vz}
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 27
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
2.2.4.2. Phép biến đổi
Biến đổi theo một tỷ lệ
S: P -> P’
S = { Px’ = Px *Sx, Py’ = Py *Sy, Pz’ = Pz * Sz}
Hình 9. Biễu diễn phép biến dạng theo một tỷ lệ.
Biến đổi không theo tỷ lệ
Hình 10. Biễu diễn phép biến dạng không theo tỷ lệ.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 28
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
2.2.4.3. Phép quay quanh một trục tọa độ theo một góc a
Hình 11. Biễu diễn phép quay quanh một trục tọa độ theo một góc a
Quay quanh trục Ox, Oy, Oz
Cách xác định tọa độ theo phép quanh quay một trục
Quay quanh trục Ox:
R (a, x): P -> P’
R (a, x) = {
Px’ = Px
Py’ = Py * Cos (a) – Pz * Sin (a)
Pz’ = Py * Sin (a) + Pz * Cos (a)
}
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 29
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Hình 12. Phép quay theo trục Ox
Quay quanh trục Oy:
R (a, y): P -> P’
R (a, y) = {
Py’ = Py
Px’ = Py * Cos (a) + Pz * Sin (a)
Pz’ = -Px * Sin (a) + Pz * Cos (a)
}
Quay quanh trục Oz:
R (a, z): P -> P’
R (a, z) = {
Pz’ = Pz
Px’ = Px * Cos (a) - Py * Sin (a)
Py’ = Px * Sin (a) + Py * Cos (a)
}
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 30
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Hình 13. Phép quay theo trục Oz
2.2.5. Phép chiếu trong 3D
Giới hạn vùng để vẽ ảnh trên thiết bị 3D:
Trái, phải, trên, dƣới, gần, xa.
2.2.5.1. Chiếu phối cảnh
Là hình chiếu đƣợc xây dựng bằng phép chiếu xuyên tâm.
Đặc điểm của phép chiếu này là tạo cho ngƣời xem có cảm giác xa gần giống nhƣ nhìn
trong thực tế.
Là một cách vẽ trong hội họa, hay tạo hình, dùng để thể hiện các hình ảnh 3 chiều một
cách gần đúng trên một bề mặt 2 chiều nhờ vào các quy luật phối cảnh. Các quy luật phối cảnh
đƣợc xây dựng trên các quy tắc hình học chặt chẽ. Các quy tắc phối cảnh giúp hình ảnh 2 chiều
trở thành 3 chiều, khiến chúng đƣợc quan sát đƣợc trực quan hơn trên tranh vẽ.
Ứng dụng của hình chiều phối cảnh là đi kèm theo các hình chiếu vuông góc trong bản
vẽ thiết kế kiến trúc và xây dựng để biễu diễn các công trình có kích thƣớc lớn.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 31
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Hình 14. Biễu diễn phép chiếu phối cảnh
2.2.5.2. Chiếu trực giao (phép chiếu vuông góc)
Trong phép chiếu này, khoảng cách của vật tới camera không ảnh hƣởng tới độ lớn của
vật đó khi hiển thị.
Phép chiếu trực giao hay còn đƣợc gọi là phép chiếu nhìn từ trên xuống hoặc từ dƣới
lên. Có 2 phép chiếu khác cũng khá thông dụng là:
Phép nhìn từ trước: Tia chiếu song song với trục x và mặt phẳng quan sát là yz. Phép chiếu này loại bỏ thành phần x của P.
Phép chiếu nhìn từ phía bên cạnh: Tia chiếu song song với trục y và mặt phẳng chiếu này loại bỏ thành phần y của P.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 32
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Hình 15. Biễu diễn phép chiếu vuông góc
2.2.6. Tọa độ thực đến thiết bị
Tọa độ thực -> tọa độ mắt -> NDC -> Thiết bị
Hình 16. Biễu diễn tọa độ thực đến thiết bị thông qua NDC
NDC
Là thiết bị chuẩn hóa tọa độ. Có hình dạng là một lập phƣơng có tọa độ các điểm cố
định. Chỉ có những điểm nằm trong NDC mới đƣợc vẽ.
Xác định tọa độ theo quy tắc bàn tay trái.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 33
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Hình 17. Biễu diễn về NDC
Biểu đồ thể hiện sự biến đổi 3 chiều thành thành điểm có tọa độ 2 chiều
Hình 18. Biễu diễn sự biến đổi 3 chiều thành 2 chiều
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 34
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
2.3. Cấu trúc của một game
Các khái niệm trong game
2.3.1. Game Loop (vòng lặp của game)
Là thành phần quan trọng của bất kỳ game nào. Game loop giúp game chạy ổn định hơn
không bị ảnh hƣởng bởi tác động của ngƣời dùng.
Hầu hết các chƣơng trình truyền thống đều đáp ứng thông điệp đƣa vào của ngƣời dùng .
Ví dụ nhƣ: word thì định dạng và text theo nhƣng gì ngƣời dùng nhập vào, nếu ngƣời dùng không nhập vào thì nó không làm gì cả. Nhƣng đối với một chƣơng trình game thì dù ngƣời
dùng có nhập vào thông điệp hay không thi nó vẫn thực hiện theo một cấu trúc chƣơng trình có
sẵn đây chính là vòng lặp của game.
Một vòng lặp game rất đơn giản nó có thể trông nhƣ thế này:
While ( user doesn't exit )
check for user input
run AI
move enemies
resolve collisions
draw graphics
play sounds
end while
Các vòng lặp game có thể thay đổi nhƣ sự phát triển của game nhƣng hầu hết chúng đều
dựa trên ý tƣởng cơ bản này.
Vòng lặp game khác nhau tùy thuộc vào nền tảng mà nó phát triển.Vòng lặp game đƣợc
thực hiên thông qua 2 hàm chính là Update và Paint.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 35
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
2.3.2. Framerate (FPS)
Số lần vẽ khung hình trên một giây. Framerate chậm sẽ làm cho ngƣời dùng không có
cảm giác thật, ảnh hƣởng đến sự tƣơng tác của ngƣời dùng với trò chơi.
Các yếu tố làm cho framerate chậm
Hình vẽ có kích thƣớc lớn.
Tính toán trong game nhiều.
Lỗi của thiết bị.
Cách cải thiện framerate
Tối ƣu hóa tính toán và các điều kiện thực hiện trong game:
+ Sử dụng ít vòng lặp.
+ Dùng phép toán dịch chuyển bit thay cho phép nhân và phép chia.
+ Khai báo các biến và phƣơng thức ở dạng static.
Caching module của các file ảnh, tối ƣu hóa các module dùng để vẽ sao cho số lƣợng
module vẽ ra là ít.
Dùng Bacbuffer: Không vẽ từng sprite ra màn hình mà ta vẽ các sprite lên một ảnh
sau đó vẽ ảnh đó ra màn hình.
Bỏ các hiệu ứng không cần thiết.
Limit Frame rate
Là sự giới hạn lại số lần vẽ trên một giây của trò chơi. Nhằm mục đích dùng trong
những trƣờng hợp ứng dụng có frame rate quá nhanh, sẽ làm cho ứng dụng không ổn định. Ảnh hƣởng đến quá trình xử lý, ngƣời chơi không chơi kịp và một điều nữa là nó dẫn đến
việc nhanh hết pin của thiết bị.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 36
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
2.3.3. Bộ nhớ (memory)
Là kích thƣớc bộ nhớ có thể dùng để chạy chƣơng trình game của thiết bị.
Các yếu Tố ảnh hưởng đến bộ nhớ trong game
• File ảnh dùng trong game.
• Âm thanh dùng trong game.
• Các file text, mảng chứa text trong game.
Tối ưu hóa bộ nhớ
• Đơn giản hóa các frame và hình ảnh động.
• Chia ảnh ra thành các module nhỏ.
• Xóa các module của dữ liệu sau khi caching.
• Dùng gói sound có dung lƣợng nhỏ, Load sound khi chạy sound và giải phóng (free)
khi dừng sound.
• Dùng mảng một chiều thay vì dùng mảng 2 chiều.
• Chỉ giữ những đối tƣợng cần thiết trong bộ nhớ. Để tránh vấn đề phân mảnh bộ nhớ (là
các đối tƣợng thƣờng dùng (fonts, main characters, common interface sprites, … ) ).
• Load khi muốn vẽ và giải phóng khi đi ra khỏi màn hình.
• Tránh phân mảnh bộ nhớ: load đối tƣợng có kích thƣớc lớn trƣớc. Giữ cho bộ nhớ ổn
định. Không load và giải phóng quá nhiều lần.
2.3.4. State
Là các trạng thái của một game. Chúng có liên quan chặt chẽ với nhau.Thông thƣờng một game thƣờng có các trạng thái sau: mainmenu, gamestart, gamewin, gameover, about,
highscore, Exit…
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 37
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
2.4. Giới thiệu về NDK
Là bộ công cho phép nhúng các mã code lên các ứng dụng android. ứng dụng Android
chạy trong máy ảo Dalvik. NDK cho phép chúng ta dùng các ứng dụng viết bằng ngôn ngữ C và C++ lên thiết bị android.
NDK cung cấp một số hỗ trợ sau:
• Một tập hợp các Toos và files build dùng để tạo ra các thƣ viện mã từ sources C và
C++.
• Cách để nhúng các thƣ viện mã vào một file (.apk) gói ứng dụng mà chúng ta có thể
chạy đƣợc trên các thiết bị android.
• Tài liệu, ví dụ và một số hƣớng dẫn.
• Một bộ các thƣ viện C/C++ đƣợc hỗ trợ trong tất cả các phiên bản sau này của hệ điều
hành Android, bắt đầu từ Android 1.5. Từ phiên bản 2.3 trở đi, hệ điều hành android còn hỗ trợ
them cách viết Activity bằng C/C++.
NDK cung cấp bộ header cho libc ( bột thƣ viện C ), libm (bột thƣ viện toán học),
openGL ES(thƣ viện đồ họa 3D), giao diện JNI(là giao diện để liên lạc giữa java và native
code), một số thƣ viện khác, đƣợc chứa trong Development Tools.
Khi nào thì Native code
Không phải khi nào NDK cũng đều có lợi với tất cả các ứng dụng. Vì vậy chúng ta cần
cân bằng lợi ích với nhƣợc điểm của nó. Đặc biệt trong trƣờng hợp sử dụng native code không
làm tăng hiệu suất thực thi mà làm tăng sự phức tạp của ứng dụng. Nói chung chỉ nên sử dụng
native code nếu nó là cần thiết đối với ứng dụng của mình. Chứ không phải vì chúng ta thích
chƣơng trình trong C/C++.
Frame android cung cấp 2 cách để dùng native code :
Dùng Android framework để viết ứng dụng của mình và dùng JNI để truy cập API
đƣợc cung cấp bởi Android NDK. Kỹ thuật này cho phép chúng ta tận dụng các tiện ích của
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 38
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Android framework, nhƣng vẫn cho phép chúng ta viết native code khi cần thiết. Chúng ta có
thể cài ứng dụng sử dụng Native code thông qua JNI trên thiết bị chạy android 1.5 hoặc mới
hơn.
Viết một native activity, cho phép chúng ta thực hiện cài đặt vòng đời của ứng
dụng android trên native code. Android SDK cung cấp lớp NativeActivity cho phép chúng ta
cài đặt vòng đời thông qua các hàm sau (onCreate(), onResume(), ..).
Development tool
NDK gồm một bộ công cụ (compilers, linkers, …) dùng để tạo ra mã nhị phân cho bộ vi
xử lý ARM trên hệ điều hành Linux, OS X, và Windows(với Cygwin).
Cung cấp một bộ headers của hệ thống cho các API native chuẩn mà đƣợc đảm bảo
đƣợc hỗ trợ trong tất cả các phiên bản sau này của nền tảng:
• Libc (thƣ viện C) headers.
• Libm (thƣ viện toán học) headers.
• Giao diện JNI headers.
• Liblog (Android logging) header.
• OpenGL ES 1.1 và OpenGL ES 2.0(thƣ viện graphics library) headers.
• Libjnigraphics (Pixel buffer access) header(for Android 2.2. trở lên).
• Thƣ viện OpenSL ES native audio.
• API cho ứng dụng android.
NDK cũng cung cấp một hệ thống biên dịch giúp chúng ta làm việc hiệu quả với mã
nguồn của mình mà không cần điều khiển chi tiết các công cụ/ nền tảng/ CPU/ ABI. Ngƣời dùng chỉ cần tạo các file biên dịch đơn giản để mô tả mã nguồn của mình mà trong ứng dụng Android sử dụng. Và hệ thống biên dịch sẽ sử dụng các file này để biên dịch, và tạo ra một thƣ viện động bỏ trực tiếp vào trong dự án của mình.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 39
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Hệ thống và phần mềm yêu cầu
• The Android SDK
- Hoàn tất cài đặt một Android SDK (bao gồm tất cả các phụ thuộc).
- Phiên bản SDK Android 1.5 trở đi.
• Hệ điều hành hỗ trợ
- Window XP (32-bit) hoặc vista (32- hoặc 64 -bit).
- Linux (32 hoặc 64 bit, thử nghiệm trên Linux Ubuntu Dapper Drake).
• Các công cụ Cần Thiết
- Đối với tất cả các nền tảng, bắt buộc GNU Make 3.81 trở lên.
- Đối với Window, bắt buộc Cygwin 1.7 trở lên. NDK không làm việc với Cygwin 1.5.
• Nền tảng Android tƣơng thích
Các thƣ viện native đƣợc tạo ra bởi Android NDK chỉ có thể sử dụng trên các thiết bị
Android phiên bản 1.5 trở đi. Điều này là do Bộ công cụ và ABI liên quan đến những thay đổi
làm cho các thƣ viện native không tƣơng thích với hình ảnh hệ thống 1.0 và 1.1.
Vì lí do này nên chúng ta nên sử dụng thƣ viện native đƣợc tạo ra với NDK trong ứng
dụng mà đƣợc triển khai trên các thiết bị chạy trên nền tảng android 1.5 trở đi.
Để đảm bảo tính tƣơng thích, một ứng dụng dùng thƣ viện native tạo ra với NDK phải
khai báo
Ví dụ:
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 40
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
...
Nếu sử dụng NDK để tạo ra thƣ viện native có sử dụng OpenGL ES API, thì ứng dụng
chứa các thƣ viện chỉ có thể đƣợc triển khai trên các thiết bị chạy tối tiểu là các phiên bản đƣợc
nêu dƣới đây:
OpenGL ES Version Compatible Android Required uses-sdk Attribute
Used Platform(s)
OpenGL ES 1.1 Android 1.6 and android:minSdkVersion="4"
higher
OpenGL ES 2.0 Android 2.0 and android:minSdkVersion="5"
higher
Bảng 2. Các phiên bản OpenGL ES có thể sử dụng ND để tạo ra thư viện native
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 41
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
CHƢƠNG 3 PHÂN TÍCH TRÕ CHƠI
3.1. Hệ thống và tính khả chuyển (portability):
3.1.1. C/C++ và thƣ viện
Để đạt đƣợc yêu cầu đặt ra của bài toán, là hệ thống có thể chạy đƣợc trên cả hai Hệ
điều hành: Windows, Android . Và trong quá trình làm không cần mất nhiều thời gian, chúng ta
cần phải phân tích kỹ lƣỡng và đề xuất phƣơng án phù hợp để tiến hành đề ra giải pháp và xây
dựng bài toán.
Nhận xét:
Cả hai hệ điều hành đều cung cấp môi trường lập trình trên ngôn ngữ ANSI C/C++.
Windows: Hổ trợ sẵn.
Android: JNI từ Android 1.5, Native Activity từ Android 2.3.
Cả hai hệ điều hành đều cung cấp thư viện OpenGL ES 2.0.
Android: Từ phiên bản 2.1.
Windows: Thông qua bộ giả lập OpenGL ES 2.0 của PowerVR.
Môi trường C/C++ trên cả hai hệ điều hành tương đối giống nhau. Tuy nhiên số lượng các thư viện hổ trợ khác nhau, do đó chúng ta chỉ sử dụng các thư viện chuẩn mà cả hai đều hỗ trợ.
Có thể dễ dàng chuyển một thư viện C chuẩn lên cả hai hệ điều hành (trong trường hợp ứng dụng này, tôi đã chuyển thành công thư viện LIB PNG – hổ trợ đọc và xử lí tập tin hình ảnh PNG trong C/C++).
Tất cả đều hổ trợ các công cụ phát triển mạnh mẽ, Android chạy trên nền tảng GCC.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 42
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Do đó, trong quá trình lập trò chơi, chúng ta nên sử dụng hợp lí các công cụ, thƣ viện, mã nguồn và lập trình một cách tối ƣu để có thể sử dụng lại trên cả hai nền tảng khác nhau này.
3.1.2. Phân tích tính khả chuyển (portability) của các thành phần trong trò chơi
Thông thƣờng, trong một trò chơi (tức là một ứng dụng) sẽ có các thành phần nhƣ sau:
- Vòng lặp trò chơi: là trung tâm của trò chơi, quản lí vòng đời, trạng thái của trò chơi.
- Logic: là phần xử lí của trò chơi, xử lí thuật toán, trí thông minh nhân tạo, tƣơng tác
với ngƣời chơi.
- Đồ Họa: là phần thể hiện của trò chơi.
- Âm thanh: là phần không thể thiếu của trò chơi, giúp trò chơi trở nên sinh động hơn.
- Nhập: đối với các thiết bị Android thì tƣơng tác chủ yếu thông qua cảm ứng chạm
(touch screen), giúp ngƣời dùng tƣơng tác với trò chơi.
- Giao diện ứng dụng: là bộ khung tƣơng tác với nền tảng của ứng dụng: cho phép ứng
dụng khởi chạy, tạm ngƣng, ngƣng, và xử lí các sự kiện liên quan.
Đối với các thành phần trên, ta có bảng thực tế nhƣ sau:
Nền tảng / Yếu tố Windows Android
Vònglặp trò chơi
Có thể cài đặt giống nhau trên cả hai hệ thống do đều viết bằng C/C++. Có thể cài đặt giống nhau trên cả hai hệ thống do đều viết bằng C/C++.
Logic
Đồ Họa
Tƣơng tự, ta có thể cài đặt giống nhau trên cả ba hệ thống. - Direct X. - OpenGL. OpenGLES (thông qua bộ giả lập). Tƣơng tự, ta có thể cài đặt giống nhau trên cả ba hệ thống. - OpenGL ES 1.1. OpenGL ES 2.0. (C/C++: từ Android 2.1; Java: từ Android 2.2).
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 43
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Âm thanh
Có thể sử dụng các bộ thƣ viện âm thanh.
- MediaPlayer. - SoundPool. - Open SL ES (Từ Android 2.2). Hổ trợ các định dạng: midi, wav, m4a, mp3 …
Nhập thông điệp từ
Nhận windows.
Từ View – phƣơng thức OnTouchEvent(). Không hổ trợ nhận sự kiện cảm ứng trực tiếp từ JNI.
Giao diện ứng dụng:
main() tạo cửa sổ và tƣơng tác.
- Activity viết bằng Java. Native activity viết bằng C/C++. (từ Android 2.3).
Xuất nhập tập tin Dùng thƣ viên
Đọc tập tin từ res/raw qua JNI.
Bảng 3. Thực tế của các thành phần trong trò chơi trên 3 hệ thống
Từ bảng thực tế trên, ta có bảng nhận xét sau:
Tính Khả Chuyển
Giải Pháp Cài đặt bằng C/C++. trò lặp Yếu tố Vòng chơi
Cài đặt bằng C/C++.
Đồ Họa
Logic Trò Chơi
Âm thanh
Dùng OpenGL ES 2.0. API 2.0 mạnh mẽ hơn nhiều so với 1.1 và hầu hết các thiết bị hiện tại đều hổ trợ. Không có một chuẩn chung về âm thanh. Tuy nhiên ở mức độ đơn giản, chúng ta không xử lí nhiều tới âm thanh (âm thanh nổi, v.v…). - Trên windows: không cài đặt âm thanh. - IOS: Sử dung AVAAudioPlayer.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 44
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Nhập
Giao diện ứng dụng Xuất nhập tập tin - Android OS: Sử dụng MediaPlayer. Tƣơng tự, ta không có một API chung để nhận cảm ứng, do đó phần này ta phải viết riêng trên từng hệ thống. Phần này ta phải viết riêng trên từng hệ thống. Phần này ta phải viết riêng trên từng hệ thống.
Bảng 4. Bảng nhận xét các thành phần trò chơi trên cả 3 hệ thống.
Với lựa chọn trên, trò chơi của chúng ta sẽ chạy đƣợc trên các nền tảng với cấu hình
nhƣ sau:
Windows: 32 bit, card đồ họa hỗ trợ OpenGL ES 2.0. Android: phiên bản 2.1 trở về sau.
Dựa vào bảng phân tích trên, ta tiến hành chia phần cài đặt ra các phần sau.
Phần có thể sử dụng chung:
Chung cho tất cả các trò chơi: các thành phần chung cho toàn bộ các trò chơi. Riêng biệt của trò chơi hiện tại: ví dụ thuật toán, logic, ý tƣởng trò chơi. Phần phải cài đặt riêng: đây là phần mình phải cài đặt riêng cho từng hệ thống, tuy nhiên, các phần này đơn giản hơn nhiều so với các phần còn lại, chúng ta sẽ thiết kế để cài đặt phần này có thể sử dụng chung cho toàn bộ các trò chơi.
Từ đó, ta suy ra quy trình thực hiện như sau:
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 45
Cài đặt phần chung.
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Windows 32
Cài đặt cho windows,
Cài đặt trò chơi
Cài đặt và chuyển
Hình 19. Biễu diễn quá trình xây dựng và chuyển trò chơi.
Ta sẽ ƣu tiên xây dựng các thành phần chung nhất, sau đó hoàn thành trò chơi trên windows. Nơi chúng ta đƣợc sự trợ giúp của các công cụ và môi trƣờng quen thuộc giúp chúng ta cài đặt và gỡ rối một cách dễ dàng. Sau đó chúng ta sẽ thực hiện đƣa lên các nền tảng khác một cách dễ dàng.
3.2. Xây dựng hệ thống khả chuyển
Để dễ dàng hơn trong việc lập trình cũng nhƣ việc chuyển trò chơi từ hệ thống này sang
các nền tảng khác, ta cần phải xây dựng hệ thống theo các phƣơng pháp sau.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 46
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
3.2.1. Sử dụng các tiền xử lý
Các thông số kỹ thuật của các thiết bị tƣơng đối khác nhau, đôi khi cũng có sự khác nhau giữa các thƣ viện trên các thiết bị. Do đó ta cần phải sử dụng các định nghĩa tiền xử lí để có thể viết mã nguồn chạy tốt trên mọi hệ thống.
Các định nghĩa tiền xử lí có sẵn trên hệ thống:
WIN32: có giá trị đúng khi nền tảng biên dịch hiện tại là windows. ANDROID: có giá trị đúng khi nền tảng biên dịch hiện tại là Android.
Các cách sử dụng tiền xử lí để tăng tính khả chuyển trong chƣơng trình:
Định nghĩa các thông số: các thiết bị có thể có màn hình khác nhau, do đó ta đƣa các
#define SCREEN_W 960 #define SCREEN_H 640
thông số đó vào các định nghĩa lúc biên dịch.
Viết riêng cho từng cấu hình: sử dụng tiền xử lí #if, #else, #endif để viết một đoạn mã
mà chỉ chạy trên một nền tảng mong muốn.
3.2.2. Sử dụng nguyên mẫu hàm, lớp trừu tƣợng
Khai báo một nguyên mẫu hàm, lớp trừu tƣợng chung cho tất cả các hệ thống sau đó ta
cài đặt khác nhau trên mỗi nền tảng khác nhau.
// Play Sound void PlaySound(int id, int loop = 1);
// Stop all sound void StopSound();
Ví dụ, do xử lí âm thanh trong trò chơi này tƣơng đối đơn giản, do đó, ta cần hai hàm để thực hiện chơi một âm thanh bất kỳ và dừng tất cả các âm thanh đang chơi. Ta khai báo nguyên mẫu hàm nhƣ sau:
Và sau đó ta sẽ viết hàm này trên các hệ thống khác nhau sử dụng tiền xử lý nhƣ phƣơng
pháp trên.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 47
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
3.3. Cấu trúc của một Trò chơi
3.3.1. Vòng lặp trò chơi
Vòng lặp trò chơi chính là trung tâm của trò chơi. Trò chơi khác hẳn với các ứng dụng hƣớng sự kiện khác, ngay cả khi không có sự kiện xuất nhập, trò chơi vẫn phải hoạt động và đáp ứng liên tục để tạo ra hiệu ứng hoạt động của các nhân vật, đối tƣợng trong trò chơi.
Có thể ví dụ trò chơi nhƣ một cuốn phim hoạt hình mà ngƣời chơi có thể tƣơng tác với các nhân vật trong trò chơi. Để tạo đƣợc hiệu ứng hoạt hình, trò chơi phải vẽ hơn 12 hình trên một giây để đảm bảo hiệu ứng hoạt hình. Ngoài ra trò chơi cần phải tính toán, xử lí các sự kiện phát sinh, tính toán các vật thể, các nhân vật và hoạt động trong trò chơi.
Đó là hai công việc chính của vòng lặp trò chơi
Đúng
Kết thúc
Sai
Xử lí sự kiện
Vẽ
- Cập nhật, tính toán trạng thái hiện tại. - Vẽ các nhân vật, đối tƣợng, giao diện màn hình.
Hình 20. Biễu diễn vòng lặp của trò chơi
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 48
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Hai hành động này đƣợc lặp đi lặp lại liên tiếp nhau trong suốt trò chơi hình thành nên vòng lặp chính của trò chơi. Để mọi việc rõ ràng và dễ dàng hơn, chúng ta nên tách riêng biệt hai hành động này và sử dụng các biến trạng thái để lập trình.
Ví dụ:
Trong game cần vẽ một quả bóng di động. Ta nhận thấy:
- Để xử lí cập nhật, tính toán trạng thái của quả bóng ta cần các thông tin bao gồm: bán kính
bóng, vị trí trái bóng, và vận tốc của trái bóng.
- Để vẽ trái bóng lên màn hình: ta cần biết các thông tin: bán kính, vị trí.
Bán kính, vị trí, vận tốc: chính là các biến trạng thái chung cho chƣơng trình. Sử dụng các biến trạng thái này, ở hành động cập nhật, ta không cần quan tâm trái bóng đƣợc vẽ nhƣ thế nào vẫn có thể thực hiện đƣợc và ngƣợc lại. Việc nhìn một góc nhìn riêng biệt sẽ khiến chúng ta làm mọi việc dễ dàng và đơn giản hơn nhiều.
Số lần vẽ/cập nhật trên một giây gọi là FPS (Frame per second). Thông thƣờng, một trò chơi 3D có số FPS chuẩn là 60 FPS. Số FPS càng lớn thì trò chơi chạy càng mƣợt mà, tuy nhiên nếu số FPS quá lớn thì sẽ gây hiện tƣợng trò chơi quá nhanh, ngƣời dùng không thể chơi tốt đƣợc, khi đó, chúng ta cần phải giới hạn số FPS lại một giá trị mong muốn.
FPS là giá trị phụ thuộc nhiều vào cấu hình của thiết bị, do đó: việc chuyển đổi trò chơi trên nhiều hệ thống khác nhau sẽ dẫn đến số FPS khác nhau. Trên một thiết bị mạnh hơn, số FPS sẽ tăng lên, do đó chúng ta sẽ phải giới hạn lại. Ngƣợc lại, chúng ta cần tối ƣu hóa thuật toán, cách vẽ hoặc chỉnh sửa nội dung của trò chơi đó để đạt đƣợc số FPS mong muốn tạo ra kết quả tối ƣu cho ngƣời chơi.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 49
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
3.3.2. Cấu trúc trò chơi
Hình 21. Cấu trúc của một trò chơi
Một trò chơi bao gồm nhiều giao diện khác nhau. Ví dụ: bảng chọn chính, mục giới thiệu trò chơi, mục điểm cao nhất và trò chơi. Để tích hợp điều này vào vòng lặp chính, chúng ta sẽ có một biến trạng thái lƣu lại giao diện hiện tại của trò chơi, rồi theo đó xử lí tƣơng ứng.
Dựa vào biến trạng thái chúng ta sẽ lƣu lại giao diện hiện tại và xử lí trạng thái tƣơng
ứng. Tƣơng tự nhƣ trong hàm cập nhật hoặc hàm vẽ.
Trong thiết kế trò chơi của mình, tôi đưa ra các giao diện sau
- Bảng chọn chính: Hiển thị các mục để ngƣời chơi có thể truy xuất đƣợc các mục khác
trong trò chơi.
- Điểm cao: Ghi lại các kỷ lục đƣợc lập trong trò chơi. - Giới thiệu: Giới thiệu sơ lƣợc về trò chơi. - Trò chơi: nơi ngƣời chơi chơi và ghi điểm. - Kết thúc trò chơi: Khi ngƣời chơi bị mất hết mạng.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 50
Xử lí sự kiện
Trạng thái hiện tại
Xử lí bảng chọn
Xử lí trò chơi
Xử lí giới thiệu
Vẽ
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Hình 22. Giao diện của trò chơi
Chọn Xem Điểm
Chọn Giới thiệu
Xem Điểm
Bảng chọn chính
Giới Thiệu
Chọn Vào chơi
Vào chơi
Mất hết mạng
Hết
Chọn nút quay lại
-
Các trạng thái của trò chơi
Hình 23. Trạng thái của trò chơi
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 51
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
3.3.3. Nội dung trò chơi
Trò chơi mô phỏng hành động cắt trái cây của một kiếm sĩ. Trò chơi chỉ có một chế độ chơi duy nhất tính điểm. Ngƣời chơi đƣợc bắt đầu với năm mạng và một thanh kiếm. Trái cây lần lƣợt đƣợc tung lên từ bên dƣới, ngƣời chơi có nhiệm vụ sử dụng kiếm để cắt trái cây ra làm đôi trƣớc khi trái cây đó rơi ra khỏi tầm nhìn. Cứ mỗi trái cây cắt thành công, ngƣời chơi sẽ dành đƣợc một điểm.
Độ khó của trò chơi: tăng dần, cứ 50 điểm đạt đƣợc, trò chơi sẽ xuất hiện thêm một trái
cây khiến mức độ khó của trò chơi tăng lên. Ngƣợc lại ngƣời chơi sẽ đƣợc tặng một mạng.
Trò chơi kết thúc: khi ngƣời chơi mất tất cả các số mạng của mình. Cứ mỗi khi ngƣời
chơi làm rơi một trái cây, ngƣời chơi sẽ bị trừ một mạng.
Các thiết kế thuật toán:
Chuyển động của trái cây:
Ban đầu vị trí P trái cây đƣợc đặt bên dƣới màn hình. Trái cây đƣợc cung cấp một vận . Theo đó, sau . Trong môi trƣờng tồn tại gia tốc trọng trƣờng và tốc ban đầu
mỗi khung hình, ta có cập nhật trạng thái của trái cây đã cho nhƣ sau:
P
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 52
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Hình 24. Biễu diễn chuyển động của trái cây
Thanh kiếm của ngƣời chơi:
Thanh kiếm, vết chém của ngƣời chơi đƣợc nhập từ màn hình thông qua cảm ứng chạm. Dữ liệu vào tƣơng đối rời rạc do hạn chế của hệ điều hành. Ví dụ khi ngƣời dùng lƣợt tay trên màn hình thì sẽ có khoảng n điểm đƣợc ghi lại (không phải tất cả các điểm). Từ những dữ liệu này, chúng ta xây dựng thành thanh kiếm có hình dạng tƣơng đối nhƣ hình.
Chạm và các điểm được ghi nhận
Quy tắc:
Thanh kiếm sau khi được render
DB = BC = w/2.Trong đó, w là độ rộng của
D B
thanh kiếm tại B.
A
C Hình 25. Biễu diễn thanh kiếm của người chơi
Kiểm tra va chạm:
Ta kiểm tra va chạm giữa thanh kiếm và trái cây bằng cách kiểm tra va chạm giữa thanh
kiếm và hình chữ nhật viền xung quanh trái cây.
Hình 26. Biễu diễn va chạm giữa thanh kiếm và trái cây
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 53
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Tính toán tọa độ sau va chạm:
Trƣớc khi va chạm: Gia tốc của vật là . Sau khi va chạm: Trái cây đƣợc cắt làm 2, và
đƣợc truyền thêm một gia tốc tƣơng ứng do lực chém truyền vào là . Gia tốc sau:
.
Hình 27. Biễu diễn tính toán tọa độ sau va chạm
3.3.4. Đồ họa
Chúng ta sử dụng bộ thƣ viện OPENGL ES 2.0. Ta cài đặt một số phƣơng thức để vẽ
một đối tƣợng 3D và vẽ giao diện 2D.
Vẽ đối tƣợng 3D:
- Một đối tƣợng 3D bao gồm định nghĩa về tọa độ và một đối tƣợng texture đƣợc lƣu riêng
rẻ.
- Dữ liệu về tọa độ trong trò chơi đƣợc tạo ra bằng phần mềm 3DS Max Studio, và sau đó đƣợc xuất ra tập tin văn bản kiểu obj (wave front object), đây là dữ liệu bao gồm các thông tin để vẽ một đối tƣợng:
Tọa độ. (vertex position). UV. (textcoord). Vector Normal. (để tính toán ánh sáng).
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 54
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
- Đối tƣợng 3D trong trò chơi chủ yếu là trái cây và đã đƣợc cắt sẵn ra làm 2 phần bằng
nhau đễ dễ dàng xử lí trong trò chơi.
Hình 28. Biễu diễn đối tượng 3D trong trò chơi
Các đối tƣợng này đƣợc tự vẽ để đảm bảo tính đơn giản và tăng tốc độ thực thi trong
chƣơng trình.
Vẽ giao diện 2D:
Giao diện 2D là một phần không thể thiếu trong trò chơi, vì nó là phần quan trọng để thể
hiện thông tin tới ngƣời dùng.
Để vẽ 2D trong OpenGL ES 2.0 chúng ta tạo một texture rồi tiến hành vẽ từng bộ đôi tam
giác 1 ra màn hình. Ví dụ, để vẽ hình bên dƣới thì chúng ta vẽ hai tam giác nhƣ sau:
Hình 29. Biễu diễn giao diện 2D
Để tạo ra toàn bộ giao diện 2D trong chƣơng trình, ta nén tất cả vào một texture có kích
thƣớc lớn, sau đó tải vào bộ nhớ và vẽ từng bộ đôi tam giác nhƣ mô hình trên.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 55
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Hình 30. Biễu diễn cách bố trí để vẽ giao diện 2D trong trò chơi
3.3.5. Âm Thanh
Trò chơi tƣơng đối đơn giản, do đó trong chƣơng trình ta có hai loại âm thanh sau:
Âm thanh nền.
Âm thanh hiệu ứng.
Ta có bản thiết kế âm thanh nhƣ sau:
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 56
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Mô tả Nhạc nền. Âm hiệu ứng Tên âm thanh MUSIC_TITLE CUT
Nhạc nền. Kích hoạt Kích hoạt tại bảng chọn chính. Ngƣời dùng chọn một menu. Ngƣời dùng cắt thành công một trái cây. Khi trò chơi kết thúc. GAME_OVER
Bảng 5. Bản thiết kế âm thanh
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 57
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
CHƢƠNG 4 QUÁ TRÌNH LẬP TRÌNH
4.1. Thiết kế chương trình
Dựa vào các phân tích, ta có thiết kế khung của một chƣơng trình.
Hình 31. Biễu diễn khung thiết kế của chương trình
- Lớp Application là bộ giao tiếp giữa ứng dụng và các nền tảng.
- Lớp FileSystem là lớp trừu tƣợng đƣợc dùng để thực hiện các hành động đọc/ghi tập
tin.
-Lớp VideoDriver: là lớp cài đặt các phƣơng thức vẽ hình liên quan đến OpenGLES
2.0.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 58
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
- Lớp Sprite2DManager, Sprite3DManager là lớp chịu trách nhiệm tải các đối tƣợng
3D cũng nhƣ giao diện 2D và vẽ lên trong chƣơng trình.
Ở mỗi nền tảng các đối tƣợng này sẽ đƣợc kế thừa và cài đặt khác nhau nếu cần thiết.
Hình 32. Cách kế thừa các lớp trừ tượng trên các nền tảng khác nhau
Đây là bộ khung cần thiết để chúng ta tiến hành xây dựng các thành phần trong
chƣơng trình.
4.2. Vòng lặp trò chơi
Chúng ta thực hiện vòng lặp trò chơi qua hai phƣơng thức của lớp Application, đó là
phƣơng thức Update() và Render().
- Phƣơng thức Update: cập nhật trạng thái của trò chơi.
- Phƣơng thức Render: Render nội dung của trò chơi ra màn hình thiết bị.
void UpdateGame(int type) {
switch (s_iCurrentState) {
Do trò chơi bao gồm nhiều giao diện (bảng chọn chính, xem kỷ lục, xem giới thiệu, chơi game…). Chúng ta sẽ khai báo một biến trạng thái để lƣu trữ trạng thái hiện tại. Sau đó ở hàm Update và Render, chúng ta sẽ dựa vào biến trạng thái này để cập nhật trò chơi.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 59
case GAME_START: UpdateGameStart(type); break; case MAIN_MENU:
UpdateMainMenu(type);
…
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Ứng với mỗi trạng thái ta sử dụng một chỉ thị để xác định hành động hiện tại là Paint
hay Render. Ngoài ra mỗi trạng thái cần có các hành động để tải và hủy bỏ các đối tƣợng trên.
- UPDATE: Cập nhật trạng thái hiện tại. - PAINT: Render trạng thái hiện tại. - CTOR: Tải các đối tƣợng cần thiết để vẽ và tính toán trạng thái hiện tại. - DTOR: Hủy bỏ các biến đã sử dụng trong trạng thái hiện tại.
Hình 33. Biễu diễn vòng lặp của trò chơi
4.3. Nội dung trò chơi
Chúng ta định nghĩa các biến trạng thái rồi lần lƣợt cài đặt các nội dung nhƣ sau:
float x; float y; float ax; float ay; int model;
enum {ST_NORMAL, ST_CUT, ST_HIDDEN}; struct Fruit { int status; };
Các biến dùng để vẽ và cập nhật trái cây:
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 60
Fruit fruits[MAX];
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
int blades[MAX_BLADE][2]; int bladesLength = 0; Ta có vòng đời của một trái cây nhƣ sau:
Các biến dùng để lƣu trữ và xử lí nhập từ ngƣời chơi:
Hình 34. Vòng đời của một trái cây
Các chức năng cài đặt:
// gán gia tốc fruits[i].ay = 0.28f; fruits[i].ax = (rand() % 10 - 5) * 0.01f; // gán vịtrí fruits[i].y = -2.8f; fruits[i].x = (rand() % 90) / 10.0f - 4.0f; // gán trạng thái fruits[i].status = ST_NORMAL; // gán loại trái cây fruits[i].model = (rand() % 3) * 3;
4.3.1. Khởi tạo vị trí hiện tại của trái cây
fruits[i].status = ST_HIDDEN;
// Tính toán lại gia tốc fruits[i].ay -= 0.007f; fruits[i].y += fruits[i].ay; fruits[i].x += fruits[i].ax; // Xác định lại trạng thái if (fruits[i].y < -3.0f) { }
4.3.2. Cập nhật trạng thái của trái cây
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 61
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
4.3.3. Kiểm tra va chạm
Chúng ta kiểm tra cắt nhau giữa các điểm thuộc thanh kiếm và đƣờng biên va chạm của
trái cây nhƣ sau:
float cx = blades[bladesLength - 2][0] + vx * j * stepLength; float cy = blades[bladesLength - 2][1] + vy * j * stepLength; if(fruits[i].status == ST_NORMAL && PointerInRect(cx, cy, ax - 56, ay - 58, 112, 116)) {
// Đã cắt nhau…
// ax, ay là tọa độ của trái cây.
fruits[i].ax += 0.02f * vx; fruits[i].ay += 0.02f * vy; fruits[i].model = fruits[i].model + 1; fruits[i].status = ST_CUT;
4.3.4. Tính toán lại các trạng thái sau khi va chạm
fruits[i + 1].ax = -fruits[i].ax; fruits[i + 1].x = fruits[i].x; fruits[i + 1].y = fruits[i].y; fruits[i + 1].ay = -fruits[i].ay; fruits[i + 1].model = fruits[i].model + 1; fruits[i + 1].status = ST_CUT;
Tuy nhiên bây giờ, trái cây của chúng ta đã đƣợc cắt làm 2: do đó, chúng ta sẽ có:
4.4. Đồ Họa
Sơ đồ hoạt động của OpenGLES 2.0 trong chƣơng trình nhƣ sau:
Hình 35. Sơ đồ hoạt động của OpenGl ES 2.0 trong chương trình
Để cài đặt đồ họa với OpenGLES 2.0 chúng ta cần phải cài đặt các tính năng sau.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 62
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
4.4.1.Tải shader và biên dịch
OpenGLES 2.0 cung cấp một đƣờng ống để chúng ta có thể lập trình cách thức hoạt
động của bộ xử lí đồ họa.
Shader là bộ điều khiển hoạt động của OpenGLES 2.0 và đƣợc chạy ngay trên bộ xử lí đồ họa. Shader đƣợc viết bằng ngôn ngữ shader (glsl) và bao gồm hai phần: shader đỉnh (vertex shader) và shader điểm ảnh (fragment shader). Ứng dụng OpenGLES 2.0 chỉ có thể hoạt động khi đã đƣợc xác định một cặp shader trong hệ thống. Do đó chúng ta phải cài đặt shader cho lớp xử lí đồ họa của mình.
- Tải shader từ tập tin. - Biên dịch shader. - Liên kết shader thành chƣơng trình. - Sử dụng chƣơng trình đó để vẽ.
4.4.2. Vẽ một đối tƣợng 3D
Để vẽ một đối tƣợng 3D, chúng ta sử dụng phép chiếu phối cảnh. Một đối tƣợng 3D
đƣợc xác định bởi các thuộc tính:
- Vị trí, dữ liệu, màu sắc, UV của từng đỉnh thuộc đối tƣợng. - Quan hệ giữa các đỉnh thuộc đối tƣợng. - Texture: hình ảnh đƣợc áp lên đối tƣợng đó.
Trong chƣơng trình, vị trí, dữ liệu, màu sắc, uv của đối tƣợng đƣợc lƣu dƣới dạng file
.OBJ có định dạng nhƣ sau:
v $x $y $z ; đỉnh có tọa độ x y z
vt $u $v ; tọa độ uv của đối tƣợng.
vn $x $y $z ; vec-tơ chính phƣơng.
f $i/$j/$k $i’/$j’/$k’ $i’’/$j’’/$k’’; Xác định một mặt tam giác của đối tƣợng, trong đó:
$i: vị trí của tọa độ, $j: vị trí của uv, $k: vị trí của vector chính phƣơng tại đỉnh đó,
Các thông tin này đƣợc nén lại vào một file nhị phân chứa nhiều đối tƣợng cùng lúc
mục đích: dễ dàng tải và thực hiện trong chƣơng trình.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 63
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Lúc vẽ, chúng ta truyền các tham số này vào một shader trong OPENGL ES và bộ xử lí
driver->SetArray(ATTRIB_VERTEX, 3, meshes[i].vertices); driver->SetArray(ATTRIB_TEX_COORD, 2, meshes[i].texCoords); //driver->SetArray(ATTRIB_NORMAL, 3, meshes[i].normals); driver->SetTexture2D(0, manager-
>GetTexture(meshes[i].textureId));
driver->DrawArray(TRIANGLES, meshes[i].nVertices);
đồ họa sẽ vẽ đối tƣợng này lên màn hình.
4.4.3. Vẽ một đối tƣợng 2D
Để vẽ một đối tƣợng 2D, chúng ta sử dụng phép chiếu vuông góc. Tƣơng tự nhƣ đối tƣợng 3D, chúng ta sẽ lƣu thông tin của các đối tƣợng 2D vào một file nhị phân, sau đó tải vào bộ nhớ và vẽ ra.
4.5. Nhập
Ta sử dụng hàm PointerEvent trong đối tƣợng Application để nhận và xử lí các sự kiện
case WM_LBUTTONDOWN: mouseDown = true; bt::core::Application::GetApplication()
->PointerEvent(bt::core::POINTER_START, x, y);
break; case WM_MOUSEMOVE: if (mouseDown) { bt::core::Application::GetApplication()
->PointerEvent(bt::core::POINTER_MOVED, x, y);
}; break; case WM_LBUTTONUP: mouseDown = false; bt::core::Application::GetApplication()
->PointerEvent(bt::core::POINTER_ENDED, x, y);
break;
nhập từ cảm ứng / chuột. Ở trên windows, ta xử lí nhƣ sau:
Ở trong trò chơi của mình, chúng ta chỉ cần cài đặt và xử lí hàm PointerEvent mà không
cần phải biết thật sự cảm ứng/chuột đƣợc nhận nhƣ thế nào.
Ví dụ:
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 64
if (pointerState == POINTER_START &&
PointerInRect(m_iLastPointerX, m_iLastPointerY,
SCREEN_W - 100, SCREEN_H - 100, 100, 100))
{ SwitchState(MAIN_MENU); }
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
4.6. Âm thanh
// Play Sound void PlaySound(int id, int loop = 1); // Stop all sound void StopSound();
Ta đƣa ra hai phƣơng thức để chơi âm thanh:
Tuy nhiên, trong windows, chúng ta không xử lí âm thanh – do không cần thiết và
không có đủ thời gian để thực hiện.
4.7. Giao diện ứng dụng
Ứng dụng của chúng ta xây dựng là ứng dụng console: để có giao diện giúp chúng ta
debug dễ dàng. Đầu vào của ứng dụng là hàm main() -> chúng ta thực hiện các việc sau:
- Khởi tạo ứng dụng.
- Tạo cửa sổ và khởi tạo đối tƣợng OpenGL ES 2.0.
- Bắt đầu trò chơi.
app->StartApp(); while (!exit) { // Update and Paint app->Update(); app->Render(); eglSwapBuffers(context->display, context->surface); }; app->Destroyed();
- Gọi vòng lặp trò chơi.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 65
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
4.8. Giao diện xuất nhập tập tin
Việc xuất nhập tập tin trong windows tƣơng đối đơn giản. Chúng ta chỉ cần sử dụng các
// Open a file in Windows 32bits so easily FILE* Win32FileSystem::OpenFile(const char *filename, const char *mode) { FILE *file; fopen_s(&file, filename, mode); return file; };
phƣơng thức cơ bản của thƣ viện
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 66
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
CHƢƠNG 5 QUY TRÌNH CHUYỂN TRÕ CHƠI
Sau khi thực hiện cài đặt các bƣớc trên, ta có đƣợc ứng dụng trò chơi hoàn chỉnh trên windows. Tuy nhiên, mục tiêu của chúng ta là khiến chƣơng trình đó chạy đƣợc trên các thiết bị Android. Để làm đƣợc điều đó, chúng ta cần phải tiến hành chuyển sang Android OS. Để làm đƣợc điều đó ta cần phải cài đặt các thành phần khác nhau trên hệ thống này.
5.1. Chuyển sang Android
5.1.1 Cài đặt phần mềm
Để tạo môi trƣờng phát triển trên Android ta cần cài đặt các công cụ sau:
- Java SDK: yêu cầu để chạy ứng dụng Java. - Cygwin 1.7 trở về sau: dùng để giả lập môi trƣờng phát triển linux, gcc và chạy NDK. - Android SDK: cần thiết để biên dịch, đóng gói ứng dụng Android. Ngoài ra Android SDK còn cung cấp cho chúng ta các công cụ để tƣơng tác với thiết bị di động, và bộ giả lập.
- Android NDK: Dùng để biên dịch mã nguồn C ra thƣ viện từ đó gọi từ java.
5.1.2. Hoạt động của JNI và quy trình biên dịch
Nhƣ chúng ta đều biết, ứng dụng android chạy trên nền chính là Java. Muốn chạy
C/C++ ta có hai giải pháp:
- Sử dụng JNI: từ android 1.5 trở về sau. - Sử dụng Native Activity: từ android 2.3 trở về sau.
Native Activity là phƣơng án lựa chọn tốt hơn, bởi vì chƣơng trình sẽ không tốn chi phí giao dịch giữa máy ảo Java và C/C++. Tuy nhiên, tới thời điểm hiện tại, số lƣợng các thiết bị hổ trợ Android 2.3 tƣơng đối hiếm nên chúng ta sẽ sử dụng giải pháp JNI.
Hoạt động của JNI đƣợc mô tả nhƣ sau:
- Các phƣơng thức JNI đƣợc đánh dấu bằng từ khóa native. - Các phƣơng thức này đƣợc viết bằng C++ và biên dịch ra thƣ viện liên kết động .so. - Thƣ viện liên kết động đƣợc Load lên trong chƣơng trình Java bằng lời gọi
System.loadLibrary(…);
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 67
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
- Khi trong chƣơng trình Java có lời gọi tới hàm native, máy ảo Java sẽ tìm kiếm trong thƣ viện động xem hàm này đã đƣợc cài đặt chƣa, sau đó các đối tƣợng Java sẽ đƣợc chuyển thành C++ để thực hiện lời gọi tới C++.
- Trong C++ cũng cung cấp các thƣ viện cho phép giao tiếp tới máy ảo và chƣơng trình Java.
Quy trình xây dựng một chƣơng trình có sử dụng JNI nhƣ sau:
- Khai báo phƣơng thức native ở trong lớp Java.
- Khai báo và cài đặt phƣơng thức này trong C. (Nếu C++ thì phải sử dụng extern “C” để
tránh sửa tên trong C++). Quy tắc đặt tên hàm đó nhƣ sau:
tengoi_tenlop_tenphuongthuc
- Sau đó dùng NDK để biên dịch mã nguồn C thành thƣ viện liên kết động và thƣ viện này
đƣợc tự động bỏ vào thƣ mục lib của dự án android.
- Viết chƣơng trình java gọi các hàm native này. - Dùng bộ SDK để biên dịch thành ứng dụng apk.
Do các bƣớc sử dụng NDK để biên dịch đƣợc thực hiện trên dấu nhắc lệnh, do đó chúng
ta sẽ tạo tập tin lệnh để thực hiện điều này.
5.1.3. Đồ họa
Android hổ trợ OpenGLES 2.0 trong NDK từ phiên bản 2.1 trở về sau. Và trong ví dụ NDK có sẵn ví dụ thực thi với OpenGL ES 2.0 nên ta có thể sử dụng ví dụ này, sau đó thay đổi các thành phần trong đó để tải ứng dụng C++ và chạy lên.
Ngoài ra để biên dịch với OpenGL ES 2.0 thì trong make file của dự án NDK ta phải
thêm dòng LOCAL_LDLIBS := -llog -lz -lGLESv2.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 68
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
5.1.4. Âm thanh
NDK không hổ trợ chơi âm thanh cho đến Android phiên bản 2.2 trở về sau. Do đó
chúng ta sẽ sử dụng Java để chạy các tập tin âm thanh.
Phần tải các tập tin âm thanh, Play Sound và StopSound đƣợc cài đặt trong Java:
Trong C++, ta cài đặt các hàm PlaySound và Stop Sound bằng cách gọi tới hàm
PlaySound trong đối tƣợng Java.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 69
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
5.1.5. Cảm ứng chạm
Trong ứng dụng Android, ta nhận sự kiện cảm ứng chạm thông qua hàm OnTouchEvent.
Từ đó ta gọi đến các hàm native trong C++ và xử lí nó.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 70
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
5.1.6. Giao diện ứng dụng
Ứng dụng Java đƣợc viết theo Activity. Trong ứng dụng Java, chúng ta tải một GLSurfaceView để thể hiện giao diện OpenGL ES 2.0. Trong các hàm này, chúng ta thêm các phƣơng thức để gọi chƣơng trình C/C++ của chúng ta từ thƣ viện native lên và thực hiện.
Các phương thức:
- onSurfaceCreate: đƣợc gọi khi đối tƣợng GLSurfaceView đƣợc tạo ra, tại đây ta cần gọi
hàm app->Init(), và app->StartGame().
- onDrawFrame: hàm đƣợc gọi khi đối tƣợng đƣợc vẽ ra. Tại đây ta cần gọi các hàm app-
>Update(), và app->Render.
5.1.7. Xử lí file
Các tập tin trong res/raw sẽ truy cập đƣợc từ Android bằng lệnh fdopen(). Tuy nhiên, ta
cần phải biết các thông số ID để thực hiện truy xuất này.
Từ Java ta có thể lấy các thông số này và truyền vào C/C++:
Trong C++ ta lƣu lại các tham số này.
Sau đó sử dụng lúc cần thiết.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 71
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Vậy là ta có thể đọc các tập tin tài nguyên và hiển thị lên trong trò chơi.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 72
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
CHƢƠNG 6 QUÁ TRÌNH CÀI ĐẶT HỆT THỐNG TRÊN MOBIE
6.1. Cài đặt hệ thống trên Android
Có 2 cách để cài đặt
Dùng Thẻ nhớ
Copy file apk sau khi build ra vào thẻ nhớ của điện thoại.
Sau đó vào điện thoại. Chọn chƣơng trình vừa copy vào thẻ nhở để cài đặt.
Dùng câu lệnh
Cắm điện thoại vào máy tính để cho máy tính kết nối với điện thoại Android. Dùng câu lệnh:
adb devices để kiểm tra xem máy tính đã kết nối với điện thoại chƣa.
Sau khi điện thoại Android đã kết nối với máy tính. Ta dùng lệnh:
Adb install -r
Cách hủy bỏ game đã cài đặt
Chúng ta vào mục setting -> Applications->Manage application. Rồi sau đó chọn vào ứng
dụng game mà chúng ta đã cài đặt trên máy. Chọn Unstill để gỡ ứng dụng game đó.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 73
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
CHƢƠNG 7 MỘT SỐ KẾT QUẢ VÀ DEMO CỦA GAME
7.1. Kết quả demo trên Windows
Màn Hình main menu
Hình 36. Kết quả demo về main menu ở trên Windows
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 74
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Ở màn hình lúc đang chơi game
Hình 37. Kết quả demo giao diện lúc đang chơi game trên windows
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 75
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Lúc người dùng chạm vào trái cây đang chuyển động
Hình 38. Kết quả demo lúc người chơi chạm vào trái cây trên windows
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 76
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Màn hình lúc bị Game over
Hình 39. Kết quả demo lúc Game over trên windows
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 77
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Màn hình Highscore
Hình 40. Demo giao diện màn hình highscore trên windows
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 78
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
7.2. Kết quả demo trên Android (điện thoại Galaxy mini)
Biểu tượng Icon của game
Hình 41. Kết quả demo biểu tượng icon của game trên Android
Màn hình Mainmenu
Hình 42. Kết quả demo màn hình mainmenu trên Android
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 79
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Màn hình Gameplay
Hình 43. Kết quả demo màn hình game play trên Android
Màn hình Higscore
Hình 44. Kết quả demo màn hình highScore trên Android
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 80
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
Màn hình GameOver
Hình 45. Kết quả demo màn hình GameOver trên Android
Màn hình About
Hình 46. Kết quả demo màn hình About trên Android
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 81
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
CHƢƠNG 8 KẾT LUẬN
8.1. Kết quả đạt được
Tìm hiểu đƣợc cách xây dựng một game đa nền tảng, và quả trình chuyển game từ
windows sang Android.
Biết đƣợc cấu trúc của một game 3D.
Xây dựng thành công một game 3D trên hệ điều hành Windows và ĐTDĐ có HĐH
Android với giao diện thân thiện và dễ sử dụng.
8.2. Những vấn đề còn tồn đọng
Các tính năng của game còn khá đơn giản.
8.3. Hướng phát triển của đề tài
Xây dựng thêm các tính năng mới của game : xuất nhập tên ngƣời chơi, Tạo thêm các
hiệu ứng cho game. Và đặc biệt là phát triển để game có thể chuyển qua Không chỉ có
windows, Adroid mà trên còn nhiều hệ điều hành khác nữa.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 82
Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android
TÀI LIỆU THAM KHẢO
[1] Trang web: http://fly.cc.fer.hr/~unreal/theredbook/ [2] Lê Phong: Hƣớng dẫn lập trình OpenGL căn bản. [3] Trang web: http://glprogramming.com/red/ [4] Lê Tấn Hùng, Huỳnh Quyết Thắng: kỹ thuật đồ họa. Nhà xuất bản khoa học và kỹ thuật, Hà Nội-2000.
[5] Donald Hearn, M. Pauline Baker: Computer Graphics, Prentice-Hall, Inc., Englewood Cliffs, New Jersey, 1986.
[6] Trang web: http://forums.gamevn.com/archive/index.php/t-43474.html,
www.vietnamandroid.com, …
[7] Và một số tài liệu khác.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 83