Tải bản đầy đủ (.pdf) (95 trang)

NGHIÊN cứu và xây DỰNG THƯ VIỆN hỗ TRỢ lập TRÌNH đồ họa OPENGL ES 2 0

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (6.75 MB, 95 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
---------------  ---------------

LUẬN VĂN TỐT NGHIỆP

NGHIÊN CỨU VÀ XÂY DỰNG THƢ VIỆN HỖ TRỢ
LẬP TRÌNH ĐỒ HỌA OPENGL ES 2.0
STUDYING AND BUILDING A GRAPHICS
PROGRAMMING LIBRARY SUPPORTING ON
OPENGL ES 2.0
Giảng viên hướng dẫn:
Sinh viên thực hiện:
Lớp:
Khoá:

TS. NGÔ THANH HÙNG
NGUYỄN LÂM TÚ
CNPM01
2006 - 2011

TP. Hồ Chí Minh, tháng 03 năm 2011


i

ABSTRACT
Nowaday, Graphics Programming in embedded devices is interested. We have many
technologies and tools in this domain. OpenGL ES is a technology which is used to do


that. However, Programming in devices is not easy and has some special features
because its peculiarities.
In the thesis, I study the features of OpenGL ES 1.1, OpenGL ES 2.0 and its problems
causing difficulties to programmer. After that, I proposed architechture and built a library
that support programmer in graphic programming.
Its architecture was MVC (Model-View-Controller). It is a popular and useful
architecture. So, It could make the library to be flexible and easy to manage. It was built
in Object Oriented programming. It means we can inherit and reuse or make the libray
better and larger. The library contained 3D math calculation classes. They could help
developer solve programmable programming. Programmable programming is a different
point between OpenGL ES 2.0 and the others version of OpenGL ES. Besides that, all
classes was specified in the documentation.
The library was built in WinCE flatform and could run on AMD Emulator for
OpenGL ES 2.0.
The support library is built. And it can use in OpenGL ES 2.0 programming.
However, It is just simple and not concise in design. In future, It can be more perfect by
developing and adding other features.

Ho Chi Minh City, March – 2011
Student
Nguyen Lam Tu


ii

MỞ ĐẦU
Trong thời đại ngày nay, các thiết bị di động đang đóng một vai trò hết sức quan
trọng trong đời sống của mỗi người. Mỗi người luôn mang theo mình những thiết bị cầm
tay, hay điện thoại thông minh để phục vụ cho việc liên lạc hay làm việc. Ngoài ra những
chương trình giải trí, những trò chơi trên các thiết bị này cũng là một phần không thể

thiếu và được mọi người sử dụng hàng ngày. Việc lập trình trên các thiết bị, đặc biệt là
các ứng dụng về đồ họa và game được rất nhiều lập trình viên quan tâm.
OpenGL ES được coi là thư viện lập trình đồ họa chuyên cho các thiết bị di động.
Với khả năng thực thi tốt và mạnh mẽ, ngày càng nhiều ứng dụng được viết dựa trên
OpenGL ES. Tuy nhiên, OpenGL ES được cung cấp dưới dạng đặc tả chuẩn với những
hàm cơ bản. Việc lập trình với OpenGL ES đòi hỏi người lập trình viên phải tùy biến
theo từng chương trình, và tự bản thân phải xây dựng nên cấu trúc riêng. Hơn thế nữa,
OpenGL ES 2.0 là phiên bản được ra đời gần đây nhất với nhiều cải tiến và thay đổi.
Cách tiếp xúc và lập trình với nó hoàn toàn khác với phiên bản trước đó, điều đó đã gây
ra một số khó khăn trong việc tiếp cận và lập trình với phiên bản này. Đòi hỏi phải xây
dựng một số hàm phụ trợ.
Từ lý do đó, luân văn mong muốn xây dựng một cấu trúc có sẵn cũng như những
hàm, lớp trợ giúp cho người lập trình. Làm cho quá trình phát triển ứng dụng được dễ
dàng, thuận tiện và nhanh chóng hơn. Có thể tiếp cận và giải quyết cũng như sử dụng
OpenGL ES 2.0 dễ dàng và hiệu quả hơn. Những hàm và lớp được xây dựng sẵn theo
kiến trúc hướng đối tượng, người dùng chỉ cần triệu gọi chúng, hoặc có thể tự mình mở
rộng chúng bằng cách thừa kế lại. Thư viện cũng giúp cho người lập trình có thể chuyển
từ phiên bản cũ qua phiên bản 2.0 dễ dàng hơn. Không phải viết lại những hàm không có
trong phiên bản mới này từ đầu. Với tư tưởng xây dựng một thư viện độc lập với các nền
tảng, những lớp trong thư viện luôn được đặc tả trước tiên bởi các lớp ảo, sau đó mới
được thực thi bởi lớp cụ thể. Việc này sẽ rất hữu ích khi ta chuyển qua nền tảng lập trình
khác.
Nội dung luận văn được chia làm 5 chương:


iii
Chương 1: Tổng quan
Trong chương này, chúng ta sẽ tìm hiểu tầm quan trọng và sự phát triển mạnh mẽ của
các thiết bị di động và nền tảng di động. Kéo theo sự phát triển đó là yêu cầu về phần
mềm xử lý đồ họa, ứng dụng hay game cho các thiết bị này. Điều đó dẫn đến sự cần thiết

phải có một bộ thư viện lập trình đồ họa dành riêng cho chúng, đó chính là OpenGL ES.
Nêu lên lý do thực hiện đề tài, tính cấp bách, thiết yếu của đề tài. Ngoài ra cũng
đưa ra mục đích và kết quả muốn hướng đến của đề tài.
Chương 2: Cơ sở toán học đồ họa máy tính
Nêu ra những khái niệm, những luận điểm cơ bản về lập trình ba chiều. Bao gồm
các khái niệm về toán học, ma trận, … và quá trình biến đổi hình học ba chiều trong các
không gian khác nhau.
Chương 3: OpenGL ES 2.0 và ngôn ngữ lập trình OpenGL Shading
Nói đến công nghệ được sử dụng để thực hiện đề tài và cũng là phiên bản mạnh mẽ
và mới nhất của OpenGL ES hiện nay. Cung cấp cho người đọc một cái nhìn toàn diện về
phiên bản của OpenGL. So sánh phiên bản OpenGL ES 2.0 với phiên bản trước của nó,
và một số điểm mới trong phiên bản 2.0. Đặc biệt chương này đi sâu nghiên cứu ngôn
ngữ OpenGL ES Shading Language, là nét đặc trưng và khác hẳn của OpenGL ES 2.0.
Chương 4: Thiết kế, cài đặt thư viện hỗ trợ lập trình đồ họa trên OpenGL ES 2.0
Chương này nêu lên kiến trúc tổng thể của thư viện. Đồng thời đi vào chi tiết, đặc tả
các lớp được xây dựng trong thư viện.
Chương 5: Kết luận
Đánh giá lại kết quả làm được và chưa làm được trong việc xây dựng thư viện.
Ngoài ra cũng nêu ra hướng phát triển tiếp theo của thư viện trong tương lai.
TP.Hồ Chí Minh, Tháng 03 năm 2011
Người thực hiện đề tài

Nguyễn Lâm Tú


iv

LỜI CÁM ƠN
Em xin chân thành cảm ơn Khoa Công Nghệ Phần Mềm, Trường Đại Học Công
Nghệ Thông Tin đã tạo điều kiện thuận lợi cho em thực hiện luận văn tốt nghiệp này.

Em xin chân thành gửi lời cảm ơn đến thầy Ngô Thanh Hùng đã tận tình chỉ bảo
và hướng dẫn em trong suốt thời gian qua để em có thể hoàn thành tốt đề tài.
Em xin chân thành cảm ơn quý thầy cô trong khoa đã tận tình giảng dạy, trang bị
cho em nhưng kiến thức quý báu trong những năm học vừa qua.
Con xin nói lên lòng biết ơn sâu sắc tới cha mẹ, người đã chăm sóc, nuôi dậy con
trưởng thành và không ngừng cổ vũ, động viên tinh thần con .
Cũng xin gửi lời cảm ơn tới anh chị, bạn bè đã nhiệt tình giúp đỡ, trao đổi kiến
thức, kinh nghiệm, động viên rất nhiều trong thời gian qua.
Mặc dù em đã cố gắng hoàn thành luận văn trong phạm vi, khả năng cho phép.
Nhưng chắc chắn sẽ không tránh khỏi nhưng thiếu sót. Em mong nhận được sự cảm
thông, đóng góp ý kiến của quý thầy cô và bạn bè.

TP.Hồ Chí Minh, Tháng 03 năm 2011
Người thực hiện đề tài
Nguyễn Lâm Tú


v

NHẬN XÉT CỦA GIẢNG VIÊN HƢỚNG DẪN
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................

...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................

Họ tên, chữ ký của giảng viên hướng dẫn


vi

NHẬN XÉT CỦA GIẢNG VIÊN PHẢN BIỆN
...................................................................................................................................
...................................................................................................................................

...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................


Họ tên, chữ ký của giảng viên phản biện


vii

MỤC LỤC
Trang
ABSTRACT ........................................................................... Error! Bookmark not defined.
MỞ ĐẦU ................................................................................ Error! Bookmark not defined.
LỜI CÁM ƠN ........................................................................ Error! Bookmark not defined.
NHẬN XÉT CỦA GIẢNG VIÊN HƢỚNG DẪN .............. Error! Bookmark not defined.
NHẬN XÉT CỦA GIẢNG VIÊN PHẢN BIỆN ................. Error! Bookmark not defined.
DANH MỤC CÁC BẢNG, SƠ ĐỒ, HÌNH ......................... Error! Bookmark not defined.
DANH SÁCH CÁC TỪ VIẾT TẮT .................................... Error! Bookmark not defined.
Chƣơng 1: Tổng quan .........................................................................................................1
1.1. Các nền tảng di động............................................................................................. 1
1.1.1. Một vài nét ............................................................................................................1
1.1.2 Lập trình trên thiết bị di động ..............................................................................2
1.2. OpenGL và OpenGL ES 2.0 ................................................................................. 3
1.2.1. OpenGL và DirectX ..............................................................................................3
1.2.2. OpenGL ES 2.0 .....................................................................................................5
1.3. Lý do xây dựng đề tài............................................................................................ 6
1.4. Mục tiêu đề tài ....................................................................................................... 7
Chƣơng 2: Cơ sở toán học đồ họa máy tính ...................................................................10
2.1. Toán học và phép biến đổi đồ họa ..................................................................... 10
2.1.1. Vector trong không gia gian 3 chiều ..................................................................10
2.1.2. Ma trận ...............................................................................................................15
2.1.3. Mặt phẳng ..........................................................................................................24
2.1.4. Tia.......................................................................................................................26
2.2. Quá trình hiển thị đối tƣợng qua các hệ trục tọa độ trong không gian ba

chiều (Transformation Pipline) .................................................................................. 27
Chƣơng 3: OpenGL ES 2.0 và ngôn ngữ lập trình OpenGL Shading .........................34


viii
3.1. OpenGL ES 1.1 và OpenGL ES 2.0 ................................................................... 34

3.2. Ngôn ngữ lập trình OpenGL Shading ............................................................... 37
3.2.1 Biến và kiểu biến ................................................................................................38
3.2.2 Vector và các thành phần của nó .......................................................................40
3.2.3 Hằng số ..............................................................................................................41
3.2.4 kiểu cấu trúc .......................................................................................................42
3.2.5 Kiểu dữ liệu mảng ..............................................................................................42
3.2.6 Toán tử ...............................................................................................................43
3.2.7 Hàm ....................................................................................................................44
3.2.8 Câu lệnh điều khiển ............................................................................................46
3.2.9 Uniform ..............................................................................................................47
3.2.10 Attributes ............................................................................................................48
3.2.11 Varyings .............................................................................................................49
3.2.12 Tiền xử lý (Preprocessor) và chỉ thị(Directives)...............................................50
3.2.13 Quá trình tạo và sử dụng Shader .......................................................................51
Chƣơng 4: Thiết kế, cài đặt thƣ viện hỗ trợ lập trình đồ họa trên OpenGL ES 2.0 ..53
4.1. Khái quát chung .................................................................................................. 53
4.2. Một số kỹ thuật sử dụng trong thƣ viện ............................................................ 54
4.3. Kiến trúc .............................................................................................................. 57
4.4. Các lớp đƣợc xây dựng trong thƣ viện.............................................................. 62
4.4.1 Manager .............................................................................................................62
4.4.2 Shapes.................................................................................................................62
4.4.3 Transformation ...................................................................................................65
4.4.4 Util ......................................................................................................................65

4.4.5 Light ...................................................................................................................66
4.4.6 Texture ................................................................................................................67
4.4.7 Fog .....................................................................................................................68


ix
4.4.8 Picking ................................................................................................................69
4.4.9 EventHandler .....................................................................................................70
4.4.10 3DMath..............................................................................................................71
4.4.11 CSprite ...............................................................................................................71
4.4.12 MSkyBox ............................................................................................................72
4.4.13 MVBOManager .................................................................................................73
4.4.14 Sử dụng thư viện và demo .................................................................................74
Chƣơng 5: Kết luận ...........................................................................................................79
5.1. Kết quả ................................................................................................................. 79
5.2. Hƣớng phát triển ................................................................................................. 79
TÀI LIỆU THAM KHẢO ................................................................................................81
PHỤ LỤC ...........................................................................................................................82


x

DANH MỤC CÁC BẢNG, SƠ ĐỒ, HÌNH
Bảng 1.1: Chức năng của thư viện ...................................................................................... 9
Bảng 3.1: Biến và kiểu biến trong Shading Language ...................................................... 39
Bảng 3.2: Các toán tử ........................................................................................................ 43
Bảng 3.3: Phạm vi của biến............................................................................................... 45
Bảng 4.1: Các thành phần của thư viện và phạm vi của chúng ........................................ 59
Hình1.1: Thời kỳ hậu PC .................................................................................................... 1
Hình 1.2: OpenGL ............................................................................................................... 3

Hình 1.3: Direct X ............................................................................................................... 4
Hình 2.1: Vector ................................................................................................................ 10
Hình 2.2: Trục tọa độ tay trái và tay phải ......................................................................... 11
Hình 2.3: Vector tiêu chuẩn .............................................................................................. 12
Hình 2.4: Cộng hai vector ................................................................................................. 13
Hình 2.5: Trừ hai vector .................................................................................................... 13
Hình 2.6: Nhân có hướng hai vector ................................................................................. 15
Hình 2.7: Hệ tọa độ đồng nhất .......................................................................................... 19
Hình 2.8: Phép dịch chuyển ma trận ................................................................................. 21
Hình 2.9: Phép quay ma trận ............................................................................................. 22
Hình 2.10: Phép co dãn ..................................................................................................... 23
Hình 2.11: Mặt phẳng ....................................................................................................... 24
Hình 2.12: Tính toán điểm gần nhất.................................................................................. 26
Hình 2.13: Phép biến đổi hình trong không gian 3 chiều ................................................. 28
Hình 2.13: Quá trình biến đổi ảnh qua các hệ trục tọa độ................................................. 28
Hình 2.14: Tọa độ đối tượng ............................................................................................. 29
Hình 2.15: Tọa độ thế giới thực ........................................................................................ 30
Hình 2.16: Hệ tọa độ mắt .................................................................................................. 30
Hình 2.17: Hệ tọa độ Projection ........................................................................................ 31
Hình 2.18: Hệ tọa độ thiết bị chuẩn .................................................................................. 32
Hình 2.19: Tọa độ màn hình ............................................................................................. 33
Hình 3.1: Tổng quan về các phiên bản OpenGL............................................................... 34
Hình 3.2: Quá trình Pipline trong OpenGL ES 1.1 ........................................................... 35
Hình 3.3: Quá trình Pipline của OpenGL ES 2.0 .............................................................. 36
Hình 3.4: Sử dụng fixed function và programmable ........................................................ 37
Hình 3.5: Cấu trúc của Shading Language ....................................................................... 38
Hình 3.6: Cách tạo và sử dụng Shader .............................................................................. 52
Hình 4.1: Thành phần Util ................................................................................................ 66



xi
Hình 4.2: Thành phần 3DMath ......................................................................................... 71
Hình 4.3: Thêm thư viện vào Visual Studio ..................................................................... 75
Hình 4.4: Demo dragon fly ............................................................................................... 76
Hình 4.5: Demo Lake ........................................................................................................ 77
Hình 4.6:Demo CoverFlow .............................................................................................. 78
Sơ đồ 4.1: Observer và ứng dụng trong thư viện .............................................................. 56
Sơ đồ 4.2: Các package của thư viện ................................................................................ 58
Sơ đồ 4.3: Triển khai thư viện trong ứng dụng ................................................................. 60
Sơ đồ 4.4: Quá trình hoạt động của ứng dụng .................................................................. 61
Sơ đồ 4.5: Các thành phần trong Manager ........................................................................ 62
Sơ đồ 4.6: Các thành phần Shapes .................................................................................... 63
Sơ đồ 4.7: Lớp lưu trạng thái đối tượng ............................................................................ 65
Sơ đồ 4.8: Thành phần transformation .............................................................................. 65
Sơ đồ 4.9: Thành phần quản lý ánh sáng .......................................................................... 67
Sơ đồ 4.10: Thành phần quản lý Texture .......................................................................... 68
Sơ đồ 4.11: Thành phần quản lý sương mù ...................................................................... 69
Sơ đồ 4.12: Thành phần Picking ....................................................................................... 70
Sơ đồ 4.13: Thành phần nắm bắt sự kiện chuột ................................................................ 71
Sơ đồ 4. 14: Thành phần Sprite ......................................................................................... 72
Sơ đồ 4.15: Thành phần SkyBox ...................................................................................... 73
Sơ đồ 4.16: Thành phần Vertex Buffer Object ................................................................. 74
Sơ đồ 5.1: Hướng đến chức năng mở rộng ....................................................................... 80


xii

DANH SÁCH CÁC TỪ VIẾT TẮT

API (Application Programming Interface): Giao diện lập trình ứng dụng

C (Controller): Điều khiển
Inc (Incorporation): Tổ chức, đoàn thể
M (Model) : model
NDC (Normalized Device Cordinate): Hệ tọa độ độc lập thiết bị
GL (Graphic Language): Ngôn Ngữ đồ họa
GPU (Graphic Process Unit): Bộ xử lý đồ họa
SL (Shading Language): Ngôn ngữ Shading
PC (Personal Computer) : Máy tính cá nhân
2D (2 Demension): Hai chiều
3D (3 Demension): Ba chiều
V (View): Hiện thị, biểu diễn
VBO (Vertex Buffer Object): Đối tượng Vertex trong bộ nhớ đệm


Nghiên cứu và xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0

Trang 1

Chƣơng 1: Tổng quan
1.1. Các nền tảng di động
1.1.1. Một vài nét:
Sự vươn lên mạnh mẽ của Apple cùng với những sản phẩm được gọi là “bom tấn”
của họ đang mang lại cho giới công nghệ một luồng không khí hoàn toàn mới. Những
thiết bị như IPhone, IPad đã và đang tạo nên một cơn sốt trên toàn cầu và mở ra một thời
ký mới, mà theo Steve Jobs đó là thời kỳ hậu PC(Máy tính để bàn). Steve Jobs khẳng
định như đinh đóng cột rằng PC (máy tính để bàn) đang dần trở nên lạc hậu, và rằng thời
“hậu PC” sẽ phải là những thiết bị như iPad hoặc những công nghệ số tương tự. Bên cạnh
Apple, một số hãng công nghệ tên tuổi khác như Google, Sam Sung, Nokia.. và cả
Microsoft cũng có những đóng góp và chiến lược riêng của mình cho nền tảng di động.
Kỷ nguyên hậu PC có vẻ như đã bắt đầu với sự tăng trưởng nhanh chóng của các thiết bị

di động không phải là PC có khả năng truy cập Internet.

Hình1.1: Thời kỳ hậu PC

PC đối với nhiều người trên khắp thế giới chỉ còn là một trong vài thiết bị được sử
dụng để truy cập Internet, và số lượng các ứng dụng cho giải trí và kinh doanh các loại
thiết bị truy cập Internet không phải PC đang tăng nhanh.Hàng tỷ thiết bị được kết nối
Internet cũng làm tăng dữ liệu và vấn đề an toàn thông tin đối với thế giới có dây cũng
như không dây. Kiến trúc sư trưởng phần mềm Ray Ozzie đã rời bỏ Microsoft vào tháng

GVHD: TS Ngô Thanh Hùng

SVTH: Nguyễn Lâm Tú


Nghiên cứu và xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0

Trang 2

10/2010 đã cảnh báo các đồng nghiệp (tại Microsoft) rằng người khổng lồ phần mềm
máy tính phải chống chọi cho thời mới – kỷ nguyên hậu PC đã bắt đầu.
1.1.2 Lập trình trên thiết bị di động

Phần mềm mới ra đời cách đây 2 năm của Google đang tiến những bước nhanh
nhưng vững chắc và đầy tham vọng để vượt Symbian ngay trong năm 2010. Tính riêng
quý IV/2010, số lượng thiết bị Android được xuất xưởng cũng nhiều gấp đôi iPhone.
Không chọn phát triển một nền tảng mở cho nhiều đối tác phần cứng như Google,
Apple đi theo một hướng khác để xây dựng "hệ sinh thái di động". Với tầm nhìn thiên tài
của Steve Jobs, Apple có khả năng cho ra đời các sản phẩm đẹp về thiết kế, đáng tin cậy,
dễ sử dụng và làm cho người dùng cảm thấy nó xứng đáng với số tiền họ bỏ ra. Doanh số

cao khiến các nhà cung cấp sẵn sàng chấp nhận các điều khoản mà Apple đưa ra và giới
phát triển cũng hào hứng viết ứng dụng chạy trên thiết bị của "Quả táo", tạo nên một hệ
sinh thái đầy đủ và hấp dẫn.
Quyết định hợp tác giữa Nokia và Microsoft được giới chuyên môn nhận định là cơ
hội "trời cho" để Android hoặc iOS bước lên bục chiến thắng. Tuy vậy, Nokia hiện là
công ty điện thoại lớn nhất toàn cầu và họ không bỗng dưng từ bỏ hệ điều hành di động
phổ biến nhất thế giới dễ dàng như thế. Hãng Phần Lan hẳn phải có niềm tin hoặc lý do
riêng để chấp nhận nền tảng chỉ chiếm thị phần chưa bằng 1/7 Symbian. Giám đốc điều
hành Stephen Elop (cựu lãnh đạo của Microsoft) tin rằng việc bắt tay với tập đoàn phần
mềm số một thế giới sẽ giúp họ đánh bại 4 đối thủ chính là Apple (iOS), Google
(Android), RIM (BlackBerry) và HP (webOS) và biến phần mềm Windows Phone thành
thỏi nam châm thu hút giới lập trình viên, các nhà sản xuất và người tiêu dùng.
Khi Microsoft công bố Windows Phone đầu năm 2010, nhiều người cho rằng một hệ
điều hành mới ra đời vào thời điểm đó là quá muộn. Nhưng với một hãng đã có nhiều
kinh nghiệm tham gia các cuộc chiến nền tảng, Microsoft tin không có khái niệm "trâu
GVHD: TS Ngô Thanh Hùng

SVTH: Nguyễn Lâm Tú


Nghiên cứu và xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0

Trang 3

chậm uống nước đục" trong công nghệ. Cách đây hơn 20 năm, họ từng vượt qua Apple
bằng cách ký kết với hàng loạt hãng phần cứng để tạo ra những hệ thống PC giá rẻ. Vài
năm trước, Facebook hạ gục mạng xã hội đang ngự trên đỉnh cao thế giới là MySpace khi
cung cấp một nền tảng đủ sôi động để giữ chân hơn 500 triệu người sử dụng.
Trong khi đó, RIM vẫn có một lượng fan trung thành dù các nhà phát triển liên tục
phàn nàn rằng rất khó viết ứng dụng chạy trên dòng thiết bị này. Mới đây, trang

Bloomberg đưa tin RIM đang phát triển một công nghệ cho phép thiết bị của họ có thể
chạy ứng dụng Android. Còn HP lại gặp vấn đề ngược lại: Họ có một nền tảng được đánh
giá cao nhưng cơ sở người dùng lại khiêm tốn khiến các chuyên gia không hào hứng xây
dựng ứng dụng cho nó. Do vậy, giới chuyên môn nhận định, trong thời kỳ hậu Symbian,
cuộc đua sẽ chỉ xoay quanh Android và iOS nhưng vẫn để ngỏ khả năng cho sự phát triển
"xuất thần" của Windows Phone.

1.2. OpenGL và OpenGL ES 2.0
1.2.1. OpenGL và DirectX

Hình 1.2: OpenGL

Vào năm 1982, Opengl được ra đời với cái tên là Iris GL(GL = Graphics Library)
bởi công ty Silicon Graphics. Sau này thi công ty đã quyết định đưa thư viện qua một
chuẩn mở. Ngày này thì OpenGL được quản lý và phát triển bởi Khronos Group, một

GVHD: TS Ngô Thanh Hùng

SVTH: Nguyễn Lâm Tú


Nghiên cứu và xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0

Trang 4

tổ chức phi lợi nhuận và bao gồm nhiều đại diện của các công ty. OpenGL được hỗ
trợ bởi tất cả các flatform game như Mac, Windows, linux, PS3… ngoại trừ Xbox.

Hình 1.3: Direct X


DirectX là một thư viện đồ họa của Microsoft. Nó bao gồm Direct3D, DirectInput và
DirectSound. DirectX được sử dụng cho các game trên máy PC và Xbox 360.
Tuy nhiên khi so sánh 2 thư viện được dùng phổ biến nhất này thì đã một số đặc điểm
khác biệt:
-

OpenGL có “sức mạnh” lớn hơn DirectX : OpenGL được đánh giá có khả năng vẽ
nhanh hơn DirectX [10]. Ngoài ra OpenGL có nhiều hãng thứ 3 cùng mở rộng và
phát triển, nhiều hãng là những nhà chế tạo card đồ họa hay vi điều khiển, do đó
mà nó có khả năng sử dụng những tính năng mới của GPU tốt hơn. OpenGL được
sử dụng cho tất cả các flatform từ Windows đến Linux. Nhờ cộng đồng lớn của
mình mà OpenGL thường được phát triển những tính năng nội trội sớm hơn
DirectX. Ví dụ như tính năng Tessellation [11]

-

OpenGL chạy được đa nền tảng: khi mà thị phần Windows đang bị cạnh tranh bởi
nền tảng mở, Linux và Mac thì yêu cầu về một bộ thư viện có khả năng chạy trên
tất cả các nền tảng này ngày càng cần thiết. Khi đó các ứng dụng đồ họa và game

GVHD: TS Ngô Thanh Hùng

SVTH: Nguyễn Lâm Tú


Nghiên cứu và xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0

Trang 5

sẽ có thể được phát triển trên tất cả các dòng máy. Một điểm nữa đó là các bản

DirectX mới không thể chạy trên hệ điều hành XP trong khi đó một nửa người
dùng vẫn đang tiếp tục sử dụng hệ điều hành này [12].
-

OpenGL là hướng phát triển cho tương lai: Chúng ta cần một nền tảng mở và một
nền tảng mạnh mẽ để phát triển đồ họa. OpenGL là một nền tảng mà các ứng dụng
có thể có giá thành rẻ nhất và chất lượng tốt nhất. Ngoài ra các ứng dụng này có
thể chạy trên đa nền tảng.

1.2.2. OpenGL ES 2.0
Sử dụng chuẩn công nghệ tăng tốc đồ hoạ chuyên nghiệp, trò chơi Vijay Singh Pro
Golf 3D do Gameloft giới thiệu có chất lượng hình ảnh sống động nhất từ trước đến nay
trên môi trường di động.
Trò chơi này sẽ được tích hợp sẵn trong điện thoại P990 và M600 của Sony-Erricson.
Đây cũng là 2 thiết bị di động đầu tiên trên thế giới hỗ trợ công nghệ tăng tốc đồ hoạ từ
phần cứng. OpenGL ES, một phiên bản đặc biệt của chuẩn đồ họa chuyên nghiệp
OpenGL dành cho điện thoại di động, giao tiếp với phần mềm qua các hàm giao diện lập
trình ứng dụng (Application Programming Interface - API) đã được tối ưu hoá cho việc
thể hiện đồ hoạ 3 chiều trong game trên các hệ điều hành di động Symbian hoặc máy ảo
BREW.
Vậy OpenGL ES và OpenGL ES 2.0 là gì?
OpenGL ES là một bộ thư viện đồ họa 3D nằm trong bộ thư viện OpenGL, chuyên
dành cho phát triển các ứng dụng trên thiết bị cầm tay như Mobile, PDA. Được quản lý
bởi tổ chức phi lợi nhuận Khronos Group, inc.
Một số phiên bản khác nhau của bộ thư viên này đã ra đời. Phiên bản OpenGL ES
1.0 được đặc tả dựa trên bản đặc tả của OpenGL 1.3, phiên bản OpenGL ES 1.1 được đặc

GVHD: TS Ngô Thanh Hùng

SVTH: Nguyễn Lâm Tú



Nghiên cứu và xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0

Trang 6

tả trên bản đặc tả cảu OpenGL 1.5 và phiên bản OpenGL ES 2.0, là phiên bản mới nhất
hiện nay, được đặc tả trên phiên bản OpenGL 2.0.
OpenGL ES 2.0 được công bố vào tháng 3 năm 2007. Một đặc điểm nổi bật của phiên
bản này khác hẳn với nhưng phiên bản trước, đó là nó đã bỏ các fixed function. Các fixed
function là các hàm tính toán đồ họa sẵn có, giúp người phát triển xử lý các phép toán và
dựng hình trên không gian 3 chiều. Thay vào đó là cách lập trình theo kiều
Programmable. Cách lập trình này bắt người phát triển phải tự viết những đoạn code tính
toán các yếu tố đồ họa dựa vào ngôn ngữ Shading Language. Một ngôn ngữ được sử lý
bởi GPU và có cấu trúc rất giống với ngôn ngữ C.

1.3. Lý do xây dựng đề tài
OpenGL ES 2.0 ra đời (2007) trở thành một thư viện lập trình mới, và có khả năng
thực thi hơn hẳn phiên bản cũ. Tuy nhiên, các phiên bản này hoàn toàn khác nhau. Một
bên là fixed function API và một bên là programmable API. Như thế chúng cùng tồn tại
song song với nhau. Tuy nhiên theo xu hướng về hiệu quả thì OpenGL ES 2.0 ngày càng
được sử dụng nhiều hơn. Trong phiên bản Iphone 3G và 3GS, chỉ có 3GS là hỗ trợ
OpenGL ES 2. 0. Khả năng đồ họa và cấu hình của thiết bị này cũng hơn hẳn phiên bản
3G. Opengles 2.0 đã mở ra một thời kỳ thay đổi trong việc lập trình đồ họa và game trên
các thiết bị di động.
Tuy nhiên việc lập trình trên bộ API này cũng có một số thay đổi và khó khăn cho
người lập trình viên. Opengles 2.0 sử dụng shader language và không có các fixed
functions. Điều đó buộc người lập trình viên phải tự thiết kế theo hướng sử dụng shader
language và tự viết các fixed function của mình.
Sự ra đời của lập trình hướng đối tượng là một bước tiến trong kỹ thuật lập trình. Lập

trình hướng đối tượng đã thể hiện được sự hiện đại và mạnh mẽ của mình. Giúp cho việc
lập trình dễ dàng và đạt hiệu quả cao hơn. Tuy nhiên Khronos chỉ đưa ra các hàm API
đơn thuần và đơn giản. Việc kết hợp chúng cũng như viết các thành phần bổ trợ để hình
thành một cấu trúc hướng đối tượng cho OpenGL ES là một việc cần thiết. Một điểm

GVHD: TS Ngô Thanh Hùng

SVTH: Nguyễn Lâm Tú


Nghiên cứu và xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0

Trang 7

mạnh khác nữa của OpenGL ES chính là sự đa nền tảng. Để đảm bảo tính đa nền tảng
chúng ta cần hướng đến một kiến trúc trừu tượng và phổ biến. Đó cũng là một điểm mà
luận văn cố gắng hướng tới.

1.4. Mục tiêu đề tài
Khuôn khổ nội dung của luận văn là giúp người lập trình hướng tới một cách tiếp
cận bộ thư viện này đơn giản hơn, với một cách nhìn mới mẻ từ phía lập trình hướng đối
tượng. Song song với việc phần cứng hỗ trợ OpenGL ES 2.0, nhiều thiết bị cũng băt đầu
hỗ trợ nền tảng C++. Lập trình hướng đối tượng là lối lập trình hiện đại, có khả năng phát
triển và mở rộng mạnh mẽ.
Từ tính đặc thù của OpenGL ES 2.0 và lập trình trên thiết bị di động mà có một số
vấn đề đặt ra:
-

Lập trình theo hướng programmable thay thế fixed function, tạo ra một cấu trúc để
sử dụng và triệu gọi Shader.


-

Thư viện được thiết kế theo hướng đối tượng.

-

Kiến trúc được hướng đến chạy trên đa nền tảng. Các lớp đều phải triển khai các
interface.
Trong phạm vi Luận văn, chỉ hướng đến xây dựng một “Lõi” cho bộ thư viện. Lõi của

thư viện này đáp ứng được những yêu cầu sử dụng căn bản của người lập trình. Những
yêu cầu đưa ra:
Yêu cầu

Mô tả

Khởi tạo tự động các thành phần của

Vấn đề: Tạo ra chương trình như nào? Khởi tạo

một ứng dụng đồ họa trên nền

các đối tượng cần thiết ra sao? Tạo một bộ khung

OpenGL ES 2.0

cho ứng dụng chạy.

Kết nối ứng dụng với flatform cụ thể


Vấn đề: Làm sao để chương trình khung định ra
trước có thể kết nối với flatform đang sử dụng

Xử lý vẽ tùy biến

Vấn đề: Tùy vào từng ứng dụng mà cách tạo hàm
vẽ và thao tác vẽ khác nhau.

GVHD: TS Ngô Thanh Hùng

SVTH: Nguyễn Lâm Tú


Nghiên cứu và xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0

Xây dựng các fixed function riêng

Trang 8

Vấn đề: OpenGL ES 2.0 không hỗ trợ fixed
function, do đó ta cần tự xây dựng các hàm của
riêng mình.

Xây dựng các thao tác cơ bản tính

Vấn đề: Chúng ta đang làm việc và xử lý các ứng

toán trên không gian 3D


dụng 3D do đó việc tính toán với vector, ma trận
là hết sức cần thiết.

Các cấu trúc toán học 3D cơ bản

Vấn đề: Tự tạo lập các cấu trúc 3D cơ bản

Một số model mẫu

Vấn đề: Đôi khi người lập trình cần những ví dụ
mẫu hay đối tượng đặc trưng như hình hộp, hình
cầu…

Texture

Vấn đề: Texture luôn là một điều quan trọng
trong ứng dụng. Nhưng cũng gây không ít khó
khăn khi nó xử lý tác vụ trên các bit. Do đó cần
thiết phải xây dựng cấu trúc và hàm xử lý.

Xử lý sự kiện

Vấn đề: Ứng dụng luôn tương tác với người
dùng, do đó cần thiết phải xây dựng bộ xử lý sự
kiện.

Xử lý picking

Vấn đề: Picking là một trong những vấn đề cơ
bản, thường gặp và cũng được sử dụng nhiều

nhất

Lưu lại trạng thái

Vấn đề: Cần thiết phải lưu lại trạng thái để sau
này sử dụng.

Một số tiện ích khác

Vấn đề: Tạo dưng cấu trúc phổ thông cho tất cả
các ứng dụng: #define, định nghĩa các kiểu màu,


Quản lý các tính năng đồ họa căn

Vấn đề: Có một cấu trúc hướn đối tượng dễ dàng

bản: Fog, Lighting

tiếp xúc và thao tác trên các tính năng đồ họa căn
bản.

GVHD: TS Ngô Thanh Hùng

SVTH: Nguyễn Lâm Tú


Nghiên cứu và xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0

Trang 9


Xây dựng không gian đồ họa

Vấn đề: Cần làm cho không gian đồ họa sống

(SkyBox)

động và gần với thực tế hơn.

Xây dựng cơ chế load model từ file

Vấn đề: sử dụng lại file tài nguyên của các

có sẵn

chương trình đồ họa

Bảng 1.1: Chức năng của thư viện

GVHD: TS Ngô Thanh Hùng

SVTH: Nguyễn Lâm Tú


Nghiên cứu và xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0

Trang 10

Chƣơng 2: Cơ sở toán học đồ họa máy tính
2.1. Toán học và phép biến đổi đồ họa

2.1.1. Vector trong không gia gian 3 chiều:
Vector là một đoạn thẳng có hướng. Vector bao gồm 2 thuộc tính là độ dài và hướng.
Vector được sử dụng rộng rãi trong toán hình học, trong Vật Lý học để biểu diễn các
thành phần lực hay vận tốc.
Trong không gian 3 chiều, Vector được sự dụng để miêu tả về hướng. Hướng của
một tia, hướng của camera hay hướng của bề mặt vật (Vector pháp tuyến)

Hình 2.1: Vector

Hai Vector được coi là bằng nhau khi chúng có cùng độ dài và hướng, không phụ
thuộc vào vị trí của chúng trong không gian. Chính vì thế Vector cũng không phụ thuộc
vào bất kỳ trục tọa độ nào.

GVHD: TS Ngô Thanh Hùng

SVTH: Nguyễn Lâm Tú


Nghiên cứu và xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0

Trang 11

Hệ trục tọa độ bàn tay trái và bàn tay phải

Hình 2.2: Trục tọa độ tay trái và tay phải

Có 2 hệ trục tọa độ đước sử dụng nhiều nhất trong không gian 3 chiều đó là hệ trục
tọa độ bàn tay trái và bàn tay phải. Hệ trục tọa độ bàn tay trái, trục Z được hướng vào
trong, trong khi đó hệ trục tọa độ bàn tay phải, trục Z hướng ra ngoài.
Bởi vì tọa độ của Vector không làm thay đổi các thuộc tính của Vector, do đó chúng

ta có thể di chuyển Vector trong không gian, mà song song với nó. Khi mà gốc Vector
trùng với gốc tọa độ thì ta gọi Vector được đặt ở vị trí tiêu chuẩn. Khi Vector được đặt ở
vị trí tiêu chuẩn, ta có thể xác định Vector này theo hệ trục tọa độ hiện hành dựa vào
điểm đầu của Vector.

GVHD: TS Ngô Thanh Hùng

SVTH: Nguyễn Lâm Tú


Nghiên cứu và xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0

Trang 12

Hình 2.3: Vector tiêu chuẩn

Vector thường được viết dưới dạng chữ thường in đậm, đôi lúc người ta cũng dùng cả
chữ hoa in đậm để biểu diến. Với các thành phần tương ứng tọa độ đẩu Vector khi nó
được đặt ở vị trí tiêu chuẩn.
u = (ux, uy), N = (Nx, Ny, Nz), c = (cx, cy, cz, cw)
Có một số Vector đặc biệt: Zero-Vector 0 =(0, 0, 0) và các Vector đơn vị lân lượt
theo trục x, y và z trong không gian 3 chiều:
i = (1, 0, 0); j = (0, 1, 0); k = (0, 0, 1)
Một số phép tính trên Vector:
So sánh 2 Vector: hai Vector chỉ bằng nhau khi chúng có độ lớn và hướng như nhau
Tính độ lớn của 1 Vector: cho Vector u = (ux, uy, uz), độ lớn của Vector được tính như
sau:

Chuẩn hóa một Vector: Chuẩn hó một Vector nghĩa làm cho Vector có độ lớn bằng 1 mà
hướng vẫn không đổi. Ta chuẩn hóa một Vector như sau:


GVHD: TS Ngô Thanh Hùng

SVTH: Nguyễn Lâm Tú


×