Mục lục
Danh sách các hình vẽ được sử dụng trong khóa luận 3
LỜI MỞ ĐẦU 4
Chương 1. Tìm hiểu về các dịch vụ cung cấp quang cảnh đường phố 5
1.1. Google Maps Street View 5
1.2. MapJack 7
Chương 2. Một số lý thuyết về đồ họa 3D 9
2.1. Giới thiệu 9
2.2. Một số kiến thức cơ bản 9
2.3. Lý thuyết về phép chiếu 13
2.3.1. Phép chiếu song song 13
2.3.2. Phép chiếu phối cảnh 17
2.4. 3D trong Flash 21
Chương 3. Bài toán 23
3.1. Mục tiêu của bài toán 23
3.2. Phân tích bài toán 23
3.3. Các lý thuyết liên quan 23
3.3.1. Adobe Flash 23
3.3.2. Flex builder 3.0 26
3.3.3. Action Script 28
3.3.4. Open Sources 28
3.4. Giải quyết bài toán 28
3.4.1. Xây dựng chương trình cho phép người sử dụng nhìn xung quanh 360° 29
3.4.2. Xử lý việc cho phép người sử dụng dịch chuyển tới các vị trí khác nhau 31
3.4.3. Cách lưu trữ Cơ sơ dữ liệu 35
3.5. Thực nghiệm 36
3.5.1. Môi trường thực nghiệm 36
3.5.2. Công cụ thực nghiệm 37
3.5.3. Quá trình thực nghiệm 37
3.6. Kết quả thực nghiệm 40
Chương 4. Kết luận 43
4.1. Đóng góp của mình 43
4.2. Hướng phát triển của đề tài 43
Tài liệu tham khảo 45
49 trang |
Chia sẻ: netpro | Lượt xem: 1511 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Nghiên cứu phát triển hệ thống thử nghiệm cung cấp quang cảnh đường phố Hà Nội, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
(như đồi núi, nhà cửa, cây cối…), còn đối với các vật thể động (như nhân vật trong trò chơi) thì nên dùng z-buffer.
Bước 5: Color, Light, Fog, Texture Mapping, Blending
Tạo màu là bước cho phép thể hiện màu sắc tại các đỉnh của một tam giác cũng như các điểm bên trong một tam giác dựa vào màu sắc của các đỉnh tam giác. Để thể hiện bề mặt người ta dùng các thuật toán tạo shading. Có một số thuật toán như Flat Shading (tốc độ nhanh, chất lượng thấp do thấy đường giao giữa các tam giác) hay Phong Shading (tốc độ thấp, chất lượng cao).
Hiệu ứng ánh sáng có thể được đưa vào việc tạo hình. Hình ảnh thu được phụ thuộc vào chất liệu bề mặt (độ bóng, độ phản xạ ánh sáng, độ nhiễu xạ ánh sáng…) và các nguồn sáng (vị trí nguồn sáng, kiểu nguồn sáng, cường độ sáng, hướng chiếu sáng…). Hiệu ứng ánh sáng cho phép tạo hình ảnh thật hơn, mô tả được không gian sáng tối.
Hiệu ứng sương mù cho phép mô phỏng sương mù vào không gian ba chiều. Vật thể càng gần thì nhìn càng rõ, vật thể càng xa càng mù. Thông thường độ mù sẽ tăng theo hàm mũ của khoảng cách, và được điều khiển bởi hệ số mật độ sương mù đặc trưng cho sương dày hay mỏng.
Texture mapping là kỹ thuật cho phép dùng một ảnh thật lát lên một bề mặt trong không gian. Kỹ thuật này cho phép thể hiện các vật thể thật hơn, ví dụ như việc sử dụng ảnh vân gỗ để lát lên bề mặt bàn trong không gian 3 chiều.
Blending cho phép thể hiện một vật thể với độ trong nào đó. Các vật thể đặc không cho phép nhìn qua, còn các vật thể trong thì có thể nhìn xuyên qua và thấy được các vật đằng sau vật đó. Tham số đặc trưng cho độ trong suốt thường gọi là Alpha, trong đó Alpha bằng 0 có nghĩa là vật trong hoàn toàn, Alpha càng lớn thì vật càng đặc.
Ngoài ra còn có một số hiệu ứng đặc biệt khác đem lại chất lượng hình ảnh cao như phản xạ gương, đổ bóng, tạo bề mặt sần sùi…
Lý thuyết về phép chiếu
Phép chiếu song song
Các hình ảnh được hình thành bằng phép chiếu song song có thể được xác định dựa vào góc hợp bởi hướng của phép chiếu hợp với mặt phẳng chiếu. Khi hướng của phép chiếu vuông góc với mặt phẳng, ta có phép chiếu trực giao (hay phép chiếu vuông góc - orthographic projection). Một phép chiếu có thể không vuông góc với mặt phẳng chiếu được gọi là phép chiếu xiên (oblique projection).
Các phép chiếu trực giao hầu như được dùng để tạo ra quang cảnh nhìn từ phía trước, bên sườn, và trên đỉnh của đối tượng. Quang cảnh phía trước, bên sườn, và phía sau của đối tượng được gọi là “mặt chiếu” (elevation), và quang cảnh phía trên được gọi là “mặt phẳng” (plane). Các bản vẽ trong kỹ thuật thường dùng các phép chiếu trực giao này, vì các chiều dài và góc miêu tả chính xác và có thể đo được từ bản vẽ.
Hình 4. Ba phép chiếu trực giao của một đối tượng
Chúng ta cũng có thể xây dựng các phép chiếu trực giao để có thể quan sát nhiều hơn một mặt của một đối tượng. Các quang cảnh như thế được gọi là các phép chiếu trực giao trục lượng học (axonometric orthographic projection). Hầu hết phép chiếu trục lượng học được dùng là phép chiếu cùng kích thước (isometric projection). Một phép chiếu cùng kích thước được thực hiện bằng việc sắp xếp song song mặt phẳng chiếu mà nó cắt mỗi trục tọa độ ở nơi đối tượng được định nghĩa (được gọi là các trục chính) ở các khoảng cách như nhau từ ảnh gốc. Hình 5 trình bày phép chiếu cùng kích thước. Có tám vị trí, một trong tám mặt, đều có kích thước bằng nhau. Tất cả ba trục chính được vẽ thu gọn bằng nhau trong phép chiếu cùng kích thước để kích thước liên hệ của các đối tượng được bảo tồn. Đây không là trường hợp phép chiếu trực giao trục lượng học tổng quát, khi mà các hệ số tỷ lệ theo ba trục chính có thể khác nhau.
Các phương trình biến đổi để thực hiện một phép chiếu song song trực giao thì dễ hiểu. Đối với điểm bất kỳ (x, y, z), điểm chiếu (xp, yp, xp) trên bề mặt chiếu được tính như sau:
xp = x, yp = y, zp = 0
Hình 5. Phép chiếu cùng kích thước của một đối tượng lên bề mặt quan sát
Một phép chiếu xiên đạt được bằng việc chiếu các điểm theo các đường thẳng song song, các đường thẳng này không vuông góc với mặt phẳng chiếu. Hình 6 trình bày hình chiếu xiên của điểm (x, y, z) theo một đường thẳng chiếu đến vị trí (xp, yp). Các tọa độ chiếu trực giao trên mặt phẳng chiếu là (x, y). Đường thẳng của phép chiếu xiên tạo một góc α với đường thẳng trên mặt phẳng chiếu (đây là đường nối điểm (xp, yp) với điểm (x, y)). Đường này, có chiều dài L, hợp một góc φ với phương ngang trên mặt phẳng chiếu. Chúng ta có thể diễn tả các tọa độ chiếu qua các số hạng x, y, L, và φ:
xp = x + L cosφ
yp = y + L sinφ
Hình 6. Phép chiếu vuông góc của điểm (x, y, z) thành điểm (xp, yp) lên mặt phẳng chiếu
Phương chiếu có thể định nghĩa bằng việc chọn các giá trị cho góc α và φ. Các chọn lựa thông thường cho góc φ là 30o và 45o, là các góc hiển thị một quang cảnh của mặt trước, bên sườn, và trên đỉnh (hoặc mặt trước, bên sườn, và dưới đáy) của một đối tượng. Chiều dài L là một hàm của tọa dộ z, và chúng ta có thể tính tham số này từ các thành phần liên quan.
tan α = z/L = 1/L1
ở đây L1 là chiều dài của các đường chiếu từ (x, y) đến (xp, yp) khi z = 1.
Từ phương trình trên, chúng ta có
L = z L1
và các phương trình của phép chiếu xiên có thể được viết lại như sau
xp = x + z(L1 cosφ)
yp = y + z(L1 sinφ)
Ma trận biến đổi để tạo ra bất kỳ việc chiếu song song có thể được viết như sau
Một phép chiếu trực giao có thể đạt được khi L1 = 0 (xảy ra ở góc chiếu α=90o). Các phép chiếu xiên được sinh ra với giá trị L1 khác không. Ma trận chiếu 6-6 có cấu trúc tương tự ma trận của phép làm biến dạng theo trục z. Thực tế, kết quả của ma trận chiếu này là làm biến dạng mặt phẳng của hằng z và chiếu chúng lên mặt phẳng quan sát. Các giá trị tọa độ x và y trong mỗi mặt của hằng z bị thay đổi bởi một hệ số tỷ lệ đến giá trị z của mặt phẳng để các góc, các khoảng cách, và các đường song song trong mặt phẳng được chiếu chính xác.
Phép chiếu phối cảnh
Để đạt được phép chiếu phối cảnh của đối tượng ba chiều, chúng ta chiếu các điểm theo đường thẳng chiếu để các đường này gặp nhau ở tâm chiếu. Trong hình 6-10, tâm chiếu trên trục z và có giá trị âm, cách một khoảng d phía sau mặt phẳng chiếu. Bất kỳ điểm nào cũng có thể được chọn làm tâm của phép chiếu, tuy nhiên việc chọn một điểm dọc theo trục z sẽ làm đơn giản việc tính toán trong các phương trình biến đổi.
Hình 7. Phép chiếu phối cảnh của điểm P ở tọa độ(x, y, z) thành điểm (xp, yp, 0) trên mặt phẳng chiếu.
Chúng ta có thể đạt được các phương trình biến đổi cho phép chiếu phối cảnh từ các phương trình tham số mô tả các đường chiếu từ điểm P đến tâm chiếu (xem hình 7). Các tham số xây dựng các đường chiếu này là
x’ = x – xu
y’ = y – yu
z’ = z - (z + d)u
Tham số u lấy giá trị từ 0 đến 1, và các tọa độ (x’, y’, z’) thể hiện cho bất kỳ điểm nào dọc theo đường thẳng chiếu. Khi u = 0, phương trình 12-7 làm cho điểm P ở tọa độ (x, y, z). Ở đầu mút kia của đường thẳng u =1, và chúng ta có các tọa độ của tâm chiếu, (0, 0, d). Để thu được các tọa độ trên mặt phẳng chiếu, chúng ta đặt z’ = 0 và tìm ra tham số u:
u = z / (z + d)
Giá trị của tham số u tạo ra giao điểm của đường chiếu với mặt phẳng chiếu tại (xp, yp, 0). Thế giá trị của u vào phương trình trên, ta thu được các phương trình biến đổi của phép chiếu phối cảnh.
Khi các đối tượng ba chiều đựợc chiếu lên một mặt phẳng dùng các phương trình biến đổi phối cảnh, bất kỳ tập hợp các đường thẳng song song nào của đối tượng mà không song song với mặt phẳng chiếu được chiếu thành các đường hội tụ (đồng quy). Các đường thẳng song song với mặt phẳng khi chiếu sẽ tạo ra các đường song song. Điểm mà tại đó tập hợp các đường thẳng song song được chiếu xuất hiện hội tụ về đó được gọi là điểm ảo (vanishing point). Mỗi tập hợp các đường thẳng song song được chiếu như thế sẽ có một điểm ảo riêng (xem hình 8).
Hình 8. Các quang cảnh phối cảnh của một hình lập phương.
Điểm ảo cho bất kỳ tập các đường thẳng, tức các đường song song với một trong các trục tọa độ thế giới thực được nói đến như một điểm ảo chính (principal vanishing point). Chúng ta quản lý số lượng các điểm ảo chính (một, hai, hoặc ba) với hướng của mặt phẳng chiếu, và các phép chiếu phối cảnh được phân loại dựa vào đó để có các phép chiếu: một-điểm (one-point), hai-điểm (two-point), hoặc ba-điểm (three-point). Số lượng các điểm ảo chính trong một phép chiếu được xác định bởi số lượng các trục của hệ tọa độ thế giới thực cắt mặt phẳng chiếu. Hình 8 minh họa hình ảnh của các phép chiếu phối cảnh một-điểm và hai-điểm của hình lập phương. Trong hình 8(b), mặt phẳng chiếu có phương song song với mặt xy để chỉ có trục z bị cắt. Phương này tạo ra phép chiếu phối cảnh một-điểm với một điểm ảo trên trục z. Với quang cảnh trong hình 8(c), mặt phẳng chiếu cắt cả hai trục x và z nhưng không cắt trục y. Kết quả, phép chiếu phối cảnh hai-điểm này chứa cả hai điểm ảo: trên trục x và trên trục z.
3D trong Flash
Điều đầu tiên chúng ta nên biết về 3D và Flash, đó là không hề có 3D trong Flash, thậm chí là không hỗ trợ. Các công cụ trên nền Web như Director, Cult3D và Anark vốn đã hỗ trợ 3D, do đó thật là dễ dàng để kết hợp các phần tử 3D vào những thước phim trên nền web. Flash thì lại không như thế, những gì Flash biết chỉ là làm thế nào để hiển thị các kiểu vector lên màn hình và làm thế nào tính toán được các biểu thức toán học. Vì vậy chúng ta có thẻ giả 3D. Thông thường có 2 cách để giả 3D. Thứ nhất là tạo ra một quang cảnh 3D (3D scene) từ một chương trình nằm ngoài Flash, và đưa vào trong quá trình pre-rendered các hoạt ảnh 3D, những thứ mà được thể hiện theo từng frame (khung hình) một. Một cách khác là tạo một thuật toán tính toán 3D động thông qua ActionScript. Chúng ta sẽ tìm hiểu kỹ hơn về cách làm này ngay sau đây.
Trong bước pre-rendered, chúng ta có thể dùng Swift3D và Plasma, chúng là những sản phẩm dùng để vẽ ra một quang cảnh 3D mà bạn muốn xây dựng bên trong chương trình, chúng sẽ được xuất ra thành file swf, file phim như .avi, .mov hay một số định dạng như dãy các hình ảnh, các file này sẽ được đưa vào trong và thao tác bên trong Flash. Hiển nhiên, với file swf, bạn không cần phải sử dụng đến Flash nữa nếu như kết quả của file swf là những gì bạn muốn (ví dụ với Plasma, đó là một môi trường phát triển rất tốt, có thể bạn sẽ không cần phải sử dụng đến Flash để tạo ra một phim Flash với đầy đủ các hàm). Những sản phẩm đó là một giải pháp hay cho các vòng lặp 3D hay phim ảnh, tuy nhiên chúng mang tính chất tuyến tính, tính chất này có thể giới hạn mức độ tương tác mà bạn muốn. Nói cách khác, bạn có thể thực hiện được một số lượng rất ít cá thao tác khi mà phim đã chạy. Mọi thứ nằm trong quá trình pre-rendered và không thể thay đổi trong lúc được chạy bằng Flash player.
Tuy vậy, điều đáng mừng ở đây là mọi kỹ thuật trả về 3D cũng như tính toán trên 3D đều dựa trên toán học, và Flash biết toán! Điều đó có nghĩa là chính ta có thể bắt đầu của mình làm việc, từ sơ khai, sử dụng Flash ActionScript để tạo nên 3D cơ bản sở dụng cơ sở toán học. Chúng ta có thể tạo ra các kiểu vector riêng sử dụng những tính toán và API về qua trình vẽ của Flash. Bản thân Flash không hề biết chút nào về 3D, chúng chỉ nhìn vào các biểu thức toán học và một vài movieClip trên màn hình hoặc vài phép toán vẽ. Cái mà người sử dụng nhìn thấy, nói cách khác là một sự hiển thị các hình ảnh tinh tế thông qua toán học của một hình thức thể hiện 3D.
Chương 3. Bài toán
Mục tiêu của bài toán
Bài toán cung cấp quang cảnh đường phố Hà Nội là bài toán đặt ra nhằm mục đích cung cấp được cho người sử dụng các tính năng tương tự như Google Maps Street View hoặc MapJack, có nghĩa là tạo cho người sử dụng cảm giác như đang có mặt tại địa điểm đó.
Phân tích bài toán
Dựa vào các tính năng của Google Maps Street View và MapJack, ta có thể thấy được 2 chức năng nổi trội, đó là quan sát cảnh vật với một góc 360° và việc di chuyển đến các vị trí khác nhau. Do đó, bài toán của chúng ta có thể được phân tích như sau:
Xây dựng chương trình cho phép người sử dụng nhìn xung quanh 360° tại 1 điểm.
Cho phép người sử dụng dịch chuyển tới các điểm khác nhau (ý tưởng)
Cách lưu trữ CSDL (các file ảnh và file xml nếu có)
Các lý thuyết liên quan
Có nhiều ngôn ngữ lập trình có thể thực hiện được điều này, tuy nhiên trong những ngôn ngữ mà tôi tìm hiểu thì Adobe Flash hoặc Flex Builder cùng với Action Script là công cụ lập trình tốt nhất. Google Maps Street View và MapJack cũng sử dụng công cụ này. Một lý do khác mà tôi chọn công cụ này, đó là chúng tạo ra các tệp tin swf, có thể chạy độc lập, cũng có thể được nhúng (embed) lên một trang web nào đó, chính điều này phù hợp với mục đích của đề tài, đó là cung cấp dịch vụ quan sát quang cảnh đường phố “trên Internet”, với những đoạn mã (code) được viết sẵn, các tệp tin swf dễ dàng nắm bắt và xử lý các sự kiện, cũng như dễ dàng thay đổi đường dẫn tới các tài nguyên bên ngoài thư viện. SWF là viết tắt của ShockWave Flash (hay ShockWay File, ShockWave Format), nhưng do lẫn lộn với ShockWave Director Format, nên hãng Macromedia đã điều chỉnh lại, và từ đó SWF là viết tắt của Small Web Format (hay Small Web File).
Adobe Flash
Adobe Flash hay còn một cách đơn giản là Flash là kỹ thuật đa phương tiện lẫn phần mềm để hiển thị Macromedia Flash Player. Thực ra Macromedia Flash được dùng để ám chỉ chương trình tạo ra các tập tin Flash. Còn từ Flash Player ám chỉ các ứng dụng có nhiệm vụ thi hành hay hiển thị các tập tin Flash đó. Tuy vậy, chữ Flash được dùng để chỉ cả hai chương trình nói trên.
Hình 9. Adobe Flash CS3
Lịch sử Flash
Xuất hiện từ những năm 1993, Adobe Flash (trước đây là Macromedia Flash và trước đó FutureSplash), hay còn gọi một cách đơn giản là Flash, được dùng để chỉ chương trình sáng tạo đa phương tiện (multimedia) lẫn phần mềm dùng để hiển thị chúng Macromedia Flash Player. Chương trình điện toán này được viết và phân phối bởi Adobe Systems (công ty đã mua Macromedia). . Ban đầu, Flash chỉ dựa trên các hiệu ứng ảnh động, những phiên bản đầu tiên thiếu khả năng tương tác với người sử dụng, khả năng tích hợp scripts rất là hạn chế. Phiên bản được sử dụng trong chương trình demo là phiên bản Adobe Flash CS3 và Action Script 3.0; hiện nay hãng adobe đã cho ra mắt phiên bản adbo flash cs4 đi kèm với Adobe Flash Player 10 và Action Script 4.0.
Khả năng lập trình
Những phiên bản gần đây sử dụng ActionScript, ngôn ngữ khá giống với JavaScript. Ngôn ngữ này cho phép người sử dụng tương tác tốt hơn trong các (nút ấn, thanh cuộn, mục lục, tiêu đề …) trong các hiệu ứng động Flash.
Định dạng đóng
Tệp tin Flash, với phần đuôi mở rộng .swf được mã hóa và những tài nguyên ảnh, phim sẽ không thể trích ra được một cách trực tiếp. Tuy nhiên có nhiều phần mềm cho phép trích nội dung. Tuy nhiên, mã .swf là một mã đóng. Tuy nhiên tương lai Adobe có vẻ sẽ đi theo hướng mở cho cộng đồng.
Ứng dụng
Kỹ thuật Flash có thể được đính vào trang Web hoặc sử dụng như một ứng dụng Internet độc lập (Thực thi tệp tin .swf độc lập không cần phần mềm, ngay cả khi ngắt kết nối Internet). Flash được sử dụng đặc biệt cho các nội dung “RichMedia” hoặc “Motion Design”. Chúng ta có thể trích dẫn ra vài ví dụ sau :
Tạo trang Web hoặc trò chơi
Tạo ra các hướng dẫn
Tạo các Video truyền hình hoặc điện ảnh
Các ứng dụng Multimedia
Các diaporama tương tác
Các banner quảng cáo
Truyền chiếu Video qua Internet
Ngoài ra, ứng dụng Flash còn dùng trong nhiểu các phần mềm và định dạng khác, ví dụ :
Flash Video với đuôi mở rộng .flv
FlashPaper, định dạng tương tự Acrobat PDF
Flash Remoting Mx
Flash Communication Sever
Flex builder 3.0
Flex Builder 3.0 là phần mềm thiết kế Web, lập trình Web của Adobe. Hổ trợ tốt đối với các sản phẩm thuộc bộ Adobe Creative Suite 3.
Hình 10. Adobe Flex Builder 3.0
Sự ra đời của web thế hệ mới (web 2.0) hình thành nhu cầu tạo ra các ứng dụng trên nền web, gọi là Rich Internet Application (RIA), có khả năng hoạt động tương tự ứng dụng Desktop truyền thống. Để tạo RIA, các nhà phát triển thường sử dụng 2 giải pháp:
Một là dùng DHTML (gồm HTML, CSS, Javascript) kết hợp với AJAX. Đây là công cụ rất mạnh, tuy nhiên HTML không phải là một công cụ trình diễn, mà là một chuẩn tài liệu. Javascript chưa đủ mạnh, và thiếu chặt chẽ. DHTML thường gặp vấn đề về tương thích với các trình duyệt.
Giải pháp thứ 2 là dùng Flash (công nghệ ảnh động vector của Adobe). Công cụ này ngày nay được cải tiến rất nhiều, có thể làm các ứng dụng RIA khá tốt. Nhưng Flash sinh ra không phải để làm ứng dụng; công cụ lập trình không chuyên nghiệp, giao diện lập trình hạn chế; chi phí để viết ứng dụng rất lớn do thiếu các thành phần giao diện, thư viện hỗ trợ…
Để khắc phục những nhược điểm này, Adobe đưa ra công nghệ Flex - một nền tảng công nghệ, công cụ phát triển ứng dụng RIA chuyên nghiệp. Với Flex, lập trình viên có thể kết hợp giữa phương pháp thiết kế kéo - thả và phương pháp viết mã lệnh, giúp xây dựng từng phần của ứng dụng một cách thích hợp. Sản phẩm của Flex có thể được xuất sang thành ứng dụng Desktop (AIR). Flex hiện gồm 2 thành phần chính là MXML (Macromedia XML) và ActionScript 3.0 (xây dựng theo ECMAScript 4). ActionScript 3.0 giống Javascript, dễ học và có thể lập trình hướng đối tượng.
Để xây dựng RIA, người ta sử dụng Flex Builder kết hợp với công nghệ dịch vụ dữ liệu Flex (Flex Data Services – FDS) và biểu đồ Flex (Flex Charting). Các công nghệ này giúp đơn giản hoá việc phát triển ứng dụng và tạo ra các ứng dụng có chất lượng tốt hơn. Nếu không mua Flex Builder, các nhà phát triển có thể sử dụng công cụ Flex SDK miễn phí và có khá đầy đủ tính năng. Ngoài ưu thế công nghệ, so với các giải pháp thiết kế RIA khác, Flex có sự hậu thuẫn mạnh mẽ vì phát triển trên nền tảng Flash nổi tiếng và được nhiều người sử dụng. Những người dùng Flash nay chuyển lên Flex không cần phải thay một nền tảng khác.
AIR của Adobe giữ vai trò làm môi trường hoạt động cho các chương trình RIA được xây dựng trong các ứng dụng Adobe Flash, HTML, và AJAX. Sản phẩm AIR bao gồm Safari WebKit browser engine, chức năng cơ sở dữ liệu cục bộ SQLite và các hàm APIs.
Với khả năng chạy trên Windows và Macintosh, AIR mang lại cho các ứng dụng trên Web có khả năng thao tác giống với một ứng dụng thông thường chạy trên môi trường desktop như kéo thả, thông tin hệ thống ( system notification ), và khả năng truy xuất file hệ thống cục bộ.
Một ưu điểm của AIR đó chính là các ứng dụng được viết ra để hoạt động với AIR sử dụng cùng một công nghệ như khi xây dựng các ứng dụng Web thông thường, bao gồm có Adobe Flex, Flash,HTML và JavaScript vì vậy sẽ rất thuận lợi cho các nhà phát triển cũng như các lập trình viên.
Hiện nay đã có rất nhiều các công ty lớn đang sử dụng các ứng dụng dạng này ở mức thứ nghiệm, như Nasdaq Stock Market Inc., American Cancer Society, FedEx Corp., … Các công ty này đều cho biết họ sẽ triển khai và sử dụng công nghệ này do không cần phải đào tạo hay tuyển dụng thêm nhân viên.
Action Script
ActionScript là một ngôn ngữ lập trình hướng đối tượng (object-oriented programming language) với các đối tượng như class, interface và packages được dùng cho các văn lệnh kịch bản (script) cho các phim dùng Adobe Flash
Hình 11. Action Script 3.0 Logo
Open Sources
Adobe Flash CS3 và Action Script 3.0 không hỗ trợ 3D, do đó tôi đã tìm hiểu các open source (mã nguồn mở) hỗ trợ 3d cho flash, bao gồm papervision3d, sandy và away3d. Sau một thời gian tìm hiểu, ý tưởng chung của 3 open source này tương đối giống nhau, khác chăng chỉ là các đặt tên các class và bố cục của nó. Tôi đã chọn sử dụng away3d.
Các Class có liên quan của away3d sẽ được nêu trong mục giải quyết bài toán.
Giải quyết bài toán
Như đã nói ở trên, bài toán gồm 3 phần chính cần quan tâm
Xây dựng chương trình cho phép người sử dụng nhìn xung quanh 360° tại 1 điểm.
Cho phép người sử dụng dịch chuyển tới các điểm khác nhau (ý tưởng)
Cách lưu trữ CSDL (các file ảnh và file xml nếu có)
Xây dựng chương trình cho phép người sử dụng nhìn xung quanh 360°
Đây có thể coi là hạt nhân, là phần quan trọng nhất của bài toán.
Trong bài toán “cung cấp quang cảnh đường phố Hà Nội”, đối với việc xử lý nhìn góc 360 độ tại 1 điểm, tạo cảm giác 3d, có nhiều phương pháp thực hiện khác nhau:
Xử lý 1 ảnh 360 độ, cắt ảnh thành nhiều phần, mỗi phần 1 pixel, sau đó bắt sự di chuyển của chuột để đưa vào mảnh nào thích hợp, Action Script hỗ trợ bằng lệnh copyPixel. Yêu cầu: có ảnh 360 độ
Ví dụ:
Hình 12. Ví dụ về ảnh 360°
Tạo một khối lập phương (cube) trong không gian 3d, đưa ảnh vào các mặt trong của khối lập phương đó. Yêu cầu: phải có ảnh thích hợp với từng mặt của khối.
Các phương pháp khác
Cách thứ nhất có thể thực hiện dễ dàng, tuy nhiên kết quả thu được không tạo cho người sử dụng cảm giác 3d, đơn giản chỉ là 1 bức ảnh 2d có thể kéo qua kéo lại.
MapJack cũng sử dụng ảnh 360°, nhưng ảnh được chia thành từng mảnh nhỏ (pieces), có thuật toán xử lý với các mắt cá (fisheyes) và các thuật toán xác định từng pixel nào của ảnh đang nằm ở vị trí nào trên màn hình, và với độ zoom cùng với việc co giãn ảnh (scale) ứng với từng pixel, các pixel càng gần 2 lề của màn hình thì càng đc zoom to, tạo cho ta cảm giác như đang “nhìn”, có nghĩa là càng ở gần thì vật càng lớn (ở 2 lề), càng xa thì vật càng nhỏ (ở giữa). Hạn chế của MapJack là chỉ cho nhìn 360° xung quanh chứ không cho phép nhìn phía trên và bên dưới.
Cách thứ 2 cho kết quả khá khả quan, Google Maps Street View cũng sử dụng cách làm này, tuy nhiên, để có thể chụp được ảnh cho cả 6 mặt của khối lập phương, cần phải có sự đầu tư về phương tiện. Phương tiện đó là 1 chiếc máy ảnh với 6 camera được bố trí để chụp 6 hướng tại một điểm bất kỳ, chụp 6 ảnh tại cùng một thời điểm, các ảnh này khi ghép vào khối lập phương sẽ khớp với nhau, người sử dụng khó có thể phát hiện ra mối nối.
Để phục vụ cho việc sử dụng cách này, hiện nay tôi đã chụp ảnh 4 hướng tại 1 điểm để gán vào 4 mặt xung quanh của khối lập phương, 4 ảnh này có thể được tạo bằng cách chia bức ảnh 360 độ thành 4 phần bằng nhau. Nếu dùng máy ảnh thông thường chụp các bức ảnh tại 1 điểm theo các hướng khác nhau rồi ghép lại thành ảnh 360 độ thì sai số sẽ rất cao, đồng thời khó tìm được nơi nào mà cảnh vật và con người đều bất động cho ta chụp vì khi ta chụp với góc nhìn này, chuyển sang góc nhìn khác để chụp tiếp sẽ mất một khoảng thời gian, con người, phương tiện di chuyển sẽ gây sai số khi ghép nối các ảnh.
Về mặt lý thuyết, như đã nêu ở trên, cách tạo ra ảnh nhìn 360° là sử dụng một khối lập phương với 6 mặt được gán ảnh. Chúng ta cần tạo 1 khối lập phương như vậy, cần 1 container để chứa các đối tượng 3d, cần một điểm nhìn (view point) và 1 camera để quan sát các đối tượng được đưa vào không gian 3D này.
Có một phương pháp khác là là sử dụng ảnh mặt cầu, tưởng tượng bề mặt của quả địa cầu, trong các sách giáo khoa địa lý, để thể hiện bề mặt địa cầu, người ta thường giãn ra thành một bức ảnh trên giấy, tương tự, đây là một ví dụ về ảnh mặt cầu (sphere)
Hình 13. Ảnh mặt cầu
Xử lý việc cho phép người sử dụng dịch chuyển tới các vị trí khác nhau
Việc di chuyển từ điểm này tới điểm khác trong chương trình, đơn giản chỉ là thay đổi hình ảnh hiển thị được gán trên 6 mặt của khối lập phương.
Sử dụng bàn phím: Bắt sự kiện người sử dụng bấm vào một phím nào đó của bàn phím, nếu phím được bấm là lên (hoặc xuống), ta thay đổi đường dẫn tới 6 ảnh ứng với 6 mặt. Khi sử dụng bàn phím, chỉ cho phép dịch chuyển tới điểm liền kề phía trước (hoặc phía sau).
Sử dụng các button có trên màn hình: ta sẽ tạo ra 2 button tiến lên và lùi lại trên màn hình, việc xử lý 2 button này tương tự với viêc xử lý di chuyển từ bàn phím, có nghĩa là chỉ cho phép tiến lên (hoặc lùi lại) tới điểm liền kề với điểm hiện tại.
Đối với 2 cách này, xử lý trên 1 đoạn đường thẳng sẽ cho kết quả tốt, tuy nhiên, đến những đoạn ngã 3 hay ngã tư, hoặc đoạn rẽ vào những con đường nhỏ, vì chỉ có 2 button (và 2 phím )là tiến và lùi, việc thay đổi phương hướng để rẽ sang ngả khác là không thể thực hiện được. Vấn đề cũng xảy ra khi ta nhìn xung quanh, nếu ta quay ngược lại 180°, khi đó tiến lên hoặc lùi lại sẽ ngược??? Do đó ta cần phải kiểm soát về phương hướng và góc nhìn của người sử dụng, để có thể đưa người sử dụng tới đúng vị trí mà họ chọn.
Cách thứ 3, đó là định vị sẵn phương hướng ngay trên bản đồ cho người sử dụng. Google Maps Street View sử dụng 1 đường thằng nằm nối từ điểm hiện tại tới các điểm gần nó nhất, còn MapJack sử dụng các điểm nằm trên đường. Vấn đề đặt ra ở đây là “trục” làm thế nào để nằm được trên đường, khi ta nhìn xung quanh thì trục cũng phải di chuyển theo. Vì tại mỗi điểm thì “trục” sẽ khác nhau (có thể cong sang hướng khác, cũng có thể đến ngã rẽ), do đó việc thiết lập “trục” cho từng điểm là bất khả thi. Ý tưởng ở đây chính là: ta thiết kế một trục đường dựa trên hình dạng con đường thật, trên trục ta định vị tọa độ cho các điểm mà ta chọn làm điểm quan sát (view point), tại điểm nào ta sẽ load ảnh tương ứng với điểm ấy. “Trục” phải được đưa vào trong không gian 3D, với độ quay thích hợp với độ quay của khối lập phương để “trục” không bị lệch ra khỏi đường. Đối với MapJack, do có các điểm xanh
Các file đính kèm theo tài liệu này:
- Nghiên cứu phát triển hệ thống thử nghiệm cung cấp quang cảnh đường phố hà nội.doc