Đây là khóa luận tốt nghiệp của mình, khóa luận trình bày cơ bản về Android và cách làm game đơn giản. Khóa luận này đạt điểm tối đa, trong khóa luận có các ví dụ rất chi tiết.
Trang 1KHOA CÔNG NGHỆ
KHÓA LUẬN TỐT NGHIỆP
Đề tài: Nghiên cứu đồ họa 2D, 3D
và phát triển Game trên hệ điều hành Android
Sinh viên: Đặng Văn Giỏi Ngành: Công Nghệ Thông Tin
Giảng viên hướng dẫn: ThS Đinh Đức Hùng
Hà Nội 5/5/2012
Trang 2Lời cảm ơn
Lời đầu tiên, em xin chân thành cảm ơn thầy Đinh Đức Hùng, người đã tận
tình giúp đỡ em để em có thể hoàn thành khóa luận này một cách tốt nhất.
Em cũng xin chân thành cảm ơn các thầy, cô giáo trong khoa Công nghệ,
trường Đại học Hòa Bình đã tận tình giảng dạy, truyền đạt cho em những kiến thức,kinh nghiệm quý báu và giúp đỡ em trong suốt quá trình học tập.
Và tôi xin cảm ơn tất cả những người bạn của tôi, những người đã và đang
luôn động viên, chia sẻ và giúp đỡ tôi tận tình trong suốt thời gian học tập cũng nhưthực hiện khóa luận này.
Cuối cùng, con kính gửi lời cảm ơn sâu sắc nhất tới gia đình, cám ơn cha mẹ
đã tạo điều kiện tốt nhất cho con học tập để có được như ngày hôm nay Và xin cảmơn tất cả mọi người đã tin tưởng, khích lệ và động viên tôi trong suốt thời gian qua.
Hà Nội, ngày 5 tháng 5 năm 2012
Đặng Văn Giỏi
Trang 3TÓM TẮT NỘI DUNG CỦA KHÓA LUẬN
Tên đề tài: “ Nghiên cứu đồ họa 2D, 3D và phát triển Game trên hệ điều hành
Chương 1: Giới thiệu hệ điều hành Android.
Nội dung chính của chương một là giới thiệu một cách tổng quan về hệđiều hành Android Cung cấp những kỹ thuật cơ bản để cài đặt bộ công cụ pháttriển ứng dụng.
Chương 2: Nghiên cứu lý thuyết đồ họa 2D, 3D.
Giới thiệu lý thuyết đồ họa 2D, 3D
Những thành phần cơ bản của đồ họa máy tính Các ứng dụng sử dụng kỹ thuật đồ họa 2D, 3D.
Chương 3: Nghiên cứu đồ họa 2D, 3D và viết chương trình mẫu trên hệ điều hànhAndroid.
Tìm hiểu lý thuyết đồ họa của hệ điều hành Android, một số thành phầnquan trọng của đồ họa 2D, 3D của hệ điều hành này
Xây dựng hai ví dụ minh họa về đồ họa 2D, 3D Viết trò chơi BomOffline 2D và xây dựng ý tưởng cho trò chơi Line3D.
Chương 4: Kết luận và hướng phát triển trong tương lai.
Trình bày các kết quả đạt được và những khó khăn cần giải quyết Địnhhướng phát triển trong tương lai.
Trang 4Danh mục thuật ngữ và từ viết tắt được sử dụng
1 2D 2 Chiều2 3D 3 Chiều
3 3G Third Generation Technology – Thế hệ thứ 34 GPS Định vị toàn cấu
5 EDGE Enhanced Data Rates for GSM Evolution EDGE (công nghệ webtrên di động nâng cấp từ GPRS)
6 NFC Near Field Communication – Giao tiếp trường gần
7 XML eXtensible Markup Language - Ngôn ngữ Đánh dấu Mở rộng8 SDK Software Development Kit - Phát triển phần mềm
9 ADT Android Development Tools – Công cụ phát triển Android
10 API Application Programming Interface – Giao diện lập trình ứng dụng
Trang 5Danh mục các hình dùng trong khóa luận
Hình 1.Kiến chúc hệ điều hành Android
Hình 2: Bảng liệt kê một số kiểu file trong Linux.Hình 3: Mô tả cây thư mục.
Hình 4: Tóm tắt quá trình cập nhật các phiên bản tính đến năm 2011.Hình 5: Các gói cho các hệ điều hành.
Hình 6: Kết quả khi chạy file SDK Manager.Hình 7: Add ADT.
Hình 20: Giao diện khi người chơi thua cuộc.Hình 21: Giao diện khi người chơi thắng cuộc.Hình 22: Giao diện lưu điểm.
Hình 23: Hiện thị danh sách điểm cao.Hình 24: Ví dụ 1 map (bản đồ).
Hình 25: Vị trí pX, pY nằm trên TMXLayer.HÌnh 26: Vị trí pX, pY nằm ngoài TMXLayer.Hình 27: Ảnh nền phần menu chính.
Trang 6Hình 28: 3 ảnh thể hiện 3 chức năng chính hiện thị trên menu.Hình 29: 3 ảnh dùng trong phần giao diện chính của Game.Hình 30: Giao diện menu Game Line3D.
Hình 31: Giao diện chơi Game Line3D.Hình 32: Ví dụ minh họa cách tính ăn viên bi.
Trang 7MỤC LỤC
Lời cảm ơn 1
TÓM TẮT NỘI DUNG CỦA KHÓA LUẬN 2
Danh mục thuật ngữ và từ viết tắt được sử dụng 3
Danh mục các hình dùng trong khóa luận 4
Lời mở đầu 9
Chương 1: Giới thiệu hệ điều hành Android 11
1.1Giới thiệu chung về hệ điều hành Android 11
1.1.1Giới thiệu chung về hệ điều hành Android 11
1.1.2Kiến trúc hệ điều hành Android 13
1.1.2.1 Tầng hạt nhân Linux (Linux Kernel layer) 13
1.1.2.2Phần Libraries 14
1.1.2.3Phần Android runtime 14
1.1.2.4Tầng Application Framework 14
1.1.2.5Tầng Application 15
1.1.3Hệ thống tập tin trên hệ điều hành 16
1.1.3.1 Tổng quan về hệ thống file trên Android 16
1.1.3.2 Các kiểu file trên Android 17
1.1.3.3 Tổ chức quyền sở hữu và quyền hạn trên file 17
1.1.3.4 Cây thư mục trên hệ điều hành Android 19
1.1.4So sánh giữa các hệ điều hành 19
1.1.4.1 So sánh giữa hệ điều hành di động và hệ điều hành trên desktop 19
1.1.4.2 So sánh hệ điều hành Android với các hệ điều hành di động khác 20
1.2Lịch sử phát triển và hướng phát triển trong tương lai 21
Chương 2: Nghiên cứu lý thuyết đồ họa 2D, 3D 26
2.1Đồ họa nói chung 26
2.1.1Giới thiệu chung 26
Trang 82.2Đồ họa 2D 30
2.3Đồ họa 3D 30
Chương 3: Nghiên cứu đồ họa 2D, 3D của hệ điều hành Android và viết chương trình minh họa 31
3.1Đồ họa trong Android 31
3.1.1Giới thiệu chung về đồ họa Android 31
3.2Đồ họa 2D trong Android 31
3.2.1Một số thành phần trong đồ họa 2D 31
3.2.2Chương trình minh họa 35
3.3Đồ họa 3D trong Android 38
3.3.1 Một số thành phần trong đồ họa 3D 38
3.3.2Chương trình minh họa 40
3.4Chương trình minh họa 43
3.4.1Chương trình chính (2D) 43
3.4.1.1Mục đích chính của chương trình minh họa 43
3.4.1.2Ý tưởng thực hiện 43
3.4.1.3Phân tích chương trình 46
3.4.1.3.1 Sơ đồ hoạt động của Game 46
3.4.1.3.2 Xác định actor và mô hình use case 47
3.4.1.3.2.1 Danh sách Actor 47
3.4.1.3.2.2 Sơ đồ Use Case 47
3.4.1.3.3 Thiết kế chương trình 51
3.4.1.3.3.1 Thiết kế kiến trúc hệ thống 51
3.4.1.3.3.2 Mô tả chi tiết các thành phần 52
3.4.1.3.3.3 Một số quan hệ giữa các đối tượng 54
3.4.1.3.4 Thiết kế giao diện người dùng 55
3.4.1.3.4.1 Giao diện menu chính Xem hình 13 55
3.4.1.3.4.2 Giao diện hiện thị thông tin tác giả Xem hình 14 55
3.4.1.3.4.3 Giao diện hiện thị xác minh thoát Xem hình 15 55
3.4.1.3.4.4 Giao diện hiện thị phần giới thiệu Xem hình 16 55
3.4.1.3.4.5 Giao diện hiện thị khi tải dữ liệu Xem hình 17 55
3.4.1.3.4.6 Giao diện chính của Game Xem hình 18 55
3.4.1.3.4.7 Giao diện menu phụ Xem hình 19 55
3.4.1.3.4.8 Giao diện khi người chơi thua cuộc Xem hình 20 55
3.4.1.3.4.9 Giao diện khi người chơi thắng cuộc Xem hình 21 55
3.4.1.3.4.10 Giao diện lưu điểm Xem hình 22 55
3.4.1.3.4.11 Giao diện hiện thị danh sách điểm Xem hình 23 55
3.4.1.3.5 Thiết kế các thuật toán 55
3.4.1.3.5.1 Thuật toán xác định vị trí pX,pY có nằm trong 1 vùng của Maps 55
3.4.1.3.5.2 Thuật toán xác định va chạm giữa 2 sprite 56
3.4.1.4Viết chương trình 57
3.4.1.4.1 Hiện thị menu chính 57
3.4.1.4.2 Hiện thị phần giới thiệu về giao diện chính 59
3.4.1.4.3 Giao diện chơi Game 60
3.4.1.4.4 Hiện thị giao diện khi người chơi thua cuộc 66
3.4.1.5Kiểm thử và đánh giá chương trình 71
3.4.2Chương trình mở rộng (3D) 72
3.4.2.1Mục đích chính của chương trình minh họa 72
3.4.2.2Ý tưởng thực hiện 72
Trang 93.4.2.3Phân tích chương trình 72
3.4.2.3.1 Sơ đồ hoạt động của Game 72
3.4.2.3.2 Xác định actor và mô hình use case 73
3.4.2.3.2.1 Xác định actor 73
3.4.2.3.2.2 Sơ đồ use case và đặc tả chi tiết 73
3.4.2.3.2.2.1 Sơ đồ use case 73
3.4.2.3.2.2.2 Danh sách các use case 74
3.4.2.4Kiểm thử và đánh giá chương trình (Đang nghiên cứu) 78
Chương 4: Kết luận và hướng phát triển trong tương lai 79
4.1Kết luận 79
4.2Hướng phát triển trong tương lai 79
Tài liệu tham khảo 97
Trang 10Lời mở đầu
Ngày nay Công nghiệp giải trí hiện đang rất phát triển trên thế giới, bao gồmcác thành phần cơ bản như: Game, âm nhạc, thời trang, chương truyền hình, điện ảnh,Gameshow, truyền thông, tổ chức live show, Các mảng nằm trong ngành giải tríkhông chỉ mang tính giải trí mà còn mang nhiều giá trị về văn hóa, lối sống, phong tụcvà con người của từng vùng miền, đồng thời quảng bá hình ảnh của đất nước ViệtNam tới bè bạn khắp nơi trên thế giới.
Có thể nói một trong những ngành giải trí mang lại nhiều lợi nhuận nhất đó làngành Game Game là lĩnh vực giải trí tương tác quan trọng hàng đầu trong ngànhcông nghiệp nội dung số Doanh thu toàn cầu từ ngành này tăng trưởng nhanh chóngtừ 7 tỷ USD (1994) lên 41.9 tỷ USD (2007) và dự đoán sẽ đạt 68 tỷ USD (2012) Vớitốc độ tăng trưởng bình quân 9% một năm, Game đã trở thành ngành có tốc độ pháttriển nhanh nhất trong lĩnh vực giải trí Trong đó, Mỹ chiếm 40.42% thị phần, Anh12.45% và Nhật 11.87% Năm 2008, ngành Game ở Mỹ giá trị khoảng 22 tỷ USDvượt qua ngành công nghiệp âm nhạc (10 tỷ USD) và ngành công nghiệp phim ảnh(9,5 tỷ USD), thu hút hàng triệu lao động là các chuyên gia phát triển, phân phối vàmarketing Game.
Việt Nam là thị trường Game lớn nhất trong khu vực Đông Nam Á với hơn 20nhà phát hành Game trên cả nước Doanh thu các năm gần đây liên tục tăng trưởng vớimức trung bình 400 triệu USD/năm, chiếm 70% doanh thu của ngành nội dung số Cómức tăng trưởng ấn tượng, nhưng ngành công nghiệp Game ở Việt Nam chỉ mới dừnglại ở mức phân phối phát hành và gia công các tựa Game nước ngoài.
Một vài năm gần đây, các Studio được lập nên nhằm phát triển sản xuất Gamethuần Việt Tính đến giữa tháng 6 năm 2011, số lượng Game do Việt Nam sản xuấtđang đưa vào triển khai trên thị trường có Thuận Thiên Kiếm (VNG), SQUAD, G3,Showbiz (VTC Studio) mới đây nhất là Jay Online (FGame) Tranh Hùng (SunSoft),Game offline có 7754 – một tựa Game rất thành công lấy đề tài chiến dịch Điện BiênPhủ.
Trang 11Sự phát triển nhanh chóng của thị trường Game Việt đòi hỏi một lượng nhânlực lớn ở tất cả các khâu của quá trình sản xuất Game như: thiết kế đồ họa Game(Games Design), lập trình Game (Programming), âm thanh (Audio)…
Với sự phát triển bùng nổ của ngành Game như hiện nay, việc nghiên cứu và
phát triển Game là một hướng đi khá tốt cho các lâp trình viên Với đề tài “Nghiên
cứu đồ họa 2D, 3D và phát triển Game trên hệ điều hành Android”, tôi nghĩ rằng nó
sẽ giúp một phần nào đó cho việc hiểu và phát triển Game nói riêng cũng như ngànhcông nghiệp giải trí nói chung trong tương lai gần.
Các vấn đề chính được làm rõ trong đề tài này là:+ Lý thuyết đồ họa 2D.
+ Lý thuyết đồ họa 3D.
+ Xây dựng một ứng dụng Game hoàn chỉnh (2D) và một phần mở rộng (3D).
Trang 12Chương 1: Giới thiệu hệ điều hành Android1.1 Giới thiệu chung về hệ điều hành Android.
1.1.1 Giới thiệu chung về hệ điều hành Android.
Android là một hệ điều hành di động dựa trên nền tảng linux phiên bản 2.6 dànhcho các dòng điện thoại SmartPhone Đầu tiên được ra đời bởi công ty liên hợpAndroid, sau đó được Google mua lại và phát triển từ năm 2005 và trở thành một hệđiều hành di động mã nguồn mở, miễn phí, mạnh mẽ và được ưa chuộng cao trên thếgiới.
Hệ điều hành Android một hệ điều hành rất mạnh, có bảo mật cao, hỗ trợ đượcnhiều công nghệ tiên tiến như 3G, GPS, EDGE, Wifi, NFC tương thích với nhiềuphần cứng, hỗ trợ nhiều loại bộ nhập dữ liệu như keyboard, touch và trackball.Android là hệ điều hành di động nên có khả năng kết nối cao với các mạng không dây.Hỗ trợ công nghệ OpenGL nên có khả năng chơi các phương tiện media, hoạt hìnhcũng như trình diễn các khả năng đồ họa khác cực tốt, là tiền đề để phát triển các ứngdụng có giao diện phức tạp chẳng hạn như là các trò chơi.
Android liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần Androidđược tối ưu hóa để hoạt động tốt hơn, nhanh và ổn định hơn, hỗ trợ thêm công nghệmới Chẳng hạn như theo một đánh giá thì Android phiên bản 2.2 hoạt động nhanh hơnbản 2.1 tới 450% Hiện nay, phiên bản mới nhất 4.0.4 phát hành 2012 và đang tiếp tụcđược cập nhật.
Năm 2008, hệ điều hành Android đã chính thức mở toàn bộ mã nguồn, điều đócho phép các hãng điện thoại có thể đem mã nguồn về tùy chỉnh, thiết kế lại sao chophù hợp với mỗi mẫu mã điện thoại của họ và điều quan trọng nữa là hệ điều hành mởnày hoàn toàn miễn phí, không phải trả tiền nên giúp họ tiết kiệm khá lớn chi phí pháttriển hệ điều hành Những điều đó là cực kỳ tốt không chỉ đối với các hãng sản xuấtđiện thoại nhỏ mà ngay cả với những hãng lớn như Samsung, HTC
Với Google, vì Android hoàn toàn miễn phí, Google không thu tiền từ nhữnghãng sản xuất điện thoại, tuy không trực tiếp hưởng lợi từ Android nhưng bù lại,những dịch vụ của hãng như Google Search, Google Maps, nhờ có Android mà có
Trang 13thể dễ dàng xâm nhập nhanh vào thị trường di động vì mỗi chiếc điện thoại được sảnxuất ra đều được tích hợp hàng loạt dịch vụ của Google Từ đó hãng có thể kiếm bội,chủ yếu là từ các nguồn quảng cáo trên các dịch vụ đó.
Với các nhà phát triển ứng dụng (developers), việc hệ điều hành Android đượcsử dụng phổ biến đồng nghĩa với việc họ có thể thoải mái phát triển ứng dụng trên nềnAndroid với sự tin tưởng là ứng dụng đó sẻ có thể chạy được ngay trên nhiều dòngđiện thoại của các hãng khác nhau Họ ít phải quan tâm là đang phát triển cho điệnthoại nào, phiên bản bao nhiêu vì nền tảng Android là chung cho nhiều dòng máy, máyảo Java đã chịu trách nhiệm thực thi những ứng dụng phù hợp với mỗi dòng điện thoạimà nó đang chạy Tất cả các chương trình ứng dụng được viết bằng ngôn ngữ Java kếthợp với XML nên có khả năng khả chuyển cao.
Một số hãng sản xuất điện thoại có sử dụng hệ điều hành Android tiêu biểu :
HTC với các dòng Desire HD, Evo 4G, DROID ERIS, Desire Z, Hero,Desire, Tattoo, Wildfire, Droid Incredible, Legend, Magic, GoogleNexus One, Dream, Aria, Paradise.
LG với các dòng GT540 Optimus, Optimus Chic E720, Optimus OneP500, GW620, Optimus Z, Optimus Q, KH5200 Andro-1, GW880,C710Aloha.
MOTOROLA với các dòng MILESTONE 2, BACKFLIP, DroidXTreme, MT710 ZHILING, MILESTONE, XT720 MOTOROI, A1680,XT800 ZHISHANG, DEFY, CHARM, XT806
SAMSUNG với các dòng máy I9000 Galaxy S, Galaxy Tab, Epic 4G,i5510, I5500 Galaxy 5, I7500 Galaxy, I5800 Galaxy 3, M110S Galaxy S,I6500U Galaxy, Galaxy Q, I5700 Galaxy Spica, I8520 Galaxy Beam,I909 Galaxy S.
SONY : XPERIA X10, XPERIA X10 mini, XPERIA X8.
ACER với các dòng máy beTouch T500, Liquid E, Stream, Liquid,eTouch E110, beTouch E130, beTouch E400, beTouch E120, LiquidMetal.
Ngoài ra còn nhiều hãng điện thoại vừa và nhỏ khác nữa cũng sử dụnghệ điều hành Android trong sản phẩm của mình
Trang 141.1.2 Kiến trúc hệ điều hành Android.
Hệ điều hành Android có 4 tầng từ dưới lên trên là tầng hạt nhân Linux (Phiênbản 2.6), tầng Tầng Libraries & Android runtime , Tầng Application Framework và
trên cùng là tầng Application Xem hình 1.
1.1.2.1 Tầng hạt nhân Linux (Linux Kernel layer)
Hệ điều hành Android được phát triển dựa trên hạt nhân linux, cụ thể là hạtnhân linux phiên bản 2.6, điều đó được thể hiện ở lớp dưới cùng này Tất cả mọi hoạtđộng của điện thoại muốn thi hành được thì đều được thực hiện ở mức cấp thấp ở lớpnày bao gồm quản lý bộ nhớ (memory management), giao tiếp với phần cứng (drivermodel), thực hiện bảo mật (security), quản lý tiến trình (process).
Tuy được phát triển dựa vào nhân linux nhưng thực ra nhân linux đã được nângcấp và sửa đổi rất nhiều để phù hợp với tính chất của những thiết bị cầm tay như hạnchế về bộ vi xử lý, dung lượng bộ nhớ, kích thước màn hình, nhu cần kết nối mạngkhông dây
Tầng này có các thành phần chủ yếu :
Display Driver : Điều khiển việc hiển thị lên màn hình cũng như thunhận những điều khiển của người dùng lên màn hình (di chuyển, cảmứng ).
Camera Driver : Điều kiển hoạt động của camera, nhận luồng dữ liệutừ camera trả về.
Bluetooth Driver : Điều khiển thiết bị phát và thu sóng Bluetooth. USB driver : Quản lý hoạt động của các cổng giao tiếp USB. Keypad driver : Điều khiển bàn phím.
Wifi Driver : Chịu trách nhiệm về việc thu phát sóng wifi.
Audio Driver : điều khiển các bộ thu phát âm thanh, giải mã các tínhhiệu dạng audio thành tín hiệu số và ngược lại.
Binder IPC Driver : Chịu trách nhiệm về việc kết nối và liên lạc vớimạng vô tuyến như CDMA, GSM, 3G, 4G, E để đảm bảo nhữngchức năng truyền thông được thực hiện.
Trang 15 M-System Driver : Quản lý việc đọc ghi lên các thiết bị nhớ nhưthẻ SD, flash
Power Madagement : Giám sát việc tiêu thụ điện năng.
Tầng Library và Android runtime: Phần này có 2 thành phần là phần Library và
Thư viện SQLite : Hệ cơ sở dữ liệu để các ứng dụng có thể sử dụng.
1.1.2.3 Phần Android runtime
Phần này chứa các thư viện mà một chương trình viết bằng ngôn ngữ Java có thểhoạt động Phần này có 2 bộ phận tương tự như mô hình chạy Java trên máy tínhthường Thứ nhất là các thư viện lõi (Core Library), chứa các lớp như JAVA IO,Collections, File Access Thứ hai là một máy ảo java (Dalvik Virtual Machine)
Mặc dù cũng được viết từ ngôn ngữ Java nhưng một ứng dụng Java của hệ điềuhành Android không được chạy bằng JRE của Sun (nay là Oracle) (JVM) mà là chạybằng máy ảo Dalvik do Google phát triển.
1.1.2.4 Tầng Application Framework.
Tầng này xây dựng bộ công cụ, các phần tử ở mức cao để các lập trình viên có thểnhanh chóng xây dựng ứng dụng Nó được viết bằng Java, có khả năng sử dụng chungđể tiết kiệm tài nguyên.
Đây là một nền tảng mở, điều đó có 2 điều lợi:
Trang 16- Với các hãng sản xuất điện thoại : Có thể tùy biến để phù hợp với cấu hình điệnthoại mà họ sản xuất cũng như để có nhiều mẫu mã, style (phong cách) hợp thịhiếu người dùng Vì thế nên tuy cùng chung nền tảng Android mà điện thoạicủa Google có thể khác hẳn với Motorola, HTC, T-Mobile, Samsung
- Với lập trình viên : Cho phép lập trình viên có thể sử dụng các API ở tầng trênmà không cần phải hiểu rõ cấu trúc bên dưới, tạo điều kiện cho lập trình viên tựdo sáng tạo bởi vì chỉ cần quan tâm đến nội dung mà ứng dụng họ làm việc.Một tập hợp API rất hữu ích được xây dựng sẵn như hệ thống định vị, các dịchvụ chạy nền, liên lạc giữa các ứng dụng, các thành phần giao diện cấp cao Giới thiệu một số thành phần của phần này :
o Activity Manager : Quản lý các chu kỳ sống của một ứng dụng cũng nhưcung cấp công cụ điều khiển các Activity.
o Telephony Manager : Cung cấp công cụ để thực hiện việc liên lạc nhưgọi điện thoại.
o XMPP Service : Cung cấp công cụ để liên lạc trong thời gian thực.o Location Manager : Cho phép xác định vị trí của điện thoại thoại dựa
vào hệ thống định vị toàn cầu GPS và Google Maps.
o Window Manager : Quản lý việc xây dựng và hiển thị các giao diệnngười dùng cũng như tổ chức quản lý các giao diện giữa các ứng dụng.o Notication Manager : Quản lý việc hiển thị các thông báo (như báo có tin
nhắn, có e-mail mới ).
o Resource Manager : Quản lý tài nguyên tĩnh của các ứng dụng bao gồmcác file hình ảnh, âm thanh, layout, string (Những thành phần khôngđược viết bởi ngôn ngữ lập trình).
o
1.1.2.5 Tầng Application
Đây là lớp ứng dụng giao tiếp với người dùng, bao gồm các ứng dụng như :
Các ứng dụng cơ bản, được cài đặt đi liền với hệ điều hành là gọi điện(phone),quản lý danh bạ(Contacts), duyệt web (Browser), nhắn tin (SMS), lịch làm việc(Calendar), đọc e-mail (Email-Client), bản đồ (Map), quay phim chụp ảnh (camera)
Trang 17Các ứng dụng được cài thêm như các phần mềm chứng khoán (Stock), các trò chơi(Game), từ điển
Các chương trình có các đặc điểm là :
Viết bằng Java, phần mở rộng là apk.
Khi mỗi ứng dụng được chạy, nó có một phiên bản Virtual Machine được dựnglên để phục vụ cho nó Nó có thể là một Active Program : Chương trình có giaodiện với người sử dụng hoặc là một background : chương trình chạy nền hay làdịch vụ
Android là hệ điều hành đa nhiệm, điều đó có nghĩa là trong cùng một thờiđiểm, có thể có nhiều chương trình cùng chạy một lúc, tuy nhiên, với mỗi ứngdụng thì có duy nhất một thực thể (instance) được phép chạy mà thôi Điều đócó tác dụng hạn chế sự lạm dụng tài nguyên, giúp hệ thống hoạt động tốt hơn Các ứng dụng được gán số ID của người sử dụng nhằn phân định quyền hạn khi
sử dụng tài nguyên, cấu hình phần cứng và hệ thống
Android là một hệ điều hành có tính mở, khác với nhiều hệ điều hành di độngkhác, Android cho phép một ứng dụng của bên thứ ba được phép chạy nền Cácứng dụng đó chỉ có một hạn chế nhỏ đó là nó không được phép sử dung quá5~10% công suất CPU, điều đó nhằn để tránh độc quyền trong việc sử dụngCPU
Ứng dụng không có điểm vào cố định, không có phương thức main để bắt đầu.
1.1.3 Hệ thống tập tin trên hệ điều hành.
Trong phạm vi một bài tìm hiểu về hệ điều hành, em chỉ xin tìm hiểu rõ một vấn đềcủa hệ điều hành Android đó là vấn đề quản lý hệ thống tập tin Phần này có điểmthuận lợi để tìm hiểu đó là vì được phát triển từ nhân linux nên hệ thống tập tin trênAndroid cực kỳ giống hệ thống tập tin trên linux như là về cách tổ chức, những quyềnhạn của người sử dụng lên file
1.1.3.1 Tổng quan về hệ thống file trên Android.
Trong Android, các file được tổ chức thành các thư mục, theo mô hình phân cấp.Tham chiếu đến một file bằng tên và đường dẫn Các câu lệnh thao tác file cho phép
Trang 18thực hiện các chức năng như dịch chuyển, sao chép toàn bộ thư mục cùng với các thưmục con chứa trong nó…
Có thể sử dụng các ký tự, dấu gạch dưới, chữ số, dấu chấm và dấu phảy để đặt tênfile Không được bắt đầu một tên file bằng dấu chấm hay chữ số Những ký tự khácnhư ‘/’, ‘?’, ‘*’, là ký tự đặc biệt được dành riêng cho hệ thống Chiều dài của tên filecó thể tới 256 ký tự Trong hệ điều hành Android có sự phân biệt tên file chữ hoa vàchữ thường, điều đó có nghĩa là trong cùng 1 thư mục có thể tồn tại những file có tênlà File, FILE, file và chúng là những file khác nhau
Tất cả các file trong Android có chung cấu trúc vật lý là chuỗi các byte (bytestream) Cấu trúc thống nhất này cho phép Android áp dụng khái niệm file cho mọithành phần dữ liệu trong hệ thống Thư mục cũng như các thiết bị được xem như file.Chính việc xem mọi thứ như các file cho phép Android quản lý và chuyển đổi dữ liệumột cách dễ dàng Một thư mục chứa các thông tin về thư mục, được tổ chức theo mộtđịnh dạng đặc biệt Các thành phần được xem như các file, chúng được phân biệt dựa
trên kiểu file: ordinary file, directory file, character device file, và block device file.
1.1.3.2 Các kiểu file trên Android.
Trong nhiều hệ điều hành như window, người ta phân biệt rõ file (tập tin) và folder(hay directory : thư mục) là 2 thành phần khác hẳn nhau Tuy nhiên trên hệ điều hànhAndroid (cũng như linux) thì coi directory cũng là file và nó là một loại file đặc biệt.
Thực tế còn một số loại file nữa có thể liệt kê theo bảng sau : Xem hình 2.
1.1.3.3 Tổ chức quyền sở hữu và quyền hạn trên file.
Tương tự trên hệ thống linux, trên hệ điều hành Android, một file có thể liên kếtvới một người sử dụng và một nhóm người sử dụng Sự liên kết đó là một tập hợp cácquyền hạn truy cập bao gồm quyền được phép đọc (read), được phép ghi (write) vàđược phép thực thi (execute)
Cụ thể như sau: Một file sẽ có những quyền hạn tương ứng với 9 ký tự theo mẫu
sau : Với ký tự r w x nghĩa là có quyền tương ứng với ký tự viết tắt đó, - nghĩa là
không có quyền hạn đó
Trang 193 ký tự đầu tiên là quyền hạn chủ nhân file
3 ký tự giữa là quyền hạn của nhóm tài khoản sở hữu file
3 ký tự cuối là quyền hạn của những người không thuộc nhóm sở hữu file
Ví dụ : Một file có dãy ký tự biểu diễn quyền hạn là rwxr-xr— thì điều đó có nghĩa : 3 ký tự đầu là rwx : Chủ nhân có thể đọc, ghi và thực thi file
3 ký tự tiếp theo là r-x thì nhóm tài khoản sở hữu file có quyền đọc và thực thifile chứ không có quyền ghi, chỉnh sửa file
3 ký tự cuối là r nghĩa là những người không sở hữu file chỉ được phép đọc
mà không thể chỉnh sửa hay thực thi file.
Trên hệ thống Android, để biết xem được quyền hạn đó, ta có thể sử dụng câu
lệnh ls –l –d Ví dụ : ls -l -d /mnt/sdcard/QuangHoa để xem quyền hạn của file
/mnt/sdcard/QuangHoa thì có thể trả về kết quả như sau:d -rwxr-x system sdcard_rw 2010-12-29 21:00 QuangHoa
Thì những thông tin có thể lấy về là :
Ký tự đầu tiên là chữ d : vậy file đó có kiểu là thư mục hay là file bao hàm Chuỗi ghi quyền hạn là -rwxr-x thì có nghĩa
o ( -)Người sở hữu không được phép đọc, ghi, thực thi file.o (rwx) Nhóm tài khoản sử hữu được phép đọc, ghi, thực thi file
o r-x : Những người không sở hữu file được phép đọc và thực thi file
nhưng không được phép chỉnh sửa hay ghi lên file
Chuỗi miêu tả file : sdcard_rw nghĩa là đây thuộc thiết bị thẻ nhớ sd, đọc và ghi
Trang 201.1.3.4 Cây thư mục trên hệ điều hành Android.
Thư mục (hay có thể gọi là file) root là thư mục gốc của tất cả các file thư mục cònlại Dưới nó có chứa một số file thư mục hệ thống Mỗi thư mục (trừ thư mục root) đềucó một thư mục cha chứa nó, bản thân nó cũng có thể có nhiều file thư mục con Cấu
trúc đó có thể mô tả bằng một cây thư mục có dạng như sau : Xem hình 3.
Giới thiệu một vài thư mục tiêu biểu :
/(root) : Là thư mục gốc Là thư mục duy nhất không có thư mục cha / mnt : thư mục chứa thiết bị lưu động (removeable)
/system : chứa những thành phần cơ bản nhất của hệ thống
/ect : chứa những file cấu hình của hệ thống, nó cực kỳ quan trọng vì sự hoạtđộng của hệ thống đều bị chi phối ở những file cấu hình này
/system/lost+found : chứa những tập tin bị mất lúc khởi động máy /system/font : chứa những font chữ hiển thị được
/system/lib : chứa các thư viện để các phần mềm hoạt động (các phần mềm viếtbằng ngôn ngữ java).
/system/app : chứa các file apk của phần mềm (Các file cài đặt ứng dụng, kiểunhư MSI trong window hay dev trong Linux)
/system/bin : Chứa các chương trình nội trú của hệ thống
1.1.4 So sánh giữa các hệ điều hành.
1.1.4.1 So sánh giữa hệ điều hành di động và hệ điều hành trên desktop
Giống nhau về bản chất hệ điều hành, những thành phần lõi hệ điều hành Khác nhau :
o Hệ điều hành di động : hoạt động trên các thiết bị nhỏ gọn, hạn chế nhất là vềvấn đề năng lượng Pin thì có hạn, vì thế tất cả các thành phần trên thiết bị đềuphải tối ưu để tiết kiệm pin, điều đó nảy sinh nhiều mâu thuẩn với nhu cầu sửdụng của người dùng
Màn hình càng lớn và càng sáng thì sẻ tốn điện càng nhiều Bộ nhớ lớn thì chi phí về điện cũng sẻ cao
Bộ vi xử lý càng nhanh thì càng tốn điện
Trang 21Điều đó chưa kể đến việc thiết bị di động thì phải nhỏ gọn, nhẹ nhàng, vì vậy càngđè nặng việc phải tối ưu phần cứng.
Khi đó hệ điều hành di động cũng có trách nhiệm phải tối ưu hoạt động của mìnhđể tiết kiệm năng lượng một cách tối đa
Nó phải quản lý các ứng dụng không để các ứng dụng chạy chiếm quá nhiềutài nguyên, tránh sự độc quyền, xung đột, tranh chấp tài nguyên giữa cácứng dụng trong khi các hệ điều hành chạy desktop thì ít chú ý hơn Hệ điềuhành di động luôn có bộ công cụ quản lý điện năng sử dụng trong máy,trong những tình huống cần thiết thì hệ thống sẻ tự tắt những ứng dụngkhông cần thiết để duy trì các chương trình cần thiết hơn hoạt động
Đa số các hệ điều hành trên desktop đều cho phép nhiều ứng dụng chạyđồng thời (đa nhiệm) và khá tự do Trong khi đó, các hệ điều hành chạytrên di động thường không cho phép chạy đa nhiệm, hoặc có đa nhiệm thìcác ứng dụng bị giới hạn khá nhiều.
o Việc hiển thị giao diện trên một khung hình nhỏ cũng điều khó khăn hơn so vớihệ điều hành chạy trên desktop, thường thì trên hệ điều hành di động gần nhưkhông có giao diện cửa sổ cho phép nhiều ứng dụng cùng hiển thị một lúc màchỉ là một giao diện mà trên đó mỗi thời điểm chỉ hiển thị một giao diện củamột ứng dụng mà thôi
o Hệ điều hành di động phải có khả năng hoạt động liên tục không ngừng nghĩ đểđảm bảo liên lạc, đảm bảo kết nối của thiết bị tới mạng không dây cần kết nốitrong khi vẫn di chuyển Vì thế cần được thiết kế đặc biệt hơn so với hệ điềuhành trên desktop
1.1.4.2 So sánh hệ điều hành Android với các hệ điều hành di động khác
Giống nhau : Đều là hệ điều hành di động nên mang đầy đủ bản chất của hệđiều hành di động nói chung (Đã đề cập ở trên)
Khác nhau :
o Android là hệ điều hành mã nguồn mở và miễn phí trong khi các hệđiều hành di động còn lại đều là nguồn đóng và có phí (khi một hãng thứ haisử dụng)
Trang 22o Android được phát triển từ nhân linux do đó nó có thể chạy tốt trên nhiềudòng điện thoại khác nhau Có độ tương thích cao với các loại phần cứngkhác nhau nhiều hơn so với các hệ điều hành di động còn lại
o Các ứng dụng chạy trên Android được viết bằng Java trong khi đó, ứngdụng trên các hệ điều hành khác chủ yếu là viết bằng C/C++/Object C.Ngay cả symbian có hỗ trợ Java thì cũng khác so với Android, trong khi hệđiều hành Android sử dụng máy ảo Java là Dalvik VM do chính Googlephát triển thì Symbian lại sử dụng máy ảo Java là J2ME của Sun.
1.2 Lịch sử phát triển và hướng phát triển trong tương lai.1.2.1 Lịch sử phát triển.
Android là hệ điều hành trên điện thoại di động (và hiện nay là cả trên một số đầuphát HD, HD Player) phát triển bởi Google và dựa trên nền tảng Linux Trước đây,Android được phát triển bởi công ty liên hợp Android ( sau đó được Google mua lạivào năm 2005) Theo NPD, thiết bị di động sử dụng hệ điều hành Android bán đượctại Mỹ trong quý II năm 2010 xếp vị trí đầu tiên với 33%, thứ 2 là BB os với 28% vàiOS ở vị trí thứ 3 với 22% Android có một cộng đồng những nhà phát triển rất lớn viếtcác ứng dụng cho hệ điều hành của mình Hiện tại có khoảng 1000,000 ứng dụng choAndroid os và vào khoảng 1000,000 ứng dụng đã được đệ trình, điều này khiếnAndroid trở thành hệ điều hành di động có môi trường phát triển lớn thứ 2 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 Androidvà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 đínhtạo nên một chuẩn mở cho điện thoại di động trong tương lai Google công bố hầu hếtcác mã nguồn của Android theo bản cấp phép Apache Hệ điều hành Android bao gồm12 triệu dòng mã; 3 triệu dòng XML, 2.8 triệu dòng mã C, 2.1 triệu mã JAVA và 1.75triệu dòng mã C++.
Chi tiết lịch sử phát triển như sau:
Tháng 7 năm 2005, Google mua lại Android, Inc., một công ty nhỏ mới thành lậpcó trụ sở ở Palo Alto , California , Mỹ.Những nhà đồng sáng lập của Android chuyểnsang làm việc tại Google gồm có Andy Rubin (đồng sáng lập công ty Danger), Rich
Trang 23Miner (đồng sáng lập công ty Wildfire Communications), Nick Sears (từng là phó chủtịch của T-Mobile ), và Chris White (trưởng nhóm thiết kế và phát triển giao diệntại WebTV) Khi đó, có rất ít thông tin về các công việc của Android, ngoại trừ việc họđang phát triển phần mềm cho điện thoại di động.Điều này tạo những tin đồn về việcGoogle có ý định bước vào thị trường điện thoại di động.
Tại Google, nhóm do Rubin đứng đầu đã phát triển một nền tảng thiết bị di độngdựa trên hạt nhân Linux, được họ tiếp thị đến các nhà sản xuất thiết bị cầm tay vàcác nhà mạng trên những tiền đề về việc cung cấp một hệ thống mềm dẻo, có khả năngnâng cấp mở rộng cao Một số nguồn tin cho biết trước đó Google đã lên danh sáchcác thành phần phần cứng và các đối tác phần mềm, đồng thời ra hiệu với các nhàmạng rằng họ sẵn sàng hợp tác ở nhiều cấp độ khác nhau.Ngày càng nhiều suy đoánrằng Google sẽ tham gia thị trường điện thoại di động xuất hiện trong tháng
12 năm 2006 Tin tức của BBC và Nhật báo phố Wall chú thích rằng Google muốn
đưa công nghệ tìm kiếm và các ứng dụng của họ vào điện thoại di động và họ đang nỗlực làm việc để thực hiện điều này Các phương tiện truyền thông in và online cũngsớm có bài viết về những tin đồn cho rằng Google đang phát triển một thiết bị cầm taymang thương hiệu Google.Và lại càng có nhiều suy đoán sau bài viết về việc Googleđang định nghĩa các đặc tả công nghệ và trình diễn các mẫu thử với các nhà sản xuấtđiện thoại di động và nhà mạng.
Tháng 9 năm 2007, InformationWeek đăng tải một nghiên cứu của Evalueserve cho
biết Google đã nộp một số đơn xin cấp bằng sáng chế trong lĩnh vực điện thoại diđộng.
Trên là 1 số thông tin cơ bản về lịch sử phát triển của hệ điều hành Android và đây
là hình ảnh tom tắt quá trình cập nhật các phiên bản của hệ điều hành Android Xem
hình 4.
1.2.2 Hướng phát triển trong tương lai.
Hiện tại thì Android đang rất phát triển, hướng đi quan trọng nhất hiện giờ 2012) là Google sẽ tích hợp điện toán đám mây trên hệ điều hành Android và bảo mậtdữ liệu Là mã nguồn mở nên việc bảo mật dữ liệu là rất khó nên google sẽ dành nhiềuthời gian cho vấn đề này Chúng ta cùng chờ xem Google thực hiện ra sao.
Trang 24(4-2-1.3 Hướng dẫn cài đặt.Bước 1:
- Download SDK Android Vào trang web sau:
- SDK cung cấp cho 3 hệ điều hành là : Window, MacOS, Linux Tùy theo các
hệ điều hành mà ta chọn các gói Hình ảnh miêu ta các gói trên website Xem
hình 5.
- Khi đã download SDK ta thực hiện giải nén và chạy file sau theo đường dẫn:Android-sdk-windows\SDK Manager.exe Khi chạy file này ta sẽ có kết quả
như hình sau Xem hình 6.
- Tiếp theo ta chọn các gói cần cài đặt, chọn xong các ta chọn Install Sau đó đợicho nó chạy xong.
Bước 2:
- Download Eclipse để tích hợp SDK vào Eclipse Các bạn vào trang web http://www.eclipse.org/downloads/ download Eclipse (Khuyên dùng: Eclipse IDE forJava EE Developers).
- Download xong eclipse ta mở eclipse lên và thực hiện như sau: Chọn >Install New Softwares, hộp thoại hiện ra và chọn add sau đó thêm đường dẫnsau https://dl-ssl.google.com/Android/eclipse/ vào Location rồi click OK Ảnh
Help-minh họa như sau Xem hình 7 Đợi cho chạy xong là ta đã cài xong ADT.
- Tiếp theo là ta cài đặt đường dẫn trỏ tới thư mục SDK, thiết lập đường dẫn nhưsau: Eclipse -> Windows -> Preferences -> Android , tiếp chọn Browse rồichọn đến thư mục SDK mà bước 1 đã giải nén ra Chọn Ok để hoàn thành Như vậy là ta đã cài đặt xong môi trường để phát triển Android Kết quả cài đặt
thành công sẽ có màn hình như sau Xem hình 8.
1.4 Chương trình mẫu.
1.4.1 Mục đích chương trình mẫu.
Giúp các bạn hiểu rõ được 1 chương trình Android chạy và tạo ra như thế nào thìchúng ta cùng nghiên cứu 1 ví dụ đơn giản Chương trình đơn giản là hiện thị 1 dòngchữ “Chào các bạn.”.
Trang 25Mã nguồn minh họa:
package MinhHoa.Gioi;import Android.app.Activity;import Android.os.Bundle;
import Android.widget.TextView;
public class MinhHoaActivity extends Activity {
/** Called when the activity is first created */ @Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
//Khai báo biến tv là kiểu TextView TextView tv = new TextView(this);
//Đặt text cần hiện thị bằng phương thức setText tv.setText("Chào các bạn.");
//Hiện thị biến tv lên màn hình setContentView(tv);
}}
Trang 26Dù chỉ là chương trình đơn giản nhưng nó là 1 cấu trúc hoàn chỉnh của 1 chươngtrình Android, từ cấu trúc đơn giản này, ta xây dựng các lớp, các gói phức tạp hơn đểthực hiện các mục đích khác nhau.
Trang 27Chương 2: Nghiên cứu lý thuyết đồ họa 2D, 3D2.1 Đồ họa nói chung.
2.1.1 Giới thiệu chung.
Đồ họa máy tính là một lĩnh vực của khoa học máy tính nghiên cứu về cơ sở toánhọc, các thuật toán cũng như các kĩ thuật để cho phép tạo, hiển thị và điều khiển hìnhảnh trên màn hình máy tính Đồ họa máy tính có liên quan ít nhiều đến một số lĩnh vựcnhư đại số, hình học giải tích, hình học họa hình, quang học, và kĩ thuật máy tính,đặc biệt là chế tạo phần cứng (các loại màn hình, các thiết bị xuất, nhập, các vỉ mạchđồ họa ).
Theo nghĩa rộng hơn, đồ họa máy tính là phương pháp và công nghệ dùng trongviệc chuyển đổi qua lại giữa dữ liệu và hình ảnh trên màn hình bằng máy tính Đồ họamáy tính hay kĩ thuật đồ họa máy tính còn được hiểu dưới dạng phương pháp và kĩthuật tạo hình ảnh từ các mô hình toán học mô tả các đối tượng hay dữ liệu lấy được từ
các đối tượng trong thực tế Thuật ngữ "đồ họa máy tính" (computer graphics) được đề
xuất bởi một chuyên gia người Mĩ tên là William Fetter vào năm 1960 Khi đó ôngđang nghiên cứu xây dựng mô hình buồng lái máy bay cho hãng Boeing WilliamFetter đã dựa trên các hình ảnh 3 chiều của mô hình người phi công trong buồng lái đểxây dựng nên mô hình buồng lái tối ưu cho máy bay Boeing Đây là phương phápnghiên cứu rất mới vào thời kì đó Phương pháp này cho phép các nhà thiết kế quan sátmột cách trực quan vị trí của người lái trong khoang buồng lái William Fetter đã đặt
tên cho phương pháp của mình là computer graphics
2.1.2 Lịch sử phát triển.
Lịch sử của đồ họa máy tính vào thập niên 1960 còn được đánh dấu bởi dự ánSketchPad được phát triển tại Học viện Công nghệ Massachusetts (MIT) bởi IvanSutherland Các thành tựu thu được đã được báo cáo tại hội nghị Fall Joint Computervà đây cũng chính là sự kiện lần đầu tiên người ta có thể tạo mới, hiển thị và thay đổiđược dữ liệu hình ảnh trực tiếp trên màn hình máy tính trong thời gian thực Hệ thống
Trang 28Sketchpad này được dùng để thiết kế hệ thống mạch điện và bao gồm những thànhphần sau:
1 CRT màn hình
2 Bút sáng và một bàn phím bao gồm các phím chức năng3 Máy tính chứa chương trình xử lí các thông tin
Với hệ thống này, người sử dụng có thể vẽ trực tiếp các sơ đồ mạch điện lên mànhình thông qua bút sáng, chương trình sẽ phân tích và tính toán các thông số cần thiếtcủa mạch điện do người dùng vẽ nên.
Kỹ thuật đồ họa được liên tục hoàn thiện vào thập niên 1970 với sự xuất hiện củacác chuẩn đồ họa làm tăng cường khả năng giao tiếp và tái sử dụng của phần mềmcũng như các thư viện đồ họa.
Sự phát triển vượt bậc của công nghệ vi điện tử và phần cứng máy tính vào thậpniên 1980 làm xuất hiện hàng loạt các vi mạch hỗ trợ cho việc truy xuất đồ họa đi cùngvới sự giảm giá đáng kể của máy tính cá nhân làm đồ họa ngày càng đi sâu vào cuộcsống thực tế.
2.1.3 Các hệ màu thông dụng.2.1.3.1 Hệ màu RGB
Hệ màu RGB mô tả màu sắc bằng ba thành phần Red, Green, Blue trong một môhình gọi là "không gian màu" Không gian này được minh họa bằng một khối lậpphương với các trục chính R, G, B.
Mỗi màu trong không gian RGB đều được biểu diễn như là một vector thông quaba vector cơ sở là Red, Green, Blue Do đó, ứng với các tổ hợp khác nhau của ba màunày sẽ cho ta một màu mới.
Trong hình lập phương mỗi màu gốc (Red, Green, Blue) được đặt vào góc đối diệnvới các màu bù nó (Hai màu bù nhau là hai màu mà khi kết hợp tạo thành màu trắnghay xám (grey)) Như vậy Red đối diện với Cyan, Green đối diện với Magenta, Blueđối diện với Yellow Giá trị xám nằm trên đường chéo nối các đỉnh (0,0,0) và (1,1,1)
Trang 29của hình lập phương Thường thường các trục R, G, B được chuẩn hóa Khi kết hợphai màu lại với nhau thì màu sinh ra có vector bằng tổng các vector thành phần.
o Ưu điểm
- Không gian RGB là chuẩn công nghiệp cho các thao tác đồ họa máy tính Cácthao tác màu sắc có thể được tính toán trên các không gian màu khác nhưngcuối cùng cần phải chuyển về không gian RGB để có thể hiển thị trên màn hình(do thiết kế của phần cứng dựa trên mô hình RGB).
- Có thể chuyển đổi qua lại giữa không gian RGB với các không gian màu khácnhư CIE, CMY, HSL, HSV,
- Các thao tác tính toán trên không gian RGB thường đơn giản hơn.o Nhược điểm
- Các giá trị R,G,B của một màu là khác nhau đối với các màn hình khác nhau :Nghĩa là các giá trị R,G,B của một màu trên màn hình màu này sẽ không sinh rađúng màu đó trên một màn hình khác.
- Sự mô tả các màu trong thế giới thực đối với không gian RGB còn nhiều hạnchế bởi vì không gian RGB không hoàn toàn phù hợp với sự cảm nhận màu sắccủa con người Hai điểm phân biệt trong không gian RGB, với mắt người có thểhoặc không thể là thể hiện của hai màu khác nhau.
2.1.3.2 Hệ màu CMYK (hệ màu trừ)
Hệ màu CMYK tái tạo màu bằng mực, dùng trong in ấn, in offset, in phun màu.Gồm 3 màu mực cơ bản:
Cyan (C) Magenta (M)
Yellow (y)
Ba màu này tổng hợp lại ra màu đen (Black) Nhưng màu đen này in ra không đenhoàn toàn nên thường người ta bổ sung thêm hộp mực màu đen trong máy in Đây làmực màu, không phải là mực in trắng đen.
Trang 30Hệ Lab gồm 3 thành phần:
L (light): ánh sáng (trắng - đen, 0-100%) a: từ xanh lá đến đỏ (-127 đến 128)
Mô phỏng hình ảnh, chuẩn đoán hình ảnh (trong y tế).
Huấn luyện đào tạo ảo (quân sự, hàng không, ).
Trang 312.2Đồ họa 2D.
2D là hình ảnh được xây dựng trên chương trình đồ hoạ máy tính 2 chiều (2Dimensional), cũng như hệ toạ độ 2 chiều của trục toạ độ, nó phản ánh một phongcách đồ hoạ phẳng Đồ hoạ 2 chiều không có sự tham gia hoặc có nhưng rất ít của cáchiệu ứng 3 chiều đặc trưng như hiệu ứng chiếu sáng, phản chiếu, đổ bóng
Các hình ảnh của các họa sĩ đều có bóng đổ nhưng nó được vẽ bằng tay hayhiệu chỉnh không có sự tham gia của nguồn sáng
Một số đặc trưng cơ bản của đồ họa 2D.
- Đặc trưng dễ nhận dạng nhất của chương trình vẽ 2D là không thể xoay gócquay được ( VD: trong khi bạn vẽ một viên bi chẳng hạn bạn chỉ nhìn nó đượctừ 1 góc cạnh ).
- Đặc trưng kế tiếp là không có ấn tượng 3 chiều rõ rệt, hình ảnh sẽ cuộn theo 2chiều là chiều thẳng và chiều ngang khác với 3D không dùng hình thức cuộnmà dựa vào không gian khối của hình ảnh.
- Đặc trưng tiếp theo là mọi thứ đều hoàn toàn bằng 2D từ hậu cảnh, vật thể đếntiền cảnh tạo nên một cái hình giống như phim hoạt hình cắt giấy, mọi thứ đềutừ hình vẽ trên giấy.
2.3Đồ họa 3D.
Khung hình 3D được xây dựng trên hệ thống đồ hoạ máy tính 3 chiều (3Dimentional), hệ thống đồ hoạ này khai thác 3 chiều không gian là chiều ngang – dọc– sâu tạo nên một thế giới hình khối khác hẳn thế giới hình phẳng của 2D Đồ hoạ 3Dkhai thác tối đa các hiệu ứng 3 chiều như đổ bóng, chiều ánh sáng, sự phản chiếu nhờvào hệ thống nguồn sáng vẽ xử lí bằng máy tính.
Tuy vậy hình ảnh chụp từ khung hình 3D vẫn gọi là 2D, nhưng bằng chươngtrình 3D ta có thể chụp nhiều tấm ảnh ở nhiều góc cạnh khác nhau từ 1 khung hình 3D.
Dưới đây là 3 tấm ảnh 2D chụp từ 1 khung hình 3D Xem hình 9.
Trang 32Chương 3: Nghiên cứu đồ họa 2D, 3D của hệ điều hành Androidvà viết chương trình minh họa.
3.1 Đồ họa trong Android.
3.1.1 Giới thiệu chung về đồ họa Android.
Khi viết một ứng dụng điều quan trọng là bạn phải xác định xem ứng dụng đó sửdụng đồ họa như thế nào Việc xác định được điều này sẽ giúp cho quá trình viếtchương trình được đơn giản và hiệu quả cao.
Đồ họa và hình ảnh động cho một ứng dụng tĩnh thì hoàn toàn khác với một ứngdụng Game có các nhân vật chuyển động Từ những điều đó mà Android cung cấpcho ta nhiều cách để thể hiện đồ họa.
Để thể hiện được đồ họa thì Android cung cấp cho chúng ta 2 đối tượng chính:+ Canvas.
+ Drawables
Với Canvas ta có thể vẽ bất cứ cái gì lên vùng hiện thị của chúng ta, khi tạo raDrawables ta có thể tạo các ảnh động dạng frame-by-frame Ngoài ra Android còn hỗtrợ OpenGL 1.0 và 2.0 để tạo ra đồ họa 3D Từ Android 3.0 thì phần cứng đã tăng tốcthêm cho phần đồ họa được vẽ bằng API và làm tăng hiệu xuất làm việc của thiết bị
3.2 Đồ họa 2D trong Android.
3.2.1 Một số thành phần trong đồ họa 2D.
Trên Android, để vẽ bất thứ gì ta cần phải có bốn thành phần cơ bản: - Một đối tượng kiểu Bitmap để giữ các pixel cần vẽ
- Một đối tượng chứa nét vẽ cần vẽ ra(Có thể là Rect, Path, Bitmap…)
- Một đối tượng kiểu Paint dùng để định nghĩa màu sắc, style… dùng để vẽ ramàn hình
- Một đối tượng Canvas dùng để thực thi lệnh vẽ
Để làm rõ những khái niệm trên ta tiến hành tạo một lớp CustomView cài đặtlại lớp View của Android để định nghĩa một đối tượng đồ họa mới Trên đối tượngmới định nghĩa này, ta sẽ tự vẽ ra giao diện mà mình mong muốn.
Xây dựng lớp CustomView
Để tạo một CustomView ta tiến hành tạo một class với nội dung như sau:
package gioi.Android;
Trang 33import Android.content.Context; import Android.util.AttributeSet; import Android.view.View;
public class CustomView extends View{
public CustomView(Context context){ super(context);
}
public CustomView(Context context, AttributeSet attrs) { super(context, attrs);
} @Override
protected void onDraw(Canvas canvas) { }
}
Lớp CustomView sẽ extend class View của Android để kế thừa lại các phươngthức cũng như các thuộc tính của lớp View Trong đó ta sẽ cài đặt lại 02 phương thứckhởi tạo cho lớp CustomView và ghi đè phương thức onDraw() của lớp View, đâychính là phương thức sẽ vẽ ra giao diện của CustomView.
Với phương thức khởi tạo public CustomView(Context context) chỉ nhận vào mộttham số là một đối tượng Context Đây là đối tượng này cho phép truy xuất đến cácđối tượng cũng như các dịch vụ của hệ thống Đối tượng này cần thiết để vẽ một giaodiện ra màn hình thiết bị
Với phương thức khởi tạo thứ hai: public CustomView(Context context,AttributeSet attrs) có nhận vào thêm một tham số là AttributeSet attrs Đây là đốitượng chứa các thuộc tính của đối tượng đồ họa sẽ được khởi tạo Việc tạo phươngthức khởi tạo thứ hai là cần thiết nếu bạn mong muốn sử dụng đối tượng đồ họa nàytrong một file giao diện xml có chỉ định các thuộc tính như ví dụ sau:
Cho một file xml có nội dung như sau:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:orientation="vertical"
Trang 34Android:layout_width="fill_parent" Android:layout_height="fill_parent" >
<gioi.Android.CustomView
Android:id="@+id/graphicView" Android:layout_width="fill_parent" Android:layout_height="fill_parent" />
Trong file xml kể trên ta có sử dụng một thẻ có tên niit.Android.CustomView,đây chính là đối tượng đồ họa ta vừa tạo ra ở trên Trong đó gioi.Android làpackage của project hiện tại Thẻ CustomView ở trên có ba thuộc tính làAndroid:id, Android:layout_width và Android:layout_height Ta có thể tạo mộtActivity có nội dung là file xml kể trên:
public class main extends Activity { @Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.main); }
Lúc này Android sẽ tự tạo ra đối tượng CustomView và sử dụng phương thứckhởi tạo public CustomView(Context context, AttributeSet attrs) để khởi tạo đốitượng với các thuộc tính là Android:id, Android:layout_width vàAndroid:layout_height được truyền vào thông qua đối tượng attrs
Đến đây ta đã tạo xong lớp CustomView, tuy nhiên nếu chạy chương trìnhở bước này ta chỉ được một giao diện trống rỗng Để vẽ giao diện cho CustomViewta sẽ tiến hành cài đặt phương thức onDraw() với nội dung như sau:
@Override
protected void onDraw(Canvas canvas) {
Paint cPaint = new Paint();
Trang 35cPaint.setColor(Color.RED); Path cPath = new Path();
cPath.addCircle(100, 100, 20, Direction.CW); canvas.drawPath(cPath, cPaint);
Như đã đề cập ở mục trên để vẽ ra màn hình ta tạo một đối tượng Paint đượcdùng để định nghĩa màu sắc, style… ta cần vẽ ra Gọi phương thức setColor(…) đểgán màu sắc của nét vẽ cần vẽ ra Sau đó ta tiến hành khai báo một đối tượng Path đểchứa các nét vẽ và gọi phương thức addCircle(…) để thêm một nét vẽ hình tròn vàođối tượng cPath Sau đó gọi canvas.drawPath(cPath,cPaint) để vẽ ra các nét vẽ đượcchứa trong đối tược cPath với màu sắc được định nghĩa trong đối tượng cPaint Khi
thực thi chương trình ta sẽ được kết quả như sau: Xem hình 10.
Như vậy ta đã có lớp Customview, tiếp theo là ta tìm hiểu một số thành phần cănbản của Android.
+ Đối tượng Paint: Đây là đối tượng quy định cách hiện thị của đối tượng đồ họa.
Ví dụ như ta muốn vẽ một đường thẳng có đổ bỏng, vẽ đường tròn với màu tùy chọn.Cách khai báo đối tượng như sau.
Paint p = new Paint();p.setColor(Color.RED);
Ở đây ta khái báo biến p thể hiện lớp Paint và ta đặt cho màu của Paint này là màu đỏ.
+ Đối tượng Color: Color được thể hiện bởi 4 giá trị, đầu tiên là alpha tiếp theo là
red, green và blue (ARGB) Mỗi thể hiện gồm 256 giá trị (8 bít) do đó một màu có giátrị cao nhất lên tới 32 bít integer Với Android thuận tiên hơn khi cho phép chúng tathể hiện giá trị màu bằng một số nguyên thay vì thể hiện theo cách của lớp Color haydùng Cách khai báo đối tượng này như sau.
int color = Color.BLACK;
Ở đây biến color được gán với màu đen, ngoài ra chúng ta cũng có thể viết theo cáchsau
int color = 255; hoặc int color = Color.rgb(255, 0, 0);
+ Đối tượng Canvas: là một lớp quan trọng trong quá trình xây dựng ứng dụng,
đặt biệt trong Game Nếu như lớp Paint cung cấp cho bạn nhưng dụng cụ color, đường
Trang 36nét, độ to nhỏ của nét để vể thì Canvas cung cấp cho bạn các phương thức để vẽ lênnhững gì bạn muốn, đường thẳng, đường tròn, hình chữ nhật
Ví dụ ta vẽ một chuỗi ký tự như sau:
canvas.drawText("Vẽ chuỗi ký tự lên Canvas tại vị trí 30,30 với style là biếnp",30,30,p);
+ Đối tượng Rect: Đây là đối tượng cho ta vẽ lên 1 hình chữ nhật, cách khai báo
đối tượng này như sau Rect rect = new Rect();
Ngoài ra Android còn cung cấp rất nhiều các đối tượng khác để vẽ các thành phầnkhác nhau, như vẽ ảnh, đường thẳng, đường tròn, hình đa giác…
3.2.2 Chương trình minh họa.
Để hiểu rõ các đối tượng mà Android cung cấp, ta cùng xây dựng một ví dụ nhonhỏ để thấy được cách thể hiện đồ họa của Android Chương trình minh họa sẽ thựchiện các chức năng sau.
- Vẽ 1 đường thẳng màu đỏ có độ dài 100 picxel.
Ta có lớp TestAndroid2Dactivity.java như sau.
package TestAndroid2D.gioi;import Android.app.Activity;import Android.os.Bundle;
public class TestAndroid2DActivity extends Activity {
/** Called when the activity is first created */ @Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.main); }
Trang 37Trong file main này ta đã xử dụng lớp Customview, khi chương trình chạy thìnó sẽ hiện thị nội dung có trong file main này.
Tiếp theo ta có lớp Customview như sau.
13.public class Customview extends View{
14.public Customview(Context context) {
16 }
Trang 3817.public Customview(Context context, AttributeSet attrs) {
18.super(context, attrs);
19 }
20 @Override
21.protected void onDraw(Canvas canvas) {
22 Paint p = new Paint();23 //Vẽ đường thẳng
24 p.setColor(Color.RED);//Đặt màu vẽ là màu đỏ25 canvas.drawLine(0, 10, 100, 10, p);
26 //Vẽ đường tròn có đổ bóng màu vàng27 Path circle = new Path();
28 circle.addCircle(150,150,100,Direction.CW);29 p.setColor(Color.YELLOW);
30 p.setShadowLayer(50, 0, +50, Color.YELLOW);31 p.setStyle(Style.STROKE);
32 canvas.drawPath(circle, p);33 //Vẽ hình chữ nhật
34 p.setColor(Color.BLUE);35 Rect r = new Rect();36 r.set(200, 200, 50, 30);37 canvas.drawRect(r, p);38 //Vẽ 1 bức ảnh
39 p.reset();
41 canvas.drawBitmap(bitmap, 20, 300, p);42.super.onDraw(canvas);
43 }
Trang 3944 }
Để vẽ 1 đối tượng đồ họa trong Android ta cần phải khai báo đối tượng Paint, tronglớp Customview ở dòng 22 chúng ta đã khai bao đối tượng Paint Để vẽ 1 đường thẳngvới màu đỏ ta đặt màu đỏ cho đối tượng Paint với câu lệnh dòng 24 Muốn vẽ 1 đườngthẳng ta dùng phương thức drawLine của đối tượng Canvas, với dòng 25 ta sẽ vẽ 1đường thẳng bắt đầu từ vị trí (0,10) cho đến vị trí kết thúc là (100, 10).
Muốn vẽ 1 đường tròn thì ta dùng phương thức drawPath nhưng trước đó ta phảikhai báo đối tượng circle, đối tượng này thể hiện 1 đường tròn Muốn màu đổ bóng làmàu vàng cho đặt màu vàng cho biến p tại dòng 29 Như vậy là ta vẽ được đường trònvới đổ bóng màu vàng.
Để vẽ hình chữ nhật ta khai báo thêm đối tượng hình chữ nhật, dòng 35 khai báo 1đối tượng hình chữ nhật, muốn hình chữ nhật có màu xanh ta đặt màu cho biến p làmàu BLUE (dòng 34), muốn vẽ hình chữ nhật ta dùng phương thức drawRect
Tiếp theo là vẽ 1 bức ảnh: Muốn vẽ 1 bức anh ta cần khai báo thêm đối tượngBitmap, đối tượng này tải dữ liệu từ thư mục drawble với đoạn mã dòng 40, muốn vẽlên màn hình ta dùng phương thức drawBitmap của đối tượng canvas.
Cuối cùng ta đã vẽ được 1 số thành phần cơ bản của Android Kết quả chương trình
trên như sau Xem hình 11.
3.3 Đồ họa 3D trong Android.
3.3.1 Một số thành phần trong đồ họa 3D.
Android cung cấp cho ta gói thư viện OpenGL cụ thể ở đây là OpenGL ES API.OpenGL là một nền tảng rất tốt, nó giúp tăng tốc đồ họa 1 cách đáng kể Ngay từ khira đời với phiên bản Android 1.0 thì Android đã hỗ trợ OpenGL 1.0 Đến phiên bảnAndroid 2.2 API 8 thì Android đã hộ trợ thêm OpenGL 2.0, với việc hộ trợ thêmOpenGL 2.0 thì hệ điều hành này ngày càng được mọi người quan tâm hơn.
Sau đây là 1 số thành phần đồ họa 3D quan trọng của hệ điều hành này.
GLSurfaceView: Đây là nơi bạn có thể vẽ và thao tác đối tượng bằng cách gọi
OpenGL API và các nó chức năng giống như một SurfaceView Bạn có thể sử dụng
lớp này bằng cách tạo ra 1 đối tượng thể hiện GLSurfaceView và thêm phần Renderer
của bạn vào Tuy nhiên nếu bạn muốn bắt sự kiện cảm ứng trên màn hình thì bạn phảimở rộng lớp này và cài đặt sự kiến lắng nghe.
Trang 40GLSurfaceView.Renderer: Giao diện này định nghĩa các phương thức được yêucầu để vẽ các thành phần đồ họa của một đối tượng GLSurfaceView.
GLSurfaceView.Renderer yêu cầu cần phải cài đặt các phương thức sau:
- onSurfaceCreated(): Phương thức này chỉ được hệ thống gọi 1 lần duy nhất, nóđược gọi khi tạo ra GLSurfaceView Phương thức này thường để thực hiện 1 sốcài đặt cần thiết như là cài đặt các thuộc tính khi hiện thị giao diện đồ họa nhưchiều cao, chiều rộng…
- onDrawFrame(): Hệ thống sẽ gọi phương thức này mỗi khi vẽ lạiGLSurfaceView.
- onSurfaceChanged(): Hệ thống sẽ gọi phương thức này khi GLSurfaceView cósự thay đổi, bao gồm việc thay đổi chiều cao, rộng của màn hình và sự thay đổivề chiều của màn hình (Nằm ngang hay dọc).
Một số gói trong thư viện OpenGL: Gói OpenGL API 1.0:
+ Android.opengl: Gói này cung cấp các giao diện tĩnh và nó thực hiệntốt hơn gói javax.microedition.khronos.
GLES10 GLES10Ext GLES11 GLES10Ext
+ javax.microedition.khronos.opengles : Gói này cung cấp các đối tượngchuẩn của opengl 1.0
GL10 GL10Ext GL11 GL11Ext
GL11ExtensionPack
OpenGL ES 2.0 API Class