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

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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠ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 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, thiết bị di động đóng vai trò quan trọng đời sống người Mỗi người ln mang theo 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 Ngồi chương trình giải trí, trò chơi thiết bị phần thiếu người sử dụng hàng ngày Việc lập trình thiết bị, đặc biệt ứng dụng đồ họa game nhiều lập trình viên quan tâm OpenGL ES coi thư viện lập trình đồ họa chuyên cho thiết bị di động Với khả thực thi tốt mạnh mẽ, ngày nhiều ứng dụng viết dựa OpenGL ES Tuy nhiên, OpenGL ES cung cấp dạng đặc tả chuẩn với hàm 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 chương trình, tự thân phải xây dựng nên cấu trúc riêng Hơn nữa, OpenGL ES 2.0 phiên đời gần với nhiều cải tiến thay đổi Cách tiếp xúc lập trình với hồn tồn khác với phiên trước đó, điều gây số khó khăn việc tiếp cận lập trình với phiên Đòi hỏi phải xây dựng số hàm phụ trợ Từ lý đó, luân văn mong muốn xây dựng cấu trúc có sẵn hàm, lớp trợ giúp cho người lập trình Làm cho trình phát triển ứng dụng dễ dàng, thuận tiện nhanh chóng Có thể tiếp cận giải sử dụng OpenGL ES 2.0 dễ dàng hiệu Những hàm lớp xây dựng sẵn theo kiến trúc hướng đối tượng, người dùng cần triệu gọi chúng, tự mở rộng chúng cách thừa kế lại Thư viện giúp cho người lập trình chuyển từ phiên cũ qua phiên 2.0 dễ dàng Không phải viết lại hàm phiên từ đầu Với tư tưởng xây dựng thư viện độc lập với tảng, lớp thư viện đặc tả trước tiên lớp ảo, sau thực thi lớp cụ thể Việc hữu ích ta chuyển qua tảng lập trình khác Nội dung luận văn chia làm chương: iii Chương 1: Tổng quan Trong chương này, tìm hiểu tầm quan trọng phát triển mạnh mẽ thiết bị di động tảng di động Kéo theo phát triển yêu cầu phần mềm xử lý đồ họa, ứng dụng hay game cho thiết bị Điều dẫn đến cần thiết phải có thư viện lập trình đồ họa dành riêng cho chúng, OpenGL ES Nêu lên lý thực đề tài, tính cấp bách, thiết yếu đề tài Ngồi đưa mục đích kết muốn hướng đến đề tài Chương 2: Cơ sở tốn học đồ họa máy tính Nêu khái niệm, luận điểm lập trình ba chiều Bao gồm khái niệm toán học, ma trận, … trình biến đổi hình học ba chiều không gian khác Chương 3: OpenGL ES 2.0 ngơn ngữ lập trình OpenGL Shading Nói đến cơng nghệ sử dụng để thực đề tài phiên mạnh mẽ OpenGL ES Cung cấp cho người đọc nhìn tồn diện phiên OpenGL So sánh phiên OpenGL ES 2.0 với phiên trước nó, số điểm phiên 2.0 Đặc biệt chương sâu nghiên cứu ngôn ngữ OpenGL ES Shading Language, nét đặc trưng khác hẳn OpenGL ES 2.0 Chương 4: Thiết kế, cài đặt thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0 Chương nêu lên kiến trúc tổng thể thư viện Đồng thời vào chi tiết, đặc tả lớp xây dựng thư viện Chương 5: Kết luận Đánh giá lại kết làm chưa làm việc xây dựng thư viện Ngoài nêu hướng phát triển thư viện tương lai TP.Hồ Chí Minh, Tháng 03 năm 2011 Người thực đề 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 luận văn tốt nghiệp Em xin chân thành gửi lời cảm ơn đến thầy Ngơ Thanh Hùng tận tình bảo hướng dẫn em suốt thời gian qua để em hồn thành tốt đề tài Em xin chân thành cảm ơn quý thầy cô khoa tận tình giảng dạy, trang bị cho em kiến thức quý báu 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, ni dậy trưởng thành không ngừng cổ vũ, động viên tinh thần 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 nhiều thời gian qua Mặc dù em cố gắng hoàn thành luận văn phạm vi, khả cho phép Nhưng chắn khơng tránh khỏi thiếu sót Em mong nhận cảm thơng, đóng góp ý kiến q thầy bạn bè TP.Hồ Chí Minh, Tháng 03 năm 2011 Người thực đề 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ý 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ý 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 Các tảng di động 1.1.1 Một vài nét 1.1.2 Lập trình thiết bị di động 1.2 OpenGL OpenGL ES 2.0 1.2.1 OpenGL DirectX 1.2.2 OpenGL ES 2.0 .5 1.3 Lý xây dựng đề tài 1.4 Mục tiêu đề tài Chƣơng 2: Cơ sở tốn học đồ họa máy tính 10 2.1 Toán học phép biến đổi đồ họa 10 2.1.1 Vector không gia gian 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 hệ trục tọa độ không gian ba chiều (Transformation Pipline) 27 Chƣơng 3: OpenGL ES 2.0 ngơn ngữ lập trình OpenGL Shading 34 viii 3.1 OpenGL ES 1.1 OpenGL ES 2.0 34 3.2 Ngơn ngữ lập trình OpenGL Shading 37 3.2.1 Biến kiểu biến 38 3.2.2 Vector thành phần .40 3.2.3 Hằng số 41 3.2.4 kiểu cấu trúc .42 3.2.5 Kiểu 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) thị(Directives) .50 3.2.13 Quá trình tạo 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 OpenGL ES 2.0 53 4.1 Khái quát chung 53 4.2 Một số kỹ thuật sử dụng thƣ viện 54 4.3 Kiến trúc 57 4.4 Các lớp đƣợc xây dựng 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 demo 74 Chƣơng 5: Kết luận 79 5.1 Kết 79 5.2 Hƣớng phát triển 79 TÀI LIỆU THAM KHẢO 81 PHỤ LỤC 82 Nghiên cứu xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0 Trang 68 Sơ đồ 4.10: Thành phần quản lý Texture 4.4.7 Fog: Cũng giống lớp Lighting, CFogImpl đóng vai trò quản lý hiệu ứng sương mù, hiệu ứng thường hay sử dụng Những thành phần thao tác với thuộc tính sương mù chứa lớp Lớp CFogImpl có liên hệ chặt chẽ với chương trình Shading Language UserDataImpl Nó nắm giữ attribute uniform Shading Language đồng thời liên kết với UserDataImpl thông qua biến quản lý programObject GVHD: TS Ngô Thanh Hùng SVTH: Nguyễn Lâm Tú Nghiên cứu xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0 Trang 69 Sơ đồ 4.11: Thành phần quản lý sương mù 4.4.8 Picking: Nắm bắt đối tuợng không gian kỹ thuật dùng thường xuyên quan trọng Chúng ta xây dựng interface lớp thực thi giao diện để thực hóa cách nắm bắt đối tượng không gian GVHD: TS Ngô Thanh Hùng SVTH: Nguyễn Lâm Tú Nghiên cứu xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0 Trang 70 Sơ đồ 4.12: Thành phần Picking 4.4.9 EventHandler: Trên thiết bị smartphone việc tương tác thường thơng qua hình cảm ứng Các thao tác Touch, LongTouch Drag thao tác người dùng Người dùng tương tác với thiết bị thơng qua ngón tay Một lớp Mouse đảm nhiệm việc tương tác với người dùng GVHD: TS Ngô Thanh Hùng SVTH: Nguyễn Lâm Tú Nghiên cứu xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0 Trang 71 Sơ đồ 4.13: Thành phần nắm bắt kiện chuột 4.4.10 3DMath: Hiện ngồi hàm tốn học Transformation Shapes, thư viện chứa đựng số hàm tốn học bản: Hình 4.2: Thành phần 3DMath 4.4.11 CSprite: Đây lớp trợ giúp cho việc phát triển Animation việc xuất đoạng text thông qua texture Nó bao gồm thuộc tính hai hành động để tạo di GVHD: TS Ngô Thanh Hùng SVTH: Nguyễn Lâm Tú Nghiên cứu xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0 Trang 72 chuyển cảnh: Next() Render() CSprite có mối liên hệ chặt chẽ thành phần với TextureImage phụ thuộc lớp UserDataImpl Sơ đồ 14: Thành phần Sprite 4.4.12 MSkyBox: Việc tạo dựng không gian cho chương trình ứng dụng mang lại linh động đẹp mắt SkyBox giúp tạo dựng không gian cho hoạt cảnh dựa vào kỹ thuật CubeMap OpenGL ES 2.0 GVHD: TS Ngô Thanh Hùng SVTH: Nguyễn Lâm Tú Nghiên cứu xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0 Trang 73 Sơ đồ 4.15: Thành phần SkyBox 4.4.13 MVBOManager: Trong lập trình thiết bị cầm tay với cấu hình khơng cao PC việc trọng đến khả thực thi tài nguyên việc quan trọng Lớp VBOManager giúp người lập trình tạo dựng Vertex Buffer Object để lưu đối tượng đồ họa nhớ dùng lại nhiều lần Như không thêm công sức xây dựng lại frame thứ hai hay công khai báo lại nhớ Khi dùng kỹ thuật này, tài nguyên khả thực thi tối ứu hóa VBOManager chứa hai phương thức để tạo ARRAY_BUFFER dạng dùng cho vertex ELEMENT_ARRAY_BUFFER dạng dành cho mục GVHD: TS Ngô Thanh Hùng SVTH: Nguyễn Lâm Tú Nghiên cứu xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0 Trang 74 Sơ đồ 4.16: Thành phần Vertex Buffer Object 4.4.14 Sử dụng thư viện demo: Đã xây dựng thư viện đáp ứng mục tiêu đặt Thư viện bao gồm file lib có dung lượng 473KB thư mục ESOOAPI/ chứa file header thư viện Phiên hỗ trợ cho WinCE flatform, ta link thư viện sử dụng mã nhị phân cách: - thêm vào Visual Studio hình GVHD: TS Ngơ Thanh Hùng SVTH: Nguyễn Lâm Tú Nghiên cứu xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0 Trang 75 Hình 4.3: Thêm thư viện vào Visual Studio - Chép thư viện lib thư mục ESOOAPI vào thư mục chứa mã nguồn project Cài đặt AMD Emulator for OpenGL ES 2.0 Tải địa chỉ: http://www.openglesbook.com/ESEmulator.2009-04-28-v1.4.APRIL_2009_RELEASE.msi GVHD: TS Ngô Thanh Hùng SVTH: Nguyễn Lâm Tú Nghiên cứu xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0 Trang 76 Ngoài ra, để kiểm chứng chức hỗ trợ thư viện, luận văn có đưa số chương trình thử nghiệm sau: Dragon fly Hình 4.3: Demo dragon fly Trong chương trình minh học này, sử dụng dến lớp CSpriteimpl: m_sprite = new CSpriteImpl(54.0, 72.0, 10, 80, 0, "dragon.tga"); … m_sprite->Next(); … m_sprite->Render(m_userData->m_verticesHandler, m_userData->m_texcoordHandler, m_userData->m_indicesHandler); GVHD: TS Ngô Thanh Hùng SVTH: Nguyễn Lâm Tú Nghiên cứu xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0 Trang 77 Lake Hình 4.5: Demo Lake Chương trình sử dụng lớp MSkyBoxImpl thư viện // SkyBox m_skyBox = new MSkyBoxImpl(); m_skyBox->LoadTextureFromFiles("left.tga", "right.tga", "bottom.tga", "top.tga", "back.tga", "front.tga"); m_skyBox->GenSkyBox(300.0); // draw sky box m_skyBox->DrawSkyBox(m_userData->m_verticesHandler); GVHD: TS Ngô Thanh Hùng SVTH: Nguyễn Lâm Tú Nghiên cứu xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0 Trang 78 CoverFlow Hình 4.6:Demo CoverFlow Chương trình sử dụng hàm transformation để biến đổi ma trận CTransform::esTranslate(&perspective, delta, 0, 0); CTransform::esMatrixMultiply( &mvpMatrix, &modelview, &perspective ); GVHD: TS Ngô Thanh Hùng SVTH: Nguyễn Lâm Tú Nghiên cứu xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0 Trang 79 Chƣơng 5: Kết luận 5.1 Kết quả: Luận văn xây dựng thành công thư viện hỗ trợ việc lập trình đồ họa OpenGL ES 2.0 Thư viện thỏa mãn yêu cầu mong muốn ban đầu đưa Luận văn nêu xu quan trọng lập trình đồ họa thiết bị cầm tay, mà công nghệ chủ lực OpenGL ES Phiên 2.0 dụng nhiều thiết bị phần cứng có hỗ trợ IPhone, điện thoại Android Và thực tạo hiệu cao Việc tìm hiều khái niệm lập trình đồ họa ba chiều nêu khái qt đọng Đây kiến thức làm tảng cho việc xây dựng thư viện Nó bao gồm khái niệm tốn học, phép chuyển đổi hình học không gian tọa độ khác Tiếp đến việc tiếp cận khái niệm kiến thức OpenGL 2.0 Shading Language Đây nội dung quan trọng phiên 2.0 Tuy nhiên thư viện có số điểm tồn như: - Do đặc điểm thiết kế lập trình, tạo lập thư viện dạng file lib chưa tạo dạng liên kết động - Do rời rạc chức hỗ trợ mà thư viện chưa đạt kiến trúc chặt chẽ liên kết - Các chức thư viện hỗ trợ ban đầu, chưa sâu toàn diện - Chưa kiểm nghiệm mơi trương lập trình khác ngồi Win32 (WinCE), ứng dụng chạy AMD Emulator for OpenGL ES 2.0 5.2 Hướng phát triển: Hướng phát triển thư viện tương lai xây dựng thư viện toàn diện chặt chẽ GVHD: TS Ngô Thanh Hùng SVTH: Nguyễn Lâm Tú Nghiên cứu xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0 Trang 80 Sơ đồ 5.1: Hướng đến chức mở rộng Trong gói Model Scene giúp người lập trình tạo dựng đối tượng đồ họa phức tạp cách dễ dàng cách đọc sử dụng file sẵn có chương trình có chức tạo dựng model Như chương trình trở nên linh hoạc dễ dàng Gói Effects chứa effect tạo dựng sẵn người lập trình việc triệu gọi để áp dụng vào chương trình Ngoài việc tạo lập thư viện từ lớp trừu tượng hóa ban đầu để chạy thiết bị khác mục tiêu hứa hẹn có nhiều ý nghĩa thực tế GVHD: TS Ngô Thanh Hùng SVTH: Nguyễn Lâm Tú Nghiên cứu xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0 Trang 81 TÀI LIỆU THAM KHẢO [1] Introduction to 3D Game Programming with DirectX 9.0 Frank D Luna Technical review by Rod Lopez [2] The OpenGL® Shading Language Specification John Kessenich, Dave Baldwin, Randi Rost [3] OpenGL ES 2.0 programming guide Aaftab Munshi; Dan Ginsburg; Dave Shreiner [4] 3D Game Engine Design for Mobile Phones with OpenGL ES 2.0 Mikael Gustavsson [5] http://nehe.gamedev.net [6] http://iphonedevelopment.blogspot.com [7] http://iphone-3d-programming.labs.oreilly.com/ [8] http://www.lighthouse3d.com/tutorials/glsl-tutorial [9]http://www.songho.ca [10]http://developer.nvidia.com/object/opengl-nvidia-extensions-gdc-2006.html [11] http://http.developer.nvidia.com/GPUGems3/gpugems3_ch05.html [12] http://store.steampowered.com/hwsurvey/ GVHD: TS Ngô Thanh Hùng SVTH: Nguyễn Lâm Tú Nghiên cứu xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2.0 Trang 82 PHỤ LỤC ESOOAPI Library documentation GVHD: TS Ngô Thanh Hùng SVTH: Nguyễn Lâm Tú ... chương trình đồ họa Bảng 1.1: Chức thư viện GVHD: TS Ngô Thanh Hùng SVTH: Nguyễn Lâm Tú Nghiên cứu 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. .. cứu xây dựng thư viện hỗ trợ lập trình đồ họa OpenGL ES 2. 0 Xây dựng fixed function riêng Trang Vấn đề: OpenGL ES 2. 0 không hỗ trợ fixed function, ta cần tự xây dựng hàm riêng Xây dựng thao tác... phiên 2. 0 Đặc biệt chương sâu nghiên cứu ngôn ngữ OpenGL ES Shading Language, nét đặc trưng khác hẳn OpenGL ES 2. 0 Chương 4: Thiết kế, cài đặt thư viện hỗ trợ lập trình đồ họa OpenGL ES 2. 0 Chương

Ngày đăng: 23/12/2018, 06:12

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan