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à
Trang 1KHÓA LUẬN TỐT NGHIỆP
NGÀNH CÔNG NGHỆ THÔNG TIN
Trang 2SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 2
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
Trang 3SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 3
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
Trang 4SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 4
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
Trang 5SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 5
LỜI CAM ĐOAN
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
Trang 6SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 6
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
Trang 7SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 7
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
Trang 8SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 8
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
Trang 9SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 9
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
Trang 10SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 10
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
Trang 11SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 11
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
Trang 12SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 12
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
Trang 13SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 13
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
Trang 14SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 14
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)
Trang 15SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 15
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ể)
Trang 16SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 16
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
Trang 17SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 17
• 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ữ:
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:
Trang 18SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 18
Hậu tố Kiểu dữ liệu Tương ứng với
kiểu trong C
Tương ứng với kiểu trong OpenGL
GLuint, GLenum, Glbitfield
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 ý:
Trang 19SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 19
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ợ:
• Video game consoles
Hệ tọa độ của OpenGL
Trang 20SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 20
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
Trang 21SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 21
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
Trang 22SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 22
Đườ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ợ
Trang 23SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 23
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
Trang 24SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 24
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
Trang 25Đượ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
Trang 26SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 26
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
Trang 27 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
Trang 28Hì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ệ
Trang 29SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 29
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)
}
Trang 30Pz’ = -Px * Sin (a) + Pz * Cos (a)
Py’ = Px * Sin (a) + Py * Cos (a)
}
Trang 31SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 31
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
Trang 32SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 32
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
Trang 33SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 33
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
Trang 34SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 34
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
Trang 35SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 35
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
Trang 36 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ị
Trang 37SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 37
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…
Trang 38• 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
Trang 39SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 39
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
Trang 40SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 40
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 <uses- sdk> phần tử trong file mainfese của nó, với một giá trị thuộc tính của
android:minSdkVersion 3 hoặc lớn hơn
Ví dụ:
<manifest>
<uses-sdk android:minSdkVersion="3" />