1. Trang chủ
  2. » Luận Văn - Báo Cáo

Phương pháp chuyển đổi cấu trúc đồ họa webgl

51 653 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

Thông tin cơ bản

Định dạng
Số trang 51
Dung lượng 3,54 MB

Nội dung

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Tiến Trung PHƯƠNG PHÁP CHUYỂN ĐỔI CẤU TRÚC ĐỒ HỌA WEBGL KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công nghệ thông tin HÀ NỘI - 2014 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Tiến Trung PHƯƠNG PHÁP CHUYỂN ĐỔI CẤU TRÚC ĐỒ HỌA WEBGL KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công nghệ thông tin Cán bộ hướng dẫn: PGS.TS Nguyễn Việt Hà Cán bộ đồng hướng dẫn: ThS. Vũ Quang Dũng HÀ NỘI - 2014 VIETNAM NATIONAL UNIVERSITY, HANOI UNIVERSITY OF ENGINEERING AND TECHNOLOGY Nguyen Tien Trung WEBGL STRUCTURE CONVERSION Major: Information Technology Supervisor: Assoc. Prof. Dr Nguyen Viet Ha Co-Supervisor: MSc. Vu Quang Dung HA NOI - 2014 TÓM TẮT Tóm tắt: Ngày nay, nhu cầu sử dụng đồ họa 3D trên nền web của các doanh nghiệp trong việc hiển thị trực quan hóa dữ liệu ngày càng tăng. Cùng với đó, công nghệ đồ họa 3D cũng ngày một phát triển điển hình là công nghệ WebGL cho phép trình duyệt web có thể tận dụng được các thiết bị phần cứng xử lý đồ họa 3D mà không cần cài đặt thêm phần mềm nào của bên thứ 3. Tuy nhiên, trong môi trường doanh nghiệp tồn tại những hệ thống cũ không phải lúc nào cũng có thể cập nhật và hỗ trợ những kỹ thuật đồ họa tiên tiến như WebGL, đồng thời việc sử dụng WebGL cũng đòi hỏi thiết bị phần cứng đủ mạnh trong việc xử lý đồ họa, điều này có thể gây quá tải đối với những hệ thống cũ có cấu hình tương đối lạc hậu. Vì vậy một nhu cầu đặt ra là chuyển đổi việc điều khiển, xử lý và hiển thị đồ họa trên hệ thống hiện đại sang hệ thống cũ. Trong khóa luận này, tôi đề xuất việc chuyển đổi cấu trúc đồ họa WebGL sang một cấu trúc đồ họa khác mà các hệ thống cũ có thể đáp ứng. Cụ thể, tôi thực hiện việc chuyển đổi WebGL sang sử dụng công nghệ Flash kết hợp với phương pháp phân lớp dữ liệu. Mục tiêu là có thể dùng Flash để có thể xây dựng đồ họa 3D tương ứng như đồ họa 3D trên WebGL và áp dụng triển khai được trên các hệ thống lạc hậu. Từ khóa: chuyển đổi, đồ họa 3D, phân lớp dữ liệu, flash. 4 ABSTRACT Absctract: Nowadays, the demand for web-based 3D graphics of businesses in the data visualization is increasing. Along with that, the 3D graphics technology is developing and WebGL technique allows web browsers can take advantages of the 3D graphics hardware without the need to install additional third-party softwares public. However, the enterprise environment exists the previous systems that is not always able to updates and supports modern graphics technologies such as WebGL. Using WebGL also requires enough strong hardware in the graphics processor, this can cause overloading the old system. Thus need a solution to convert, process and display 3D graphics from modern system to old system. In this thesis, I propose a method which can convert the WebGL structure to other structure that can be supported in previous system. This propose method using Flash technology that has long been supported across browsers with data layers method. The goal is to be able to use Flash to build 3D graphics respectively as on WebGL 3D graphics and be applied on previous system. Keywords: convert, graphic 3D, data layers, flash. 5 Lời cảm ơn Lời đầu tiên, tôi xin bày tỏ lòng biết ơn sâu sắc nhất tới PGS.TS. Nguyễn Việt Hà và ThS.Vũ Quang Dũng đã tận tình hướng dẫn, giúp đỡ tôi trong suốt quá trình thực hiện khóa luận tốt nghiệp này. Tôi xin chân thành cảm ơn các thầy, cô đã tạo điều kiện thuân lời cho tôi trong quá trình học tập, rèn luyện và nghiên cứu tại trường Đại học Công nghệ. Tôi cũng xin gửi lời cảm ơn tới các anh chị và các bạn sinh viên tại phòng thí nghiệm công nghệ phần mềm Toshiba-Coltech, đặc biệt là bạn Vũ Danh Việt, anh Nguyễn Hoàng Khanh đã giúp đỡ, hỗ trợ tôi trong quá trình xây dựng hệ thống và thực nghiệm. Tôi gửi lời cảm ơn tới các bạn trong lớp K55CC và K55CLC đã ủng hộ, khích lệ, giúp đỡ và luôn sát cánh bên tôi trong suốt quá trình học tập, rèn luyện tại trường. Và cuối cùng, tôi xin gửi lời cảm ơn tới gia đình, người thân và bạn bè – những người luôn ở bên tôi những lúc khó khăn nhất, luôn động viên tôi, khuyến khích tôi trong cuộc sống cũng như học tập, công việc. Tôi xin chân thành cảm ơn! Sinh viên Nguyễn Tiến Trung 6 Lời cam đoan Tôi xin cam đoan các kết quả đạt được trong khóa luận này do tôi thực hiện dưới sự hướng dẫn của PGS.TS. Nguyễn Việt Hà và ThS.Vũ Quang Dũng. Tất cả các tham khảo từ những nghiên cứu liên quan đều được nêu nguồn gốc một cách rõ ràng từ danh mục tài liệu tham khảo trong khóa luận. Khóa luận không sao chép tài liệu, công trình nghiên cứu của người khác mà không chỉ rõ về mặt tài liệu tham khảo. Các kết quả thực nghiệm của khóa luận đều được tiến hành thực nghiệm và thống kê từ kết quả thực tế. Sinh viên Nguyễn Tiến Trung 7 Mục lục Chương 4. 8 Danh sách hình vẽ Danh sách bảng 9 4 MỞ ĐẦU Ngày nay, công nghệ đồ họa đang có sự phát triển nhanh chóng và vượt bậc. Trong đó, đồ họa 3D là một điển hình. Đồ họa 3D giúp hiển thị thông tin một cách trực quan, có chiều sâu và chi tiết so với đồ họa 2D truyền thống. Đồ họa 3D được dùng nhiều trong các lĩnh vực như thiết kế, xây dựng, game… cho thấy được tầm quan trọng của nó. Hiện nay, có khá nhiều công nghệ xây dựng cũng như hỗ trợ đồ họa 3D trên trình duyệt như X3DOM, WebGL (three.js, scenejs…) [1] hay như cả HTML5 – một chuẩn ngôn ngữ mới. Cùng với đó là sự phát triển của Internet cũng như các trình duyệt web hỗ trợ các công nghệ đồ họa trên. WebGL là một công nghệ web mới cho phép trình duyệt Web tận dụng được các thiết bị phần cứng xử lý đồ hoạ 3D mà không cần cài đặt thêm phần mềm nào của bên thứ 3. Với việc WebGL đang ngày càng được hỗ trợ phổ biến trên các trình duyệt như Chrome, FireFox,... việc xử lý đồ hoạ 3D trên trình duyệt Web đang trở nên khả thi hơn. Tuy nhiên, trong môi trường ở một vài doanh nghiệp vẫn tồn tại những hệ thống cũ không phải lúc nào cũng có thể cập nhật và hỗ trợ những kỹ thuật đồ họa mới nhất mà WebGL là một trong số đó, đồng thời việc sử dụng WebGL cũng đòi hỏi thiết bị phần cứng đủ mạnh trong việc xử lý đồ họa, có thể gây quá tải đối với những hệ thống cũ có cấu hình tương đối lạc hậu. Trong khi đó nhu cầu công việc sử dụng các giao diện đồ họa ngày càng nhiều nên vấn đề cần đặt ra ở đây là cần có một kỹ thuật để có thể chuyển đổi điều khiển, hiển thị của hệ thống hiện đại sang những hệ thống cũ ở trên để có thể đáp ứng được với nhu cầu công việc. Do những đặc tính như vậy, với mong muốn sử dụng đồ họa 3D trên những hệ thống đã đề cập ở trên thì một yêu cầu được được đặt ra là tìm ra một phương chuyển đổi cấu trúc đồ họa WebGL sang cấu trúc đồ họa khác mà có thể được hỗ trợ bên phía Client. Nội dung đề tài: “Phương pháp chuyển đổi cấu trúc đồ họa WebGL” là nhằm hướng tới việc có thể tìm ra phương pháp chuyển đổi cấu trúc đồ họa WebGL và dựa trên phương pháp này xây dựng nên một chương trình thử nghiệm. Trong khóa luận này, tôi trình bày hai hướng tiếp cận khác nhau để giải quyết vấn đề là phương pháp xử lý mã WebGL trên Server thông qua chạy, bóc tách các frame và phương pháp chuyển đổi WebGL dùng Flash. Bên cạnh đó tôi cũng sử dụng kết hợp phương pháp phân lớp dữ liệu chia việc cung cấp, xử lý và hiển thị dữ liệu chia thành các tầng (layers) tách biệt với các chức năng 10 khác nhau. Sử dụng các tầng dưới làm thành phần nền cung cấp dữ liệu liên quan cho tầng phía trên. Các phần còn lại của Khóa luận gồm có cấu trúc như sau: Chương 2 – Cơ sở lý thuyết và công nghệ: Giới thiệu những công nghệ, cơ sở lý thuyết được áp dụng trong chương trình này. Chương 3 – Phương pháp chuyển đổi đồ họa WebGL: phát biểu bài toán, trình bày cụ thể phương pháp giải quyết theo hai hướng tiếp cận đã đề cập ở trên, đánh giá và lựa chọn giải pháp phù hợp; nêu lên mô hình phân lớp dữ liệu. Chương 4 – Thực nghiệm: Xây dựng chương trình dựa trên phương pháp đã chọn từ chương trước đó: giới thiệu chương trình thực nghiệm, mô tả kiến trúc, thành phần, phương pháp triển khai thực nghiệm. Cụ thể tại phần này, tôi sẽ dựa trên một chương trình sử dụng WebGL đã có là chương trình “Kỹ thuật hiển thị dữ liệu trên bản đồ” [2] để phát triển chương trình mô phỏng việc chuyển đổi. Đồng thời sử dụng dịch vụ cung cấp dữ liệu bản đồ của nhóm bạn Vũ Danh Việt [3] để thực hiện phân lớp dữ liệu. Chương 5 – Kết luận: Tóm lược những kết quả của Khóa luận, những gì đạt được và hạn chế triển vọng và hướng phát triển trong tương lai. 11 Chương 5. CƠ SỞ LÝ THUYẾT VÀ CÔNG NGHỆ 5.1. Công nghệ Web, Json HTML (HyperText Markup Language) là ngôn ngữ đánh dấu, có cấu trúc được thiết kế để tạo nên các trang web với các thông tin được trình bày trên World Wide Web. Javascript là ngôn ngữ kịch bản cho nền web, được gửi đến và thực hiện ngay trên trình duyệt khi trang web được tải. HTML là một ngôn ngữ có cấu trúc dùng kết hợp với Javascript và CSS (Cascading Style Sheets) có thể xây dựng nên nhũng trang web động có nội dung phong phú với hiệu ứng và giao diện người dùng tốt hơn. Ngoài ra, HTML còn cùng với Javascript có thể hỗ trợ các file cũng như chương trình Flash được lồng vào các thẻ cấu trúc của trang web. Json (Javascript Object Notation) [4] là một chuẩn định dạng dữ liệu phổ biến thường được dùng trong việc lưu trữ cũng như truyền dữ liệu trung gian giữa máy chủ và máy khách. JSON hiện nay đã được Flash Player hỗ trợ trong việc tương tác, xử lý dữ liệu theo cách đơn giản, không quá rườm rà. 5.2. NodeJS, chuẩn H264 NodeJS [5] là một nền tảng được xây dựng trên Chrome JavaScript runtime giúp tạo nên những ứng dụng mạng một cách nhanh chóng và có khả năng mở rộng dễ dàng, phù hợp với những hệ thống truyền tải dữ liệu thời gian thực như video. NodeJS có thể được dùng để xây dựng nên những chương trình có thể chạy Javascript ngay trên Server. Đồng thời NodeJS có nhiều module khác nhau hỗ trợ trong việc thực thi mã WebGL. Chuẩn H264 [6] là một chuẩn mã hóa/giải mã và định dạng video được sử dụng rộng rãi để ghi, nén, chia sẻ video. H264 có thể được sử dụng thông qua các module mà NodeJS cung cấp. 5.3. Công nghệ Adobe Flash Player, ngôn ngữ Actionscript 3.0 Adobe Flash Player [7] là phần mềm miễn phí của Adobe, hỗ trợ đa nền tảng từ PC cho đến mobile cho phép tương tác với nội dung và các ứng dụng trên nền web chủ yếu là các nội dung đa phương tiện như ảnh, video, game. Flash Player tương thích và chạy các file flash định dạng SWF hay FLV. Flash Player được chạy như một phần mềm cài độc lập hay gần đây được tích hợp sẵn dưới dạng plug-in trong các trình duyệt web phổ biến 12 như Chrome, Firefox, Opera, Internet Explorer, Safari. Kể từ phiên bản Flash Player 11 đã cung cấp Stage 3D là một giao diện lập trình ứng dụng (Application Programming Interface – API) có chức năng tối ưu hóa cho phần cứng trong hệ thống của người dùng, tận dụng năng lực tính toán của vi xử lý đồ họa (Graphic Processing Unit – GPU) để tối ưu hóa nội dung được trình diễn, áp dụng cho cả đồ họa 2D lẫn 3D. Điều này sẽ giúp đẩy mạnh hiệu suất trình diễn và mang lại hình ảnh chi tiết hơn cho cả nội dung 2D lẫn 3D. ActionScript 3.0 [8] [9] là một ngôn ngữ lập trình hướng đối tượng mạnh mẽ dựa trên ECMAScript - ngôn ngữ lập trình tiêu chuẩn hóa quốc tế cho kịch bản, khá giống với Javascript. Actionscript 3 kế thừa các phiên bản trước đó về sức mạnh và sự linh hoạt, tiếp tục cải thiện hiệu suất, giúp dễ dàng phát triển ứng dụng phức tạp với tập hợp dữ liệu lớn theo hướng đối tượng và tận dụng việc tái sử dụng mã. Actionscript 3 được thực hiện bởi ActionScript Virtual Machine (AVM) trong Flash Player và với Actionscript 3, các nhà phát triển có thể đạt được năng suất và hiệu suất tuyệt vời với nội dung và các ứng dụng trên Flash Player. Actionscript 3 hướng tới mục tiêu an toàn, đơn giản, hiệu suất cao. Actionscript 3 bao gồm hai phần: phần ngôn ngữ cốt lõi và Flash Player API. Ngôn ngữ cốt lõi xác định các thành phần xây dựng cơ bản của ngôn ngữ lập trình như cú pháp câu lệnh, biểu thức, điều kiện, vòng…. Flash Player API được tạo thành từ các lớp mà đại diện và cung cấp truy cập chức năng Flash Player cụ thể. 5.4. Adobe Flex SDK, thư viện đồ họa Away3D Flex SDK [10] [11] là bộ công cụ hỗ trợ lập trình miễn phí bao gồm Flex Framework (thành phần lớp thư viện) và trình biên dịch Flex cho phép xây dựng nên các ứng dụng trên nền web cũng như trên Desktop. Flex hiện gồm 2 thành phần chính là MXML (Macromedia XML) và ActionScript 3.0. Sử dụng Flex SDK khi biên dịch tạo ra file SWF chạy trên Flash Player mà ta hoàn toàn có thể nhúng trực tiếp vào trong HTML qua Javascript. Away3D [12] là một graphic engine 3D mã nguồn mở, được viết cho nền tảng Flash, sử dụng ngôn ngữ AS3, chạy trên các trình duyệt có sử dụng Flash Player. Away3D có thể kế hợp với Flex SDK để có thể tạo ra những ứng dụng web với đồ họa 3D. Away3D có thể được sử dụng để làm cho các mô hình 3D và thực hiện khác nhau tính toán 3D khác. Phiên bản mới nhất - Away3D 4 đã được nâng cấp để hỗ trợ mới nhất của Flash Player 11 với đầy đủ GPU tăng tốc đồ họa, giải phóng CPU cho các nhiệm vụ 13 tính toán khác. Từ đó đơn vị xử lý đồ họa có khả năng dựng hình nhiều hơn cho phép chi tiết và chất lượng hơn. Hình dưới đây minh họa cho việc vẽ biểu đồ 3D bằng Away3D. Hình 2.1 Ví dụ về đồ họa 3D xây dựng với Away3D 5.5. Open Street Map Open Street Map [13] là một dự án bản đồ mở, cho phép tất cả mọi người cùng đóng góp, tùy chỉnh, để xây dựng dữ liệu bản đồ thế giới chi tiết tới mọi vùng miền. Khác với Google Map, Open Street Map cung cấp trực tiếp dữ liệu bản đồ dưới nhiều định dạng, và cho phép người dùng sử dụng mà không đòi hỏi thông qua API hay ràng buộc hạn chế. Một trong số những định dạng bản đồ mà Open Street Map cung cấp là ảnh bản đồ tĩnh (Static Map Tile). Định dạng này phù hợp để vẽ đồ thị lên trên vì bản đồ khi đó là một phần của không gian đồ họa. 14 Hình 2.2 Bản đồ OpenStreetMap khu vực Hà Nội 5.6. OpenLayers, Geo Server OpenLayers [14] là một thư viện thuần Javascript hỗ trợ cho việc hiển thị dữ liệu bản đồ trên hầu hết các trình duyệt web mà không phụ thuộc vào phía server. OpenLayers cài đặt một tập các hàm API JavaScript hỗ trợ việc xây dựng các ứng dụng bản đồ trên nền web, cũng tương tự như các hàm API của Google Maps và MSN MSN Virtual Earth, nhưng với sự khác biệt quan trọng – OpenLayers là phần mềm mã nguồn mở, được phát triển bởi cộng đồng phần mềm mã nguồn mở. Có hai khái niệm quan trong cần được hiểu rõ khi làm việc với OpenLayers để hiện xây dựng bản đồ: - Map: Map là nơi để lưu giữ các thông tin về hệ quy chiếu, đơn vị… của bản đồ. - Layers: Bên trong bản đồ, dữ liệu được hiển thị thông qua Layer. Một Layer là một nguồn dữ liệu, nó cho biết OpenLayers nên yêu cầu và hiển thị dữ liệu như thế nào. Trong một Map có thể chứa một hoặc nhiều “Layer” chồng lên nhau. Dữ liệu được hiện thị trong một Layer có thể là dạng raster hoặc vector. OpenLayers cung cấp một tập các điều khiển (controls) cho lập trình viên có các thao tác linh hoạt trên bản đồ. Các điều khiển là các lớp trong OpenLayers, chúng cho 15 phép định nghĩa các trạng thái, hành vi của bản đồ. Hoặc hiển thị các thông tin bổ sung cho người dùng. Các điều khiển là giao diện chính cho phép tương tác với bản đồ. Geo Server [15] là một dự án mã nguồn mở, phát triển trên ngôn ngữ Java. Geoserver cho phép người dùng chia sẻ, sửa đổi các dữ liệu bản đồ. Geoserver cho phép lấy nguồn dữ liệu từ nhiều nguồn, và cho phép các ứng dụng khác truy cập thông qua giao thức HTTP. Geoserver hỗ trợ nhiều định dạng dữ liệu bản đồ chuẩn như: Open Geospatial Consortium (OGC) Web Feature Service (WFS) and Web Coverage Service (WCS), Web Map Service (WMS). 16 4 PHƯƠNG PHÁP CHUYỂN ĐỔI ĐỒ HỌA WEBGL Phương pháp chuyển đổi đồ họa ở đây là việc chuyển đổi mã WebGL sang một mã khác và việc chuyển mã là được thực hiện tại Server và việc xử lý cũng như hiển thị đồ họa là được thực thi tại phía Client. Hình 3.1 biểu diễn cái nhìn tổng quan của việc chuyển đổi cấu trúc mã WebGL. Hình 3.3 Tổng quan về việc chuyển đồi mã WebGL Cụ thể khi mã WebGL được sinh ra tại Server thì thông qua phương pháp chuyển đổi sẽ cho ra một cấu trúc mã khác ở đây tôi gọi tạm đó là mã kết quả mà khi được gửi đến cho Client không có hỗ trợ WebGL hoàn toàn có thể dễ dàng xử lý và hiển thị đồ họa trên đó. Trong quá trình tìm hiểu tôi tập trung vào hai phương pháp sau: - Xử lý mã WebGL trên Server thông qua chạy và bóc tách các frame, chuyển các frame này sang mã định dạng H264 và gửi về cho Client hiển thị. - Chuyển đổi sử dụng mã WebGL sang sử dụng Flash (Actionscript 3.0). Thay vì sử dụng mã WebGL để xây dựng đồ họa và gửi về cho Client thực thi thì ta sẽ sử dụng Flash để viết nên chương trình đồ họa mới dựa trên thành phần cấu trúc của chương trình WebGL và gửi về cho Client mã Actionscript (Flash) để hiển thị. 5.7. Xử lý mã WebGL trên Server 4.1.1. Mô hình hóa phương pháp Thông thường các mã WebGL được gửi từ Server tới Client và được thực thi tại đây. Do đó việc đầu tiên trong toàn bộ bài toán là thực hiện các mã WebGL ngay trên server nhằm tạo ra các frame rồi từ đó có thể tiến hành trích xuất các frame dưới dạng ảnh bitmap. Với dạng ảnh bitmap ta có thể chuyển đổi chúng sang định dạng mã H264 [6] – 17 một định dạng phổ biến đồng thời thêm vào các mã điều khiển đối với các frame. Cuối cùng tiến hành gửi tới Client thông qua quá trình Streaming. Như vậy đầu vào và đầu ra của bài toán được tóm tắt như sau (hình 3.1). - Đầu vào (Input): Là các mã WebGL. - Đầu ra (Output): Định dạng mã H264. Hình 3.4 Mô hình tổng quát của phương pháp xủ lý mã WebGl trên Server Trong đó: Chạy mã WebGL trên Server WebGL là ngôn ngữ đồ họa 3D dựa trên nền OpenGL ES 2.0 viết trên Javascript. Trong đó WebGL API là tập các hàm Javascript được cung cấp và hỗ trợ bởi trình duyệt web. Các hàm mà WebGL cung cấp các thành phần là các đối tượng đồ họa cùng với màu sắc, toạ độ vị trí cùng với các góc nhìn của camera... Thông qua đó thiết lập được dữ liệu về cấu trúc đồ họa thành các frame và gửi xuống dưới nền dưới OpenGL ES viết bằng ngôn ngữ C trực tiếp làm việc với các phần cứng nhằm xử lý và trả về cho trình duyệt dưới dạng các hình ảnh đồ họa. Thông thường, các mã WebGL được sinh tại và được gửi tới Client để xử lý trên trình duyệt chứ không được xử lý trực tiếp tại Server, và chính tại đó mã WebGL trong quá trình được xử lý thì mới tạo ra được các hình ảnh đồ họa dưới dạng các frame. Do đó với sự phức tạp về cấu trúc của mã WebGL (gồm nhiều thành phần dữ liệu cần xử lý) cần tới hệ thống phần cứng tốt với năng lực xử lý tính toán tốt. Cùng với đó, như đã nói ở phần trên ở các hệ thống cũ thì việc cung cấp các điều kiện trên là không thể, nhất là trên những trình duyệt cũ không hỗ trợ WebGL cũng như HTML5. Tất cả những điều này khiến cho việc xử lý đồ họa bên phía Client trog hệ thống 18 là quá tải. Như vậy ở đây tôi sẽ thực hiện việc xử lý WebGL trên server nhằm tận dụng năng lực xử lý của server và giúp giảm tải việc xử lý cho phía Client. Để làm được điều này thì ta cũng cần một cơ chế xử lý mã WebGL tương tự như với trình duyệt nhằm sinh ra các frame trong quá trình xử lý, render. Bóc tách các frame Bình thường khi mã WebGL được xử lý bên trình duyệt của client sẽ sinh ra các frame tại framebuffer. Framebuffer sẽ chứa tât cả các dữ liệu về các đỉnh, vị trí, màu sắc, ánh sáng cũng như góc nhìn camera của frame và sẽ được gửi xuống cho phần cứng xử lý và hiển thị thông qua thành phần DOM của trang web. Ta hoàn toàn có thể bóc tách được các frame từ trình duyệt thông qua thành phần DOM của trang web trên gián tiếp thông qua việc tách nội dung thông qua thành phần DOM của trang web. Qua đó ta hoàn toàn có thể tách được các frame mỗi khi render một frame. Khi các mã WebGL chạy trên Server và sinh ra các frame thì việc tiếp theo cần làm là bắt được các frame đó. Ở đây tôi hướng tới việc tạo một cấu trúc DOM và cho phép mã WebGl có thể được thực thi trong đó. Do một frame có thể được coi là các hình ảnh tĩnh tại một thời điểm xác định nên ta có thể bắt frame thông qua việc capture ảnh. Và để làm được thì ta cần phải truy cập được vào phần tử DOM chứa hình ảnh đó rồi ghi lại dữ liệu thông tin chứa trong đó thành ảnh. Mã điều khiển Với mỗi các frame được tách ra thì sau đó hoàn toàn có thể sau đó là các thao tác điều khiển đồ họa được thực hiện ở phía Client. Vì vậy cần thêm các mã điều khiển vào cùng với các frame để khi chuyển về cho Client thì khi bên client có hành động điều khiển nào thì chương trình sẽ biết frame nào phù hợp để hiển thị ngay sau đó. Chuyển đổi các frame thành định dạng khác Với việc thu được các frame trong bước trên ta có thể chuyển đổi sang một định dạng khác mà có thể dễ dàng xử lý ở phía Client, ngay cả trên những trình duyệt cũ mà H264 là một sự lựa chọn. Việc chuyển sang mã H264 cũng như là chuyển các frame thu được sang dạng video với việc sắp xếp các frame theo thứ tự sinh ra. Streaming 19 Kết quả chuyển đổi sang mã H264 sẽ được gửi tới Client thông qua quá trình streaming video. Đối với bên Client sử dụng các trình duyệt web cũ ta vẫn có thể nhận được video được streaming tới và chạy trên flash để có thể xem được video. 5.7.1. Kỹ thuật áp dụng vào mô hình Giải pháp mà tôi đã tìm hiểu là Nodejs [5] và các module lên quan được cung cấp. Dưới đây là cách giải quyết bài toán. Chạy mã WebGL trên Server Mã WebGL được viết trên Javascript nên ở đây tôi chọn một nền tảng có thể chạy được các chương trình viết trên Javascript là NodeJS. Cụ thể Node JS có module three, jsdom kết hợp với nhau tạo nên môi trường có thể chạy các mã WebGL. + Module three chứa các thư viện 3D của three.js – một dạng mã WebGl được dùng để tạo nên đồ họa 3D. Lúc này mã WebGL ở trên Server sẽ có thể chạy được nhờ sử dụng các thư viện đồ họa của module three. Tại đây ta có thể sử dụng đối tượng CanvasWebGL để tiến hành thực hiện việc render tạo nên các frame có chứa đầy đủ dữ liệu về tọa độ, màu sắc, camera của đồ họa. + Module jsdom được dùng để định nghĩa các phần tử W3CDOM trong các trang web thông thường. Jsdom sẽ tạo cho ta một phép ta định nghĩa cấu trúc, các phần tử DOM canvas như của một trang web. Đồng thời cùng với thư viện three các mã WebGL sẽ được tổ chức chạy trong thành phần canvas này. Điều này sẽ giúp ta có thể truy cập vào phần tử ta muốn và có thể làm tiền đề cho việc bóc tách frame dưới đây. Bóc tách các frame Với Node JS, có cung cấp module canvas gồm các canvasAPI đồ họa với phần dưới là Cairo thư viện đồ họa 2D hỗ trợ nhiều thiết bị đầu ra khác nhau trong đó có đầu ra là ảnh bitmap. Bên cạnh đó Jsdom cũng hỗ trợ canvas để có thể mở rộng các thẻ với canvasAPI. Việc tách frame hoạt động theo mô tả cụ thể như sau: + Module Jsdom ở trên cho phép ta tạo nên cấu trúc DOM mà với phần tử canvas như của một trang web. + Đối tượng CanvasWebGL sẽ thi hành mã WebGL và render ra frame ở trong phần tử canvas đã tạo ở trên. 20 + Module canvas sẽ gọi tới thành phần canvas thông qua phương thức DomElement và tại đây sẽ sử dụng createpngStream và createWriteStream để ghi nội dung trong phần tử canvas tức là frame ra file ảnh. Chuyển đổi các frame thành định dạng khác và Streaming. + Chuyển đổi định dạng: Hiện tại có rất nhiều các công cụ hỗ trợ chuyển đổi ảnh bitmap sang mã H264 một trong số đó là FFMPEG. Cùng đó Node JS có cung cấp module fluent-ffmpeg chứa API của FFMPEG có thể chuyển đổi (convert) và streaming video lẫn audio. fluent-ffmpeg cung cấp cho đối tượng ffmpeg cho phép ta có thể chuyển đổi định dạng ảnh sang dạng video với việc mã hóa trên mã H264 cùng với nhiều tùy chọn về FPS hay độ phân giải. + Streaming: Trong NodeJs có một framework khá mạnh trong việc phát triển web là Express. Express cho phép ta tạo nên được server với hai đối tượng req(request) và res(respone) cùng với fluent-ffmpeg ta sẽ tạo được dòng stream thông qua phương thức writeToStream() và gán nó cho đối tượng response. Bên phía Client đối với những trình duyệt cũcó thể thực hiện giải mã mã H264 thông qua một trình plugin như Flash Player. 2.1.1. Đánh giá phương pháp Kết quả đã trích xuất được các Frame tại Server, chuyển đổi định dạng H264 và Stream về cho Client. Tuy nhiên, trong quá trình bóc tách frame rồi chuyển đổi sang mã H264 thì vẫn cần phải có bước trung gian là xuất ra file ảnh bitmap rồi từ đó mới có thể sử dụng module chuyển đổi. Cùng đó, việc chuyển đổi vẫn phải xuất ra file video rồi mới từ đó tiến hành streaming. Những điều này khiến việc xử lý tách frame chậm và gây tốn dung lượng của server do phải lưu trữ frame dưới dạng các file ảnh cũng như các file video. Quá trình tách frame và chuyển đổi chưa thể thực hiện song song một cách liên tục. Một việc khác nữa là mới chỉ áp dụng được cho các chương trình WebGL đơn giản, chưa có các tương tác điều khiển và chưa có sử dụng các dữ liệu liên quan khác như cơ sở dữ liệu nên bị hạn chế nhiều trong tính động của chương trình. Đồng thời việc thêm các mã điều khiển tương tác cũng là vấn đề mà tôi chưa thể tìm ra giải pháp thích hợp. Vì những lý do trên và khó khăn trong việc thực hiện mà tôi quyết định chuyển sang tìm hiểu hướng tiếp cận thứ hai để có thể hoàn thành bài khóa luận này của tôi. 21 5.8. Phương pháp chuyển đổi dùng Flash Phương pháp này sử dụng Flash và dùng ngôn ngữ Actionscript. Flash có hỗ trợ nhiều các thư viện đồ họa trong đó Away3D [12] là một thư viện đồ họa 3D tương tự như với ThreeJS [16] (WebGL). 4.1.1. Mô hình hóa phương pháp Hình 3.5 Mô hình chuyển đổi dùng Flash Ở đây, sử dụng cấu trúc đồ họa trên nền Flash – là công nghệ đã được áp dụng từ lâu trên các trình duyệt, hoàn toàn có khả năng chạy được trên các hệ thống cũ. Để xác định rõ phương pháp chuyển đổi đồ họa WebGL ta cần hiểu rõ các bước hoạt động của hệ thống mới (sử dụng WebGL) rồi từ đó xác định các bước sử dụng Flash thay thế WebGL và chạy chúng trên hệ thống cũ. Để làm được điều đó yêu cầu đặt ra là ta cần phân tích hệ thống ban đầu. Vì vậy có thể coi bài toán tìm phương pháp chuyển đổi đồ họa WebGL ở đây là bài toán phân tích hệ thống và áp dụng các kỹ thuật Flash tương ứng để thay thế WebGL. Phương pháp chuyển đổi WebGL sẽ có những bước sau và các bước này sẽ được trình bày ngay sau đây: - Bước 1: Phân tích hệ thống sử dụng WebGL theo các thành phần thiết kế và phương pháp thực hiện của hệ thống. Bước 2: Với mỗi thành phần đã phân tích tại bước trên xác định việc sử dụng lại hay sử dụng các thành phần tương đương mà Flash có thể cung cấp. Bước 3: Tiến hành chuyển đổi theo những thành phần đã xác định ở bước 2. 22 5.8.1. Phân tích hệ thống sử dụng WebGL Việc phân tích hệ thống có thể áp dụng có thể áp dụng đối với nhiều loại chương trình WebGL với các loại dữ liệu khác nhau. Trong khóa luận này tôi sẽ tiến hành phân tích hệ thống “Kỹ thuật hiển thị dữ liệu trên bản đồ” [2] và xác định cách thức thực hiện sử dụng Flash áp dụng trên hệ thống trên với loại dữ liệu cụ thể là dữ liệu thống kê việc sử dụng Internet và dữ liệu bản đồ. Trong phần này tôi sẽ sử dụng tài liệu chương trình WebGL [2] đã có để phân tích. Hình 3.6 Mô hình hệ thống sử dụng WebGL Hệ thống mới là bài toán hiển thị dữ liệu với các yêu cầu đầu vào và đầu ra: Đầu vào: - Dữ liệu biểu đồ: là dữ liệu thống kê thông thường nhưng có thêm thông tin xác định khu vực địa lý tương ứng với số liệu đó. Bản đồ : dữ liệu cập nhật của khu vực cần hiển thị. Đầu ra: - Hiển thị biểu đồ thống kê theo từng khu vực địa lý. Cho phép thay đổi mức chi tiết khu vực (cấp quận, cấp đường). 23 - Hiển thị dữ liệu đa dạng: các cột biểu thị các hạng mục khác nhau, dữ liệu theo chiều thời gian. Biểu diễn bản đồ khớp với đồ thị, cho phép các tương tác phóng to,thu nhỏ, tăng, giảm độ phóng dại của bản đồ, cho phép người dùng với các khung nhìn, các thao tác di chuyển xung quanh và xem đồ thị tại các hướng khác nhau. Hệ thống với mô hình Server – Client trong đó: - Server nhận yêu cầu từ Client và truy vấn tới cơ sở dữ liệu để trả về các kết quả thống kê. Client sau khi kết nối gửi yêu cầu tới server để lấy dữ liệu. Dữ liệu ở đây gồm mã WebGL và dữ liệu thống kê dưới dạng file JSON. Client đọc file JSON lấy ra các dữ liệu cần thiết và dùng mã WebGL để hiển thị biểu đồ và bản đồ cho người dùng. Hệ thống mới với các phương pháp giải quyết vấn đề: vẽ bản đồ, xác định vị trí trên bản đồ và phương pháp vẽ đồ thị. Vẽ bản đồ Dữ liệu được lấy từ OpenStreetMap dưới dạng ảnh bản đồ tĩnh (Static- map tile) với định dạng .png, kích thước 256x256px. Với các ô ảnh nhỏ này ta có thể xếp chúng cạnh nhau để tạo thành một bản đồ có kích thước lớn. Hình 3.7 Ảnh bản đồ lấy từ OpenStreetMap Mỗi ảnh bản đồ được lấy thông qua đường dẫn (URL) được quy định như sau: http://[abc].tile.openstreetmap.org/zoom/x/y.png + [abc]: subdomain (a.tile, b.tile, c.tile) + zoom: mức zoom (0-18) + x, y: tạo độ của ảnh trong mảng. Cụ thể: 24 Ở mức zoom=0, toàn bộ bản đồ trái đất chỉ gồm 1 ô ảnh. Hình 3.8 Ảnh bản đồ mức zoom=0 Ở mức zoom=1, mỗi chiều ô ảnh được chia làm 2, cho 4 ô ảnh bản đồ. Với x,y là toạ độ ô ảnh, có 4 ô xác định bởi bộ 3 số zoom,x,y : [1,0,0] , [1,1,0] , [1,0,1] , [1,1,1]. Tương tự với các mức zoom tiếp theo. Hình 3.9 Ảnh bản đồ ở mức zoom=1 Theo như tài liệu wiki của OpenStreetMap[link] thì ta hoàn toàn có thể tìm URL các ảnh bản đồ với kinh độ, vĩ độ cho trước. WebGL mà cụ thể là ThreeJS cho phép ta có thể tạo nên vật thể là mặt phẳng 3D thông qua đối tượng PlaneGeometry với các tham số về kích thước của mặt phẳng. PlaneGeometry(width, height, widthSegments, heightSegments) Để có thể hiển thị ảnh bản đồ lên trên bề mặt mặt phẳng ta cần phủ ảnh lên trên đó. Việc này được thực hiện qua việc phủ vật chất (material) là các ảnh bản đồ được tải theo URL xác định lên trên đó. Như vậy để có thể hiển thị bản đồ lớn ta cần ghép các mặt phẳng nhỏ mà được phủ ảnh bản đồ lại với nhau. Xác định URL: xác định trước một vị trí trung tâm tại Hà Nội, lấy tọa độ kinh độ, vĩ độ rồi thêm mức zoom phù hợp thì ta hoàn toàn có thể xác định được ảnh bản đồ nhỏ của điểm trung tâm và các ảnh bản đồ lân cận. Xác định vị trí trên bản đồ Xác định kinh độ và vĩ độ của các quận, đường phố thông qua Google Geocoding API. Từ URL của ảnh bản đồ với các thông số zoom, x, y có thể xác định được kinh độ và vĩ độ của điểm trung tâm ảnh bản đồ. 25 Công thức tính kinh độ, vĩ độ từ ‘zoom’, ‘x’, và ‘y’: (3.3) (3.4) Trong đó: - zoom: mức zoom yêu cầu. - londeg: là kinh độ của điểm chính giữa ô ảnh bản đồ tính theo đơn vị độ. - latrad: là vĩ độ của điểm chính giữa ô ảnh bản đồ tính theo đơn vị radian. Hình 3.10 Xác định vị trí trên bản đồ Từ đó, dựa vào công thức tỷ lệ ta hoàn toàn tính được tạo độ của điểm cần vẽ trên ảnh bản đồ: - Point: tọa độ điểm cần xác định - NE: tọa độ điểm góc Đông Bắc - Center: tạo độ điểm giữa bản đồ Vẽ đồ thị 26 Tùy thuộc người dùng muốn xem thông tin gì mà truy vấn cơ sở dữ liệu tương ứng dưới dạng Json. Dữ liệu trả về gồm tọa độ kinh độ, vĩ độ của điểm cần vẽ, tên của cột cần vẽ và giá trị thống kê của cột đó. Có được kinh độ, vĩ độ của điểm cần vẽ ta hoàn toàn có thể vẽ cột biểu đồ tại đúng vị trí trên bản đồ qua các công thức tính với độ cao tỷ lệ với giá trị thống kê nhận được. ThreeJS cung cấp đối tượng CubeGeometry với các tham số cơ bản về kích thước dài, rộng, chiều cao. CubeGeometry(width, height, depth) Tương tự như đối với đối tượng mặt phẳng ta hoàn toàn có thể phủ vật chất (material) lên các cột biểu đồ cũng như tô màu lên chúng. Hình 3.11 Mô phỏng đối tượng CubeGeometry trong ThreeJS Các thành phần đồ họa và tương tác với đồ thị, bản đồ - Thành phần đồ họa: Ngoài các đối tượng để vẽ bản đồ và cột biểu đồ như trên thì ThreeJS cung cấp cho ta các thành phần cơ bản khác như WebGLRenderer, PerspectiveCamera, Scene, DirectionalLight… Trong đó: - WebGLRenderer xuất ra các Frame và hiển thị lên trình duyệt từ các thành phần Scene và PerscpectiveCamera. PerspectiveCamera là đối tượng Camera cung cấp khung nhìn chiếu phối cảnh lên các thực thể 3D. 27 - Scene là nơi chứa các thực thể 3D được tạo ra. DirectionalLight cung cấp nguồn sáng chiếu từ một hướng cụ thể với các tia sáng song song làm tăng hiệu ứng hiển thị cho các thực thể 3D. Những thành phần đồ họa trên đều được cung cấp qua file thư viện three.js và chỉ cần khai báo trong thẻ để sử dụng. - Thành phần tương tác: ThreeJS cung cấp OrbitControl cho phép ta tương tác với biểu đồ và bản đồ thông qua việc điều chỉnh đối tượng Camera mà ta đã tạo ra ở trên. OrbitControl cho phép ta có các thao tác xoay, phóng to nhỏ, di chuyển với các khung nhìn tương ứng. OrbitControl được cung cấp qua file thư viện OrbitControls.js. var controls = new THREE.OrbitControls(camera); 5.8.2. Xác định các thành phần thay thế Về cơ bản ta cũng sẽ có các phương pháp vẽ bản đồ, xác định vị trí và vẽ biểu đồ tương ứng. Trong đó ta sẽ vận dụng cơ sở lý thuyết được dùng trong hệ thống mới nhưng với việc cài đặt thực thi sử dụng các thành phần đồ họa mà Flash và Away3D cung cấp. Tất cả những cài đặt chương trình sẽ được biên dịch thành một file Flash SWF và sẽ được nhúng trong thẻ div HTML và gửi cho Client. Nhìn chung các hàm cũng như các đối tượng của Away3D cũng tương đối giống so với các hàm trong ThreeJS. Điều này sẽ giúp ta dễ hiểu và đơn giản hóa hơn trong việc chuyển đổi. Vẽ và hiển thị bản đồ Hiện tại có hai hướng đi trong việc vẽ bản đồ là vẽ bản đồ tĩnh lấy ảnh bản đồ tĩnh trực tiếp từ OpenStreetMap như hệ thống sử dụng WebGL) đã làm và lấy dữ liệu bản đồ theo hình thức phân tầng dữ liệu (Openlayers). Dưới đây tôi sẽ trình bày việc vẽ bản đồ lấy dữ liệu trực tiếp từ OpenStreetMap, còn về việc lấy dữ liệu thông qua phân lớp dữ liệu tôi sẽ trình bày trong một phần riêng trong chương này. Với việc vẽ bản đồ ảnh tĩnh, ta áp dụng phương pháp giống với hệ thống ban đầu trong việc lấy các ảnh bản đồ nhỏ và ghép chúng lại với nhau thành bản đồ lớn. Để vẽ bản đồ ta sử dụng đối tượng mặt phẳng PlaneGeometry mà Away3D cung cấp cũng với các tham số cơ bản về kích thước: PlaneGeometry(width:Number,height:Number) 28 Away3D cũng hỗ trợ ta trong việc phủ vật chất (material) là các ảnh bản bản đồ lên bề mặt mặt phẳng bằng cách sử dụng thành phần TextureMaterial. TextureMaterial(BitmapTexture(bitmapData)::BitmapTexture) Trong đó bitmapData chính là dữ liệu ảnh bitmap mà ta lấy từ ảnh bản đồ. Tuy nhiên, phương thức tải ảnh bản đồ theo URL mà Flash sử dụng có đôi chút khác biệt. Hình 3.12 Luồng hoạt động trong việc tải ảnh bản đồ trong Flash Thay vì thực hiện vòng lặp và thực hiện tải ảnh một cách đơn giản, lần lượt đồng bộ theo hàng đợi như trong WebGL thì Flash lại thực hiện việc tải ảnh không đồng bộ. Điều này có nghĩa là các ảnh sẽ không được tải lần lượt theo thứ tự ảnh này tải xong rồi mới đến ảnh tiếp theo. Cụ thể, khi ta thực hiện vòng lặp tải ảnh và vẽ bản đồ thì hàm load() của Loader sẽ không đợi ảnh của vòng lặp hiện thời tải xong mà sẽ nhảy ngay đến thực hiện vòng lặp tiếp theo. Điều này dẫn tới việc ảnh sẽ không được tải hết và sẽ gây lỗi trong khi vẽ bản đồ. Theo đó để xử lý việc không đồng bộ ta sẽ sử dụng hàm sự kiện COMPLETE. Cụ thể chi tiết hoạt động của luồng tải ảnh như sau: Khi một ảnh được tải thì khi ảnh đó được tải xong thì sẽ sự kiện COMPLETE sẽ xảy ra và gọi đến hàm loaded(). Hàm loaded() sẽ đẩy ảnh vừa tải vào một mảng đã được khởi tại từ trước đồng thời kiểm tra xem đã tải hết tất cả các ảnh bản đồ chưa; nếu đã tải hết thì sẽ thực hiện việc vẽ bản đồ còn nếu không sẽ lặp lại việc tải ảnh đến khi hoàn tất. Việc sắp xếp các ảnh bản đồ thành một bản đồ lớn cũng cần chú ý vì hệ tọa độ 3 chiều của Away3D có khác biệt một chút so với hệ tọa độ 3 chiều thông thường khi trục X trong Away3D ngược chiều so với trục X trong ThreeJS (WebGL). Vẽ biểu đồ 29 Để vẽ biểu đồ ta sử dụng đối tượng CubeGeometry mà Away3D cung cấp các tham số cơ bản về chiều rộng, chiều cao và chiều dài. CubeGeometry(width:Number,height:Number,depth:Number) Away3D cũng cung cấp việc tô màu các cột thông qua sử dụng ColorMaterial. ColorMaterial(colorsetHexa) Việc xác định vị trí vẽ trên bản đồ ta hoàn toàn có thể sử dụng phương pháp đã đề cập ở phần phân tích hệ thống mới đồng thời cũng cần lưu ý về hệ toa độ của Away3D như khi vẽ bản đồ. Các thành phần đồ họa và tương tác với đồ thị, bản đồ Thành phần đồ họa: Away3D cũng cung cấp các thành phần cơ bản tương ứng như ThreeJS để tạo nên các đối tượng 3D như View3D, Camera3D, Scene3D, DirectionalLight. Trong đó - - View3D là thành phần cha chứa tất cả các thành phần đồ họa 3D khác như Camera3D và Scene3D. View3D sẽ có phương thức render() và được gọi để xuất ra các frame và hiển thị lên trình duyệt. Camera3D cung cấp khung nhìn chiếu phối cảnh lên các thực thể 3D. Scene3D là nơi chứa các thực thể 3D được tạo ra. DirectionalLight cung cấp nguồn sáng chiếu từ một hướng cụ thể với các tia sáng song song làm tăng hiệu ứng hiển thị cho các thực thể 3D. Thành phần tương tác: Cũng như trong ThreeJS cung cấp thư viện OrbitControl hỗ trợ các tương tác di chuyển, xoay hay phóng to thu nhỏ thì trong Away cung cấp đối tượng HoverController giúp điều khiển camera thực hiện các tương tác tương ứng. Tuy nhiên với các tương tác này ta phải định nghĩa các hàm tương ứng để có thể xử lý các sự kiện chuột cũng như bàn phím, không như OrbitControl đã gói gọn các tương tác đó. 30 5.9. Mô hình phân lớp dữ liệu Hình 3.13 Mô hình phân lớp dữ liệu Với mô hình này ta tách biệt các thành phần dữ liệu: - - Dữ liệu thống kê: là các dữ liệu đã được thống kê, xử lý theo mục đích và lưu vào cơ sở dữ liệu được Web Server trả về cho tầng ứng dụng (bên phía Client) để thực hiện các công việc liên quan đến hiển thị đồ họa trên nền bản đồ tương ứng với dữ liệu nhận được. Dữ liệu bản đồ: dữ liệu được Map Server lấy từ OpenStreetMap (OSM) sau đó thông qua Open Layers để xử lý và hiển thị bản đồ lên thành bản đồ. Tại tầng bản đồ ngoài việc hiển thị bản đồ còn cung cấp các thông tin liên quan đến bản đồ như tọa độ, mức độ zoom hỗ trợ cho quá trình vẽ các vật thể đồ họa tại chương trình Flash ở tầng ứng dụng. Theo đó, khi Client có yêu cầu về viêc hiển thị đồ họa trên nền bản đồ thì sẽ lấy các dữ liệu cần thiết là dữ liệu thống kê và dữ liệu bản đồ. Dữ liệu thống kê sẽ được WebServer lấy từ cơ sở dữ liệu và trả về dữ liệu tương ứng với yêu cầu từ phía người dùng. Dữ liệu bản đồ cũng sẽ được lấy theo yêu cầu người dùng. Khi có yêu cầu Map Server sẽ kiểm tra xem liệu có sẵn dữ liệu bản đồ trong cơ sở dữ liệu không. Nếu có, Map Server sẽ lấy dữ liệu đó và trả về cho người dùng và nếu không sẽ lấy dữ liệu cần thiết từ 31 các máy tính xung quanh nó qua giao thức chia sẻ hoặc sẽ lấy trực tiếp từ Server dữ liệu của Open Street Map. Dữ liệu bản đồ được gửi thông qua Open Layers sẽ được hiển thị theo cách mong muốn của người dùng và chứa các thông tin về tọa độ và mức zoom của bản đồ. Các dữ liệu cần thiết đó được chuyển tới cho chương trình Flash được sử dụng để hiển thị đồ họa. Việc sử dụng mô hình phân lớp dữ liệu sẽ giúp cho việc xử lý yêu cầu linh hoạt hơn. Khi có sự thay đổi về yêu cầu hiển thị bản đồ hay biểu đồ thì sẽ chỉ có sự thay đổi trên tầng tương ứng mà không có ảnh hưởng gì đến tầng còn lại. Đồng thời phân lớp dữ liệu sẽ giúp giảm tải trong việc xử lý cho Web Server do chỉ phải xử lý các thông tin liên quan đến dữ liệu thống kê và xây dựng biểu đồ, các phần việc xử lý và hiển thị bản đồ sẽ do Map Server xử lý. 32 Chương 6. THỰC NGHIỆM Tôi đã tiến hành thực nghiệm qua việc xây dựng chương trình Flash từ chương trình sử dụng WebGL ban đầu với phương pháp chuyển đổi dùng Flash. Trong khóa luận này, tôi sẽ xây dựng một chương trình sử dụng phương pháp đó dựa trên chương trình “Kỹ thuật hiển thị dữ liệu trên bản đồ” [2] nhưng bằng công nghệ Flash sử dụng Away3D. Cụ thể dữ liệu được biểu diễn là thống kê về sử dụng Internet trong khu vực Hà Nội, gồm thông tin về số lượng, thói quen sử dụng của người dùng tại các khu vực thuộc Hà Nội theo các khoảng thời gian trong ngày. Bên cạnh đó cũng có biểu diễn thống kê theo loại dữ liệu: văn bản, hình ảnh, âm thanh và video. Chương trình sẽ hiển thị dữ liệu trên bản đồ Hà Nội được chia theo mức độ chi tiết là cấp quận và đường/phố. 6.1. Kiến trúc và các thành phần của hệ thống 6.1.1. Mô hình chương trình Hình 4.14 Mô hình chương trình Mô tả: 33 - - Server: Gồm Web Server và Geo Server. Trong đó, Web Server nhận kêt nối từ Client và trả về mã Actionscript được biên dịch thành chương trình Flash cùng với dữ liêu thống kê là file JSON. Geo Server là tầng chịu trách nhiệm lấy dữ liệu bản đồ từ Open Street Map, độc lập với Web Server. Client: Thực hiện các công việc liên quan tới hiển thị cũng như giao tiếp với Server để lấy dữ liệu. Trong đó, Client nhận hai phần dữ liệu riêng biệt là dữ liệu thống kê cùng với chương trình Flash lấy từ Web Server và dữ liệu bản đồ lấy từ Geo Server. Từ dữ liệu bản đồ thông qua Open Layers bản đồ sẽ được hiển thị và chứa các thông tin về tọa độ và mức zoom bản đồ. Trên bản đồ được hiển thị chương trình Flash sẽ vẽ biểu đồ theo dữ liệu thống kê nhận được trên những vị trí tọa độ tương ứng. 6.1.2. Các chức năng chương trình Hình dưới đây mô tả các chức năng của chương trình. Truy cap trang web Nguoi dung Tuong tac Tuy chinh Bieu do Tuy chinh Ban Do Hình 4.15 Mô hình UseCase Các ca sử dụng chính của người dùng bao gồm “Truy cập trang web” và “Tương tác”. Trong ca sử dụng “Truy cập trang web”, người dùng kết nối lần đầu tới server, server sẽ truy vấn cơ sở dữ liệu và trả về dữ liệu thống kê để máy khách tiến hành hiển thị. Đối với ca sử dụng “Tương tác”, hệ thống hỗ trợ các tương tác tuỳ chỉnh biểu đồ và di chuyển trên bản đồ, trong quá trình này sẽ phải thực hiện vẽ lại biểu đồ hoặc vẽ lại bản đồ tuỳ theo yêu cầu người dùng. Khi có yêu cầu vẽ lại bản đồ, hệ thống sẽ thực hiện kết nối tới server của OpenStreetMap để yêu cầu ảnh bản đồ tương ứng. 34 6.1.3. Các thành phần chương trình Máy chủ (Server): gồm Web Server và Geo Server, Open Layers Web Server: Đơn giản là chứa file dữ liệu JSON ở trên và sinh ra mã Actionscript được biên dịch thành chương trình Flash dưới dạng file SWF. Server đơn giản là sẽ nhận kết nối từ Client và trả về chương trình Flash được nhúng trong file HTML cùng với file dữ liệu thống kê JSON. Về dữ liệu thống kê do chương trình ở đây chỉ là mô phỏng sự chuyển đổi từ WebGL sang dùng Flash nên ta hoàn toàn có thể sử dụng chung dữ liệu thống kê. Cụ thể, ở đây tôi sẽ lấy tất cả các dữ liệu thống kê được dưới dạng file JSON thông qua việc xử lý và truy vấn dữ liệu tại Server Java Servlet đã có. Dữ liệu sẽ được chia thành các mảng JSON với 3 khối thống kê chính: - districtStats: thống kê dữ liệu số người sử dụng theo quận. Ví dụ: "districtStats" : [{ "data" : 8, "district_id" : 1, "time_id" : 0, "lng" : "105.852402", "datatype_id" : 0, "lat" : "21.028999" }, Trong đó: -  Data: giá trị của dữ liệu thống kê được.  District_id: id của quận  Time_id: id của khoảng thời gian trong ngày (giá trị 0 biểu thị cho thời gian 24 h trong ngày).  Datatype_id: id của loại dữ liệu được thống kê (giá trị 0 biểu thị thống kê cho tất các các loại dữ liệu).  Lnd, lat: kinh độ và vĩ độ của địa điểm đại diện cho quận. streetStats: dữ liệu thống kê cho đường/phố. Ví dụ: - "streetStats": [{ - "street_id": 1, - "count": 4, 35 - "formatted_address": Kiem District, Hanoi, Vietnam", "Luong Van - "district_id": 1, - "lng": "105.850510", - "streetName": "Luong Van Can", - "lat": "21.032719", - Can, Hoan "datatype_count": "[[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]" - }, Trong đó: -  count: giá trị thống kê được tại phố.  Formatted_address: địa chỉ đầy đủ của phố dùng để hỗ trợ Search biểu đồ theo tên phố.  streetName: tên phố.  Lng, lat: kinh độ và vĩ độ của phố.  Datatype_count: thống kê theo kiểu dữ liệu lần lượt theo văn bản, ảnh, âm thanh và video; trong đó mỗi kiểu lại được chia theo các khoảng thời gian trong ngày. datatypeStats: dữ liệu thống kê theo khoảng thời gian và kiểu dữ liệu. Ví dụ: - "dataTypeStats": [{ - "data": 34, - "district_id": 1, - "time_id": 2, - "lng": "105.852402", - "datatype_id": 1, - "lat": "21.028999" - }, Geo Server: là nơi sẽ tiếp nhận yêu cầu dữ liệu và trả về dữ liệu bản đồ cho CLient. Dữ liệu bản đồ sẽ có luồng hoạt động như sau: 36 Hình 4.16 Luồng hoạt động của dữ liệu bản đồ Cụ thể, khi có yêu cầu về dữ liệu bản đồ, Client sẽ thực hiện các bước - Gửi yêu cầu dữ liệu đến Geo Server Kiểm tra nếu dữ liệu bản đồ có sẵn trong cơ sở dữ liệu thì đi đến bước xử lý luôn. Nếu không thì lấy dữ liệu bản đồ từ OpenStreetMap và đến bước xử lý. Xử lý, gửi trả dữ liệu về cho Client. Kết thúc. Hiện tại, việc lấy dữ liệu bản đồ qua Geo Server được thực hiện trên chương trình khai thác dữ liệu bản đồ [3] mà nhóm bạn Vũ Danh Việt đã xây dựng. Open Layers: dùng để hiển thị dữ liệu bản đồ lấy từ Geo Server. Ở đây tôi cũng sẽ sử dụng Open Layers được xây dựng trong chương trình khai thác dữ liệu bản đồ [3] của nhóm bạn Vũ Danh Việt. Máy khách (Client) gồm có chương trình Flash 37 Chương trình Flash: người dùng truy cập trang Web, trình duyệt sẽ kết nối tới Server qua phương thức HTTP request và nhận dữ liệu phản hồi để tiến hành vẽ biểu đồ. Cấu trúc của chương trình Flash chạy bên Client được thể hiện như sau: Hình 4.17 Các thành phần của chương trình Client (Flash) - Tại Main: đọc dữ liệu trả về, vẽ bản đồ, biểu đồ, đáp ứng tương tác người dùng. • init() : Hàm này gọi tới các hàm init_engine(), init_light(), init_Listeners() để thực hiện việc khởi tạo các đối tượng cần thiết cho việc vẽ biểu đồ và bản đồ. • init_engine() : khởi tạo các đối tượng cơ bản của Away3D như view, scene, camera. • init_light(): khởi tạo các đối tượng về ánh sáng bối cảnh. • init_Listeners() : khởi tạo các hàm sự kiện cho bàn phím, chuột. 38 • setURL(): hàm hỗ trợ cho việc tải bản đồ, lấy các URL cần thiết và lưu chúng vào một mảng. • loadMap(): thực hiện tải ảnh và vẽ bản đồ. Hiện tại tôi vẫn sử dụng phương pháp vẽ bản đồ bằng các ảnh bản đồ nhỏ tĩnh lấy từ server của OpenStreetMap chứ chưa áp dụng lấy dữ liệu bản đồ theo mô hình phân lớp. • loadJson() : hàm thực hiện lấy dữ liệu thống kê được từ file dữ liệu JSON được Server trả về. • drawGraph(): thực hiện vẽ biểu đồ. Trong đó sẽ chia ra các trường hợp nhỏ hơn vẽ theo cấp quận và đường/phố. • onKeyUp(), onKeyDown(): hàm bắt các sự kiện bàn phím và thực hiện các tương tác di chuyển tương ứng. • onMouseUp(), onMouseDown(): hàm bắt các sự kiện chuột và thực hiện các thao tác di chuyển, xoay. • onMouseWheel(): hàm bắt sự kiện chuột giữa và thực hiện thao tác phóng to, thu nhỏ (zoom). • changeHandler_dist(): thực hiện lại việc vẽ biểu đồ khi thay đổi Checkbox của các quận. • changeHandler_time():thực hiện lại việc vẽ biểu đồ khi thay đổi Checkbox của các khoảng thời gian. • changeHandler_street(): thực hiện chuyển sang vẽ bản đồ cấp phố khi Checkbox All Street được tick. • changeHandler_zoom(): thay đổi mức phóng đại bản đồ khi người dùng tương tác với thanh trượt. • Các thành phần điều khiển: ở đây bao gồm các checkbox tuy chọn về quận, phố, thời gian, kiểu dữ liệu và độ phóng to, nhỏ (zoom) bản đồ. Thay vì xây dựng trên các thành phần HTML như thông thường ta xây dựng chúng bằng các phần tử Checkbox mà Flash (Flex SDK) cung cấp. Ở đây tôi sẽ chia các thành phần điều khiển thành 2 Panel chính. Panel District: chứa các ô tùy chọn về quận, huyện và kiểu dữ liệu. 39 Panel Time: chứa các ô tùy chọn về thời gian và thanh trượt điều chỉnh mức zoom bản đồ. Hình 4.18 Các thành phần giao diện điều khiển Mỗi Checkbox sẽ có một thuộc tính định danh riêng như đã được quy định từ trong cơ sở dữ liệu và sẽ được sử dụng để xác định các tùy chọn cho chương trình. Ví dụ danh sách các Checkbox quận sẽ được đánh định danh “name” từ 1 cho đến 15 tương ứng với trường id của các quận trong cơ sở dữ liệu cũng như trong kết quả JSON thống kê được. - Tại GraphUtils: thực hiện một số chức năng hỗ trợ vẽ biểu đồ • colorList: danh sách một số mã màu thông dụng, dùng để vẽ các cột biểu đồ. • gradient(): sinh màu phụ thuộc vào độ lớn của giá trị cột biểu đồ. Màu từ xanh tới đỏ ứng với giá trị từ nhỏ đến lớn. • toHex(): chuyển đổi mã màu sang cơ số 16. 40 • ArrayShuffle(): tráo danh sách màu. • randomSet(): tráo danh sách màu và trả về một dãy màu ngẫu nhiên để vẽ cột biểu đồ. - Tại map: thực hiện các tác vụ liên quan tới bản đồ. Các thuộc tính: • zoom: lưu mức phóng đại (zoom) hiện tại của bản đồ. • x_tile: lưu tham số toạ độ x của ô bản đồ chính giữa. • y_tile: lưu tham số toạ độ y của ô bản đồ chính giữa. • x_coord: lưu toạ độ x trong khung hình của cột biểu đồ đang được vẽ. • y_coord: lưu toạ độ y trong khung hình của cột biểu đồ đang được vẽ. • centerLat: vĩ độ của điểm chính giữa bản đồ. • centerLng: kinh độ của điểm chính giữa bản đồ. Các phương thức: • init_tiles(): tính toán các thuộc tính x_tile, y_tile dựa vào kinh độ, vĩ độ của điểm chính giữa bản đồ. • latLngToCoord(): chuyển đổi từ kinh độ, vĩ độ sang vị trí tương ứng trên bản đồ. • coordtoLatLng(): chuyển đổi vị trí trên bản đồ sang kinh độ, vĩ độ. • long2tile();lat2tile(): từ kinh độ, vĩ độ tính toán tham số x, y của ảnh bản đồ tĩnh. • tile2long();tile2lat(): từ tham số x, y của ô ảnh bản đồ tĩnh tính kinh độ, vĩ độ. • getURL(): tạo đường dẫn URL của ảnh bản đồ từ các tham số zoom, x, y. Tất cả các thành phần chương trình này sẽ được biên dịch thành file chương trình Flash SWF và được nhúng trong HTML. Nhằm tăng tính hiệu quả trong việc tận dụng khả năng bên các máy Client trong file HTML sẽ có một đoạn mã Javascript sử dụng thư viện Detector.js xác định xem bên Client có hỗ trợ đồ họa WebGL không, qua đó có thể lựa chọn chương trình hiển thị dữ liệu thống kê thích hợp. 41 6.2. Môi trường thực nghiệm 4.1.1. Cấu hình máy chủ Máy chủ sử dụng trong thực nghiệm có cấu hình như sau: Bảng 4.1 Cấu hình máy chủ IBM System X3200 CPU Intel Xeon 3050 @2.13GHz Memory 4x512MB DDR2 OS Ubuntu 10.0.4 LTS 6.2.1. Cấu hình máy khách Các máy khách sử dụng trong thực nghiệm có cấu hình như sau: Bảng 4.2 Cấu hình máy khách Client 1 : Laptop ASUS X550C (Máy ảo) CPU Intel 2 nhân Memory 512MB DDR3 VGA OS Máy ảo Windows XP Display Screen 1366x768 Browsers Internet Explorer 6, Chrome Client 2 : Laptop ASUS X550C (Máy thật) CPU Intel Core i5 – 3337U 1.8GHz Memory 4 GB DDR3 VGA IntelHD 4000 OS Window 8.1 Pro 64-bit Display Screen 1366x768 Browsers Google Chrome v25, IE 11 42 4.1.1. Công cụ phần mềm Dưới đây là các công cụ, thư viện được sử dụng trong qua trình xây dựng chương trình thực nghiệm. Bảng 4.3 Các công cụ phần mềm STT Tên công cụ Mục đích 1 Flash Builder 4.7 Môi trường phát triển ứng dụng. 2 Detector.js Thư viện phát hiện trình duyệt có hỗ trợ WebGL. 3 Ascorelib.swc Thư viện hỗ trợ trong việc đọc file dữ liệu dạng JSON. 4 Away3D.swc Thư viện hỗ trợ đồ họa 3D trên nền Flash. 5 Flex SDK Bộ công cụ lập trình gồm các hàm, thư viện 6.3. Kết quả thực nghiệm Tôi đã tiến hành thực nghiệm qua việc xây dựng chương trình Flash từ chương trình sử dụng WebGL ban đầu với phương pháp chuyển đổi dùng Flash. Chương trình hiện đã có những kết quả nhất định trong việc xây dựng đồ họa 3D trên Flash. Chương trình đã có hầu hết chức năng cơ bản về xem, tương tác với dữ liệu tương tự với chương trình gốc xây dựng bằng WebGL, ngoại trừ chức năng tìm kiếm xây dựng biểu đồ theo tên phố. Bên cạnh đó, chương trình cũng tự xác định được xem bên Client có hỗ trợ các công nghệ WebGL hay không nhằm tận dụng việc sử dụng hai chương trình một cách có hiệu quả trên các máy Client khác nhau. Chương trình hiện nay cũng chưa hoàn thiện theo mô hình phân lớp dữ liệu như đã trình bày ở trên. Thay vào đó vẫn sử dụng bản đồ ảnh tĩnh lấy trực tiếp từ Open Street Map. Các loại biểu đồ mà chương trình hiện cung cấp: - Số người dùng theo quận - Loại dữ liệu theo quận - Số người dùng theo phố - Loại dữ liệu theo phố Dưới đây là một số hình ảnh kết quả hiển thị lấy từ máy Client 1. Bản đồ và biểu dồ được vẽ và hiển thị tương tự như chương trình WebGL ban đầu, giao diện cũng cung cấp các tùy chọn hiển thị. 43 Hình 4.19 Biểu đồ loại dữ liệu truy cập theo quận/huyện và theo thời gian trong ngày Hình trên hiển thị biểu đồ biểu diễn loại dữ liệu người dùng hay truy cập theo khu vực quận và theo thời gian trong ngày. Các biểu đồ trên cũng được xây dựng giống với với biểu đồ trong chương trình WebGL với việc phân chia loại dữ liệu thành 4 cột: văn bản, hình ảnh, âm thanh và phim với các màu sắc khác nhau cùng với hình chú giải dưới 4 cột. Hình dưới đây sẽ hiển thị biểu đồ tổng số người dùng ở cấp quận với màu sắc các cột là ngẫu nhiên. Hình 4.20 Biểu đồ hiển thị số người dùng theo quận 44 Hình 5.3 dưới đây cũng hiển thị tổng số người dùng ở mức phố. Cũng tương tự như trong chương trình WebGL các cột biểu đồ sẽ được tô màu theo tỉ lệ người dùng với cột màu xanh tỉ lệ người dùng thấp và cột màu đỏ với tỉ lê người dùng cao. Hình 4.21 Biểu đồ hiển thị số người dùng theo phố Hình 4.22 Biểu đồ loại dữ liệu truy cập theo phố Hình trên hiển thị biểu đồ biểu diễn loại dữ liệu người dùng hay truy cập theo cấp quận và theo thời gian trong ngày. Kết quả hoạt động của chương trình được trình bày qua các bảng dưới đây. 45 Bảng 4.4 Thời gian tải trang (giây), hiệu năng hiển thị khung hình/giây (FPS) Số cột đồ Máy ảo XP thị IE 6 Chrome Laptop ASUS X550C IE 11 Chrome Tải trang, vẽ biểu 11 đồ lần đầu tiên 20 20 12.4 11.1 24FPS 10FPS 30FPS 30FPS Vẽ biểu đồ loại dữ 44 liệu theo quận 0.5 0.5 0.3 0.2 20FPS 10FPS 30FPS 30FPS Vẽ biểu đồ số người 158 dùng theo phố 0.7 0.6 0.6 0.6 10FPS 8FPS 30FPS 30FPS Vẽ biểu đồ loại dữ 940 liệu theo phố 1 1 1 1 4FPS 3FPS 20FPS 21FPS 46 Bảng 4.5 Bảng so sánh hiệu năng chương trình trên các phiên bản trình duyệt Laptop ASUS X550C Tải trang, vẽ biểu đồ lần đầu tiên Vẽ biểu đồ loại dữ liệu theo quận Vẽ biểu đồ số người dùng theo phố Vẽ biểu đồ loại dữ liệu theo phố IE 6 IE7 IE 11 Chrome 12 10 12.4 11.1 30FPS 30FPS 30FPS 30FPS 0.3 0.3 0.3 0.2 30FPS 30FPS 30FPS 30FPS 0.5 0.4 0.6 0.6 30FPS 30FPS 30FPS 30FPS 0.7 0.6 1 1 30FPS 30FPS 20FPS 21FPS 19 21 22 30FPS 30FPS 30FPS Tải trang khi có thay đổi về độ 20 zoom bản đồ 30FPS 6.4. Đánh giá Bước đầu chương trình đã hiển thị được dữ liệu đồ họa cần thiết. Các đối tượng 3D như bản đồ và biểu đồ được vẽ chính xác đúng vị trí như theo dữ liệu. Chương trình chạy được trên nhiều trình duyệt khác nhau từ các trình duyệt cũ cho đến các trình duyệt mới, chỉ cần có cài đặt Flash Player. Trên các trình duyệt khác nhau thì về thời gian và chất lượng hiển thị không có nhiều sự khác biệt, có độ ổn định khá tốt. Tuy nhiên, chương trình có hạn chế lớn hiệu suất chương trình không cao: thời gian tải trang lần đầu tiên vẫn lớn thường khoảng 12 giây thỉnh thoảng lên tới trên 15 giây. Đối với những lần tải trang sau đó thời gian có được rút ngắn hơn. Chủ yếu thời gian tải trang là dành cho việc tải vẽ bản đồ, còn thời gian để vẽ biểu đồ thì tương đối nhanh, mất khoảng tầm 1 giây khi chuyển qua lại giữa các tùy chọn vẽ. Tỷ lệ khung hình chỉ đạt ngưỡng tối đa khoảng 35 khung hình/giây nên chất lượng hiển thị chỉ đạt mức trung bình. Đối với việc vẽ biểu đồ theo cấp phố thì tỷ lệ thấp hơn đạt khoảng 20-25 khung hình/giây. Đối với những máy có phần cứng thấp như Client 1 thì tỷ lệ này còn thấp hơn nhiều thậm 47 chí chỉ đạt 4 khung hình/giây khi thực hiện vẽ biểu đồ loại dữ liệu cấp phố. Khi có thay đổi về độ zoom bản đồ thì thời gian tải lại là cao trên 15 giây. Các tương tác như xoay, di chuyển, phóng to thu nhỏ diễn ra khá mượt mà tuy nhiên sẽ bị giật khi ở chế độ vẽ biểu đồ cấp phố. Việc tiêu tốn tài nguyên cũng là một vấn đề khi chương trình tiêu tốn khá nhiều RAM với trung bình từ 30-35MB RAM với việc vẽ biểu đồ cấp độ quận và từ 6070MB với vẽ biểu đồ cấp phố, đôi lúc lên đến khoảng 100MB RAM khi chương trình chạy lâu kéo dài. So với chương trình viết trên WebGL thì có thể thấy chương trình viết trên Flash hạn chế hơn từ hiệu suất tải trang cho tới chất lượng hiển thị. Có thể so sánh với kết quả của chương trình viết bằng WebGL qua bảng dưới đây: Bảng 4.6 Bảng so sánh kết quả về hiệu năng giữa hai chương trình Số cột đồ thị Chương Flash trình Chương WebGL Chrome Chrome Tải trang, vẽ biểu 11 đồ lần đầu tiên 12.1 8.8 30FPS 46FPS Vẽ biểu đồ loại dữ 44 liệu theo quận 0.2 0.6 30FPS 40FPS Vẽ biểu đồ số người 158 dùng theo phố 0.6 1 30FPS 23FPS Vẽ biểu đồ loại dữ 940 liệu theo phố 1 1.2 21FPS 20FPS trình Có thể thấy về thời gian tải trang lần đầu của chương trình Flash lâu hơn đến 1.5 lần so với chương trình WebGL. Về chất lượng hiển thị cũng thấy rằng số khung hình trên giây (FPS) của chương trình cũng thấp hơn hoặc ngang bằng so với chương trình WebGL. Tuy vậy tỷ lệ khung hình của chương trình Flash có độ ổn định hơn, không quá bị chênh lệch nhiều giữa các tùy chọn vẽ biểu đồ giữa cấp độ quận và phố. 48 Chương 7. KẾT LUẬN Với sự tồn tại một số các hệ thống cũ và lạc hậu cùng với nhu cầu sử dụng đồ họa 3D ngày càng tăng thì cần có một phương pháp có thể chuyển đổi đồ họa WebGL sang cấu trúc đồ họa khác có thể chạy được trên các hệ thống cũ. Với việc tìm hiểu phương pháp chuyển đổi cấu trúc đồ họa WebGL sang Flash, có thể thấy việc chuyển đổi đồ họa WebGL từ những hệ thống mới sang hệ thống cũ là hoàn toàn có thể xây dựng được. Dựa vào phương pháp trên tôi đã xây dựng một chương trình mô phỏng phương pháp chuyển đổi dựa trên chương trình WebGL “Kỹ thuật hiển thị dữ liệu trên bản đồ” và đạt được một số kết quả nhất định. Cùng với đó mô hình phân lớp dữ liệu là mô hình có nhiều ưu điểm trong việc xây dựng các thành phần hệ thống một cách tách biệt và linh động. Với việc sử dụng mô hình này, sẽ giảm phụ thuộc vào việc tải dữ liệu bản đồ từ Open Street Map và giảm tải cho chương trình trong việc xử lý dữ liệu bản đồ, đồng thời tăng hiệu suất tải trang đáng kể. Từ những kết quả đạt được qua thực nghiệm có thể thấy phương pháp chuyển đổi từ WebGL sang dùng Flash trình bày trong khóa luận này có nhiều hứa hẹn được áp dụng trong những hệ thống cũ không hỗ trợ WebGL. Với khả năng có thể chạy trên nhiều trình duyệt khác nhau từ những trình duyệt cũ đến những trình duyệt hiện đại, phương pháp chuyển đổi có thể đáp ứng tốt với các nhu cầu hiển thị cơ bản về đồ họa 3D. Mặc dù vậy, bên cạnh những kết quả đã đạt được, khoá luận không tránh khỏi những thiếu sót, nhược điểm do hạn chế về thời gian và công nghệ. Hiện tại chương trình vẫn còn chưa tối ưu, mới chỉ áp dụng cho một vài chương trình WebGL nhất định, chưa thể áp dụng cho nhiều loại chương trình WebGL khác nhau do điều cần thiết của phương pháp là phải hiểu sâu và rõ các thành phần của chương trình WebGL thì mới có thể thực hiện việc chuyển đồi. Bên cạnh đó hiệu năng chương trình còn kém khi thời gian tải trang lâu, chất lượng hiển thị trung bình chưa cao. Ngoài ra, hệ thống vẫn chưa áp dụng việc phân lớp dữ liệu nhằm tăng hiệu suất cũng như sử dụng dữ liệu một cách hiệu quả. Do vậy, trong thời gian tới, có một vài hướng phát triển hệ thống như cải tiến thêm về hiệu năng (thời gian tải trang và chất lượng hiển thị) và áp dụng việc phân lớp dữ liệu đối với hệ thống. Ngoài ra như đã trình bày ở các chương trước, thì việc chuyển đổi đối với nhiều hệ thống khác nhau thì ta có thể tiếp tục phát triển phương pháp xử lý WebGL trên Server thông qua xử lý và bóc tách các frame. Như vậy, hệ thống sẽ có khả năng phát triển và ứng dụng rộng hơn. 49 TÀI LIỆU THAM KHẢO Tiếng Việt [2] N. H. Khanh, “Kỹ thuật hiển thị dữ liệu trên bản đồ,” Khóa luận tốt nghiệp, 2013. [3] N. s. v. p. t. n. Toshiba, “Giao thức XMPP và khai thác dữ liệu bản đồ phân tán,” Công trình nghiên cứu khoa học Khoa Công nghệ thông tin Đại học Công nghệ, 2014. Tiếng Anh [8] "Actionscript 3.0," [Online]. Available: http://www.adobe.com/devnet/actionscript/learning.html. [7] "Adobe Flash Player," [Online]. Available: http://www.adobe.com/products/flashplayer.html. [10] "Adobe Flex," [Online]. Available: http://www.adobe.com/devnet/flex.html. [12] "Away 3D," [Online]. Available: http://away3d.com/. [15] "Geo Server," [Online]. Available: http://geoserver.org/. [6] "H264," [Online]. Available: http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC. [4] "JSON," [Online]. Available: http://www.json.org/. [5] "NodeJS," [Online]. Available: http://nodejs.org. [14] "Open Layers," [Online]. Available: http://openlayers.org/. [13] "Open Street Map," [Online]. Available: http://www.openstreetmap.org/. [16] "ThreeJS," [Online]. Available: http://threejs.org/. [1] "WebGL – OPENGL ES2.0 for the Webc," [Online]. Available: http://www.khronos.org/webgl/. [11] Adobe Flex Tutorial, Tutorials Point. [9] Learning Actionscript 3.0, Adobe, 2011. 50 51 [...]... hỗ trợ nhiều định dạng dữ liệu bản đồ chuẩn như: Open Geospatial Consortium (OGC) Web Feature Service (WFS) and Web Coverage Service (WCS), Web Map Service (WMS) 16 4 PHƯƠNG PHÁP CHUYỂN ĐỔI ĐỒ HỌA WEBGL Phương pháp chuyển đổi đồ họa ở đây là việc chuyển đổi mã WebGL sang một mã khác và việc chuyển mã là được thực hiện tại Server và việc xử lý cũng như hiển thị đồ họa là được thực thi tại phía Client... của việc chuyển đổi cấu trúc mã WebGL Hình 3.3 Tổng quan về việc chuyển đồi mã WebGL Cụ thể khi mã WebGL được sinh ra tại Server thì thông qua phương pháp chuyển đổi sẽ cho ra một cấu trúc mã khác ở đây tôi gọi tạm đó là mã kết quả mà khi được gửi đến cho Client không có hỗ trợ WebGL hoàn toàn có thể dễ dàng xử lý và hiển thị đồ họa trên đó Trong quá trình tìm hiểu tôi tập trung vào hai phương pháp sau:... nhiều các thư viện đồ họa trong đó Away3D [12] là một thư viện đồ họa 3D tương tự như với ThreeJS [16] (WebGL) 4.1.1 Mô hình hóa phương pháp Hình 3.5 Mô hình chuyển đổi dùng Flash Ở đây, sử dụng cấu trúc đồ họa trên nền Flash – là công nghệ đã được áp dụng từ lâu trên các trình duyệt, hoàn toàn có khả năng chạy được trên các hệ thống cũ Để xác định rõ phương pháp chuyển đổi đồ họa WebGL ta cần hiểu... của hệ thống mới (sử dụng WebGL) rồi từ đó xác định các bước sử dụng Flash thay thế WebGL và chạy chúng trên hệ thống cũ Để làm được điều đó yêu cầu đặt ra là ta cần phân tích hệ thống ban đầu Vì vậy có thể coi bài toán tìm phương pháp chuyển đổi đồ họa WebGL ở đây là bài toán phân tích hệ thống và áp dụng các kỹ thuật Flash tương ứng để thay thế WebGL Phương pháp chuyển đổi WebGL sẽ có những bước sau... - Xử lý mã WebGL trên Server thông qua chạy và bóc tách các frame, chuyển các frame này sang mã định dạng H264 và gửi về cho Client hiển thị - Chuyển đổi sử dụng mã WebGL sang sử dụng Flash (Actionscript 3.0) Thay vì sử dụng mã WebGL để xây dựng đồ họa và gửi về cho Client thực thi thì ta sẽ sử dụng Flash để viết nên chương trình đồ họa mới dựa trên thành phần cấu trúc của chương trình WebGL và gửi... lấy dữ liệu Dữ liệu ở đây gồm mã WebGL và dữ liệu thống kê dưới dạng file JSON Client đọc file JSON lấy ra các dữ liệu cần thiết và dùng mã WebGL để hiển thị biểu đồ và bản đồ cho người dùng Hệ thống mới với các phương pháp giải quyết vấn đề: vẽ bản đồ, xác định vị trí trên bản đồ và phương pháp vẽ đồ thị Vẽ bản đồ Dữ liệu được lấy từ OpenStreetMap dưới dạng ảnh bản đồ tĩnh (Static- map tile) với định... trên Các phần còn lại của Khóa luận gồm có cấu trúc như sau: Chương 2 – Cơ sở lý thuyết và công nghệ: Giới thiệu những công nghệ, cơ sở lý thuyết được áp dụng trong chương trình này Chương 3 – Phương pháp chuyển đổi đồ họa WebGL: phát biểu bài toán, trình bày cụ thể phương pháp giải quyết theo hai hướng tiếp cận đã đề cập ở trên, đánh giá và lựa chọn giải pháp phù hợp; nêu lên mô hình phân lớp dữ liệu... trình dựa trên phương pháp đã chọn từ chương trước đó: giới thiệu chương trình thực nghiệm, mô tả kiến trúc, thành phần, phương pháp triển khai thực nghiệm Cụ thể tại phần này, tôi sẽ dựa trên một chương trình sử dụng WebGL đã có là chương trình “Kỹ thuật hiển thị dữ liệu trên bản đồ [2] để phát triển chương trình mô phỏng việc chuyển đổi Đồng thời sử dụng dịch vụ cung cấp dữ liệu bản đồ của nhóm bạn... việc liên quan đến hiển thị đồ họa trên nền bản đồ tương ứng với dữ liệu nhận được Dữ liệu bản đồ: dữ liệu được Map Server lấy từ OpenStreetMap (OSM) sau đó thông qua Open Layers để xử lý và hiển thị bản đồ lên thành bản đồ Tại tầng bản đồ ngoài việc hiển thị bản đồ còn cung cấp các thông tin liên quan đến bản đồ như tọa độ, mức độ zoom hỗ trợ cho quá trình vẽ các vật thể đồ họa tại chương trình Flash... toa độ của Away3D như khi vẽ bản đồ Các thành phần đồ họa và tương tác với đồ thị, bản đồ Thành phần đồ họa: Away3D cũng cung cấp các thành phần cơ bản tương ứng như ThreeJS để tạo nên các đối tượng 3D như View3D, Camera3D, Scene3D, DirectionalLight Trong đó - - View3D là thành phần cha chứa tất cả các thành phần đồ họa 3D khác như Camera3D và Scene3D View3D sẽ có phương thức render() và được gọi ... đồ họa 3D hệ thống đề cập yêu cầu được đặt tìm phương chuyển đổi cấu trúc đồ họa WebGL sang cấu trúc đồ họa khác mà hỗ trợ bên phía Client Nội dung đề tài: Phương pháp chuyển đổi cấu trúc đồ họa. .. Map Service (WMS) 16 PHƯƠNG PHÁP CHUYỂN ĐỔI ĐỒ HỌA WEBGL Phương pháp chuyển đổi đồ họa việc chuyển đổi mã WebGL sang mã khác việc chuyển mã thực Server việc xử lý hiển thị đồ họa thực thi phía Client... hiểu phương pháp chuyển đổi cấu trúc đồ họa WebGL sang Flash, thấy việc chuyển đổi đồ họa WebGL từ hệ thống sang hệ thống cũ hoàn toàn xây dựng Dựa vào phương pháp xây dựng chương trình mô phương

Ngày đăng: 08/10/2015, 13:25

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w