Khóa luận Kỹ thuật xây dựng đồ họa 3D dựa trên công nghệ flash dành cho thiết bị nhúng

ĐẠI HỌC QUỐC GIA HÀ NỘI  
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ  
Đinh Anh Thái  
KỸ THUẬT XÂY DỰNG ĐỒ HỌA 3D DỰA TRÊN CÔNG  
NGHỆ FLASH DÀNH CHO THIẾT BỊ NHÚNG  
KỸ THUẬT HIỂN THỊ FLASHVIDEO DỰA TRÊN GNASH  
KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY  
Ngành: Công nghệ phần mềm  
Cán bộ hướng dẫn: PGS. TS. Nguyễn Việt Hà  
ThS. Vũ Quang Dũng  
HÀ NỘI-2010  
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 tới các thầy giáo PGS. TS. Nguyễn  
Việt Hà- phó Hiệu trưởng trường Đại học Công nghệ, ĐHQGHN và ThS. Vũ Quang  
Dũng- Giảng viên bộ môn Công nghệ phần mềm, khoa Công nghệ thông tin, trường Đại  
học Công nghệ, ĐHQGHN. Các thầy đã hướng dẫn tôi tận tình trong suốt quá trình thực  
hiện khóa luận cũng như trong suốt năm học vừa qua.  
Tôi xin bày tỏ lòng biết ơn tới các thầy, cô giáo trong Khoa Công nghệ thông tin,  
Trường Đại học Công nghệ, ĐHQGHN. Các thầy cô đã tận tình dạy bảo, chỉ dẫn tôi và  
luôn tạo điều kiện tốt nhất cho chúng tôi học tập trong suốt quá trình học đại học. Các  
thầy cô đã tận tình giúp đỡ cho tôi để hoàn thành khóa luận tốt nghiệp này.  
Tôi xin cám ơn phòng thí nghiệm Công nghệ phần mềm Toshiba-Coltech, mô hình  
liên kết giữa trường Đại học Công nghệ và Tập đoàn Toshiba, đã cho tôi những định  
hướng nghiên cứu hiện đại, theo kịp xu hướng phát triển của thế giới.  
Tôi xin cảm ơn các bạn sinh viên trong phòng thí nghiệm đã cho tôi những ý kiến  
đóng góp giá trị khi thực hiện đề tài này.  
Cuối cùng tôi xin gửi tới bố mẹ và toàn thể gia đình lòng biết ơn và tình cảm yêu  
thương sâu sắc.  
Hà Nội, 15 tháng 5 năm 2010  
Sinh viên  
Đinh Anh Thái  
ii  
Tổng quan  
Tổng quan  
Khóa luận này mang tới những hiểu biết, kỹ thuật cơ bản vể cách thể hiện FlashVideo  
dựa trên Gnash nhằm hướng tới mục tiêu của dự án tại phòng thí nghiệm Toshiba-Coltech  
về "3D Visualization Framework". Trong giai đoạn đầu tìm hiểu của dự án, chúng tôi đã  
tìm hiểu về máy ảo ActionScript và một số kỹ thuật khác liên quan tới công nghệ Adobe  
Flash, cách thể hiện đối tượng đồ họa 3D thông qua thư viện nguồn mở PaperVision 3D.  
Abstract  
In this thesis, we present our investigation in Flash technology and its details. This  
thesis is a part of jointed project of Toshiba-Coltech laboratory in 3D Visualization  
framework, that takes us to approach the technology from learning new techniques of  
ActionScript virtual machine and 3D graphics with OpenGLES 2.0 environment. The  
first part is to be done by me - Dinh Anh Thai, and the other will be done by Le Viet  
Son.  
iii  
Tóm tắt nội dung  
Công nghệ 3D ngày càng được sử dụng rộng rãi và phổ biến tới người sử dụng, từ  
người dùng phổ thông tới những chuyên gia công nghệ. Hiện nay, công nghệ 3D đã và  
đang phát triển mạnh nhằm mang tới một thể hiện đồ họa sống động, gần với cuộc sống  
thực cho con người. Cùng với sự định hướng của Tập đoàn Toshiba, phòng thí nghiệm  
công nghệ phần mềm Toshiba-Coltech cũng hướng tới nghiên cứu công nghệ này- Kỹ  
thuật hiển thị đồ họa 3D trên hệ thống nhúng.  
Sau quá trình lựa chọn công nghệ để thực hiện đồ họa 3D trên hệ thống nhúng,  
chúng tôi hướng tới sử dụng công nghệ Flash- Công nghệ độc quyền cung cấp bởi Adobe  
Systems Incorprated. Flash với ưu điểm gọn nhẹ, dễ dàng thực thi trên nhiều nền tảng,  
môi trường khác nhau và được sử dụng phổ biến trên rất nhiều hệ thống khác nhau: hệ  
thống y tế, PC, thiết bị cầm tay, đồ gia dụng. . .  
Adobe Flash( Tên gọi khác: Macromedia Flash) là một công nghệ chứa nền tảng  
đa phương tiện được sử dụng để tạo hoạt họa, video, và các tương tác gồm MacroMedia  
Flash- Chương trình tạo ra các tập tin Flash, và Flash Player- Ứng dụng có nhiệm vụ chơi  
và hiển thị các tập tin Flash. Flash dùng kỹ thuật đồ họa vector và đồ họa điểm(raster  
graphics). Flash đi kèm với cùng một ngôn ngữ kịch bản riêng gọi là ActionScript,  
ActionScript được sử dụng để tạo các tương tác, các hoạt cảnh, hành động trong phim  
Flash.  
Trong thời gian thực hiện khóa luận, chúng tôi đã cơ bản nắm được kỹ thuật hiển thị  
và thực thi đồ họa, cách xử lý sự kiện để hiển thị các đối tượng trong tệp tin Flash, cách  
để chương trình chơi Flash dùng để thực thi tệp tin SWF. Dựa trên một số mã nguồn mở,  
tôi đưa ra giải pháp thể hiện 3D trên phần mềm nguồn mở Gnash kết hợp với Tamarin.  
Hiện tại, Gnash chỉ hỗ trợ thực thi đồ họa 2D cho tệp tin Flash và Tamarin là máy ảo  
ActionScript nguồn mở được Adobe cùng với Mozilla cung cấp cho cộng đồng nhưng  
không cung cấp kèm theo cách hiển thị đồ họa cho tệp tin Flash.  
Để thực hiện giải pháp, chúng tôi đề xuất mô hình cho việc kết hợp Gnash với  
Tamarin và cùng với đó là phương pháp thực thi. Bằng việc thêm máy ảo mới, Gnash sẽ  
hỗ trợ tốt hơn cho ActionScript 3 và qua đó sẽ hỗ trợ thực thi hiệu quả những phiên bản  
iv  
sau của SWF( phiên bản 9 và 10). Trong ActionScritp 3 đã hỗ trợ những đối tượng cơ  
bản, hiệu ứng đơn giản cho đồ họa 3D, do đó với mô hình mới này, Gnash sẽ thực thi  
được đồ họa 3D. Bằng việc sử dụng thư viện đồ họa 3D hỗ trợ cho ActionScript 3, hoàn  
toàn có thể tạo được những hiệu ứng, phim Flash 3D phức tạp.  
Trong khóa luận này, tôi đã thực hiện một chương trình để thể hiện kỹ thuật hiển  
thị FlashVideo dựa vào Gnash đối với tệp tin SWF và hiển thị tiến trình xử lý các đối  
tượng ActionScript.  
v
Mục lục  
1 Đặt vấn đề  
1
1
2
3
1.1 Thực trạng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
1.2 Hướng tiếp cận . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
1.3 Phạm vi nghiên cứu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
2 Cơ sở lý thuyết  
4
4
4
5
6
8
8
8
2.1 ActionScript - Flash - SWF . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.1.1 Ngôn ngữ ActionScript . . . . . . . . . . . . . . . . . . . . . . . .  
2.1.2 Công nghệ Flash . . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.1.3 Tệp tin Flash - SWF . . . . . . . . . . . . . . . . . . . . . . . . .  
2.2 ActionScript Virtual Machine( AVM) . . . . . . . . . . . . . . . . . . . .  
2.2.1 Giới thiệu AVM . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.2.2 Kiến trúc của AVM . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.2.3 Bộ dọn dẹp bộ nhớ AVM . . . . . . . . . . . . . . . . . . . . . . . 11  
2.2.4 Bộ xác thực AVM . . . . . . . . . . . . . . . . . . . . . . . . . . 12  
2.2.5 Bộ thông dịch AVM . . . . . . . . . . . . . . . . . . . . . . . . . 13  
2.2.6 AVM Just-in-Time Compiler(JIT) . . . . . . . . . . . . . . . . . . 13  
2.3 Tamarin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14  
2.3.1 Giới thiệu Tamarin . . . . . . . . . . . . . . . . . . . . . . . . . . 14  
2.3.2 Mục đích dự án Tamarin . . . . . . . . . . . . . . . . . . . . . . . 15  
2.3.3 Tamarin central . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16  
2.3.4 Tamarin redux . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16  
2.4 PaperVision 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16  
vi  
MỤC LỤC  
2.4.1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16  
2.4.2 Đặc điểm PaperVision 3D . . . . . . . . . . . . . . . . . . . . . . 17  
2.5 Gnash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17  
2.5.1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18  
2.5.2 Kiến trúc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18  
2.5.3 Đặc điểm của Gnash . . . . . . . . . . . . . . . . . . . . . . . . . 21  
3 Bài toán  
22  
3.1 Cơ sở . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22  
3.2 Giải pháp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23  
3.2.1 Khái quát . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23  
3.2.2 Nội dung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23  
3.3 Kỹ thuật hiển thị Flash Video . . . . . . . . . . . . . . . . . . . . . . . . . 24  
3.3.1 Cấu trúc dữ liệu lưu trữ đối tượng hiển thị . . . . . . . . . . . . . 24  
3.3.2 FlashVideo với các sự kiện . . . . . . . . . . . . . . . . . . . . . . 26  
3.4 Áp dụng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27  
3.4.1 Thực thi đồ họa 3D trên thiết bị nhúng . . . . . . . . . . . . . . . 29  
3.4.2 Hiển thị 3D trên Gnash dựa trên PaperVision 3D . . . . . . . . . 30  
4 Thực nghiệm  
31  
4.1 Các so sánh, đánh giá . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31  
4.1.1 LightSpark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31  
4.1.2 Tamarin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32  
4.1.3 Kiểm nghiệm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32  
4.2 Demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33  
5 Kết luận  
Tài liệu tham khảo  
35  
36  
vii  
Danh sách hình vẽ  
1.1 Ví dụ về hiển thị trực quan 3D . . . . . . . . . . . . . . . . . . . . . . . .  
2
2.1 Cấu trúc file SWF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
2.2 Ví dụ các tag có trong tập tin abc sau khi giải mã(Flash-SWF) . . . . . .  
2.3 Minh họa cho nội dung tệp tin SWF . . . . . . . . . . . . . . . . . . . . .  
2.4 Kiến trúc AVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  
6
7
8
9
2.5 Quá trình chuyển mã của công nghệ Flash . . . . . . . . . . . . . . . . . . 10  
2.6 Cơ chế của bộ dọn dẹp bộ nhớ . . . . . . . . . . . . . . . . . . . . . . . . 12  
2.7 Các quá trình của AVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14  
2.8 Kiến trúc Tamarin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15  
2.9 Các thành phần thể hiện đồ họa 3D . . . . . . . . . . . . . . . . . . . . . 17  
2.10 Các thành phần trong Gnash . . . . . . . . . . . . . . . . . . . . . . . . . 19  
2.11 Quá trình xử lý qua các thành phần Gnash . . . . . . . . . . . . . . . . . . 20  
3.1 Cấu trúc của DisplayList . . . . . . . . . . . . . . . . . . . . . . . . . . . 25  
3.2 FlashVideo với các sự kiện . . . . . . . . . . . . . . . . . . . . . . . . . . 26  
3.3 Luồng xử lý đối tượng đồ họa trong Gnash . . . . . . . . . . . . . . . . . 27  
3.4 Sơ đồ kế thừa as_object . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28  
3.5 Mô hình Gnash thực thi đồ họa 3D . . . . . . . . . . . . . . . . . . . . . . 29  
4.1 Biểu đồ so sánh kết quả thực thi . . . . . . . . . . . . . . . . . . . . . . . 33  
4.2 Luồng xử lý Video của Flash- Gnash Player . . . . . . . . . . . . . . . . . 34  
viii  
Bảng từ viết tắt  
Từ viết tắt  
3D  
Từ hoặc cụm từ  
3 Dimension(ba chiều)  
ActionScript Byte Code  
ActionScript(Ngôn ngữ kịch bản của công nghệ Flash)  
Anti-Grain Geometry(Engine thể hiện đồ họa 2D)  
Application Programming Interface  
ActionScript Virtual Machine( Máy ảo ActionScript)  
Graphics User Interface(Giao diện người dùng đồ họa)  
Low-Level Intermediate Representation  
Low-Level Virtual Machine  
Macromedia Intermidiate Representation  
Open Graphics Library(Thư viện đồ họa 2D và 3D)  
abc  
AS  
AGG  
API  
AVM  
GUI  
LIR  
LLVM  
MIR  
OpenGL  
OpenGLES OpenGL Embeded Systems(Thư viện đồ họa OpenGL cho hệ thống nhúng)  
PC  
Personal Computer( Máy tính cá nhân)  
PaperVision 3D (Thư viện Flash 3D)  
Just-in-time  
PP3D  
JIT  
SWF  
VM  
ZCT  
Small Web Format hoặc Shockwave Flash  
Virtual Machine( Máy ảo)  
Zero Count Table  
Bảng 1: Bảng từ viết tắt  
ix  
CHƯƠNG 1  
Đặt vấn đề  
1.1 Thực trạng  
Ngày nay, cùng với sự phát triển của khoa học kỹ thuật công nghệ, thiết bị điện tử  
đã trở thành công cụ hỗ trợ hữu ích trong công việc của con người. Những thiết bị này  
được sản xuất, sử dụng trong hầu khắp các lĩnh vực của xã hội, từ sản xuất công nghiệp  
tới sản xuất nông nghiệp và cung cấp dịch vụ. Các thiết bị điện tử làm cuộc sống con  
người trở nên đơn giản, thuận tiện hơn, tăng năng suất, hiệu quả.. . Những thiết bị điện tử  
này, từ những thiết bị lớn như robot trong công nghiệp, những siêu máy tính. . . tới những  
thiết bị nhỏ bé, gắn bó với từng cá nhân như máy tính cá nhân, PDA.. . đã hỗ trợ cho  
người sử dụng một cách hiệu quả. Do nhu cầu của con người luôn luôn thay đổi, những  
thiết bị này cũng thay đổi không ngừng, liên tục đổi mới, đưa ra những đặc điểm mới để  
hỗ trợ cho nhu cầu đó.  
Thiết bị điện tử hỗ trợ cá nhân được sản xuất với mục đích cung cấp cho số lượng  
lớn người dùng, và trong số này phần lớn là người dùng phổ thông. Vì vậy, thiết bị đó  
phải dễ sử dụng, với giao diện thân thiện. Trong những năm gần đây, kỹ thuật nền tảng  
sử dụng đồ họa 2D đã có những bước tiến mới với sự xuất hiện của đồ họa 3D đã mang  
đến những thiết bị đầu tiên sử dụng đồ họa 3D được sử dụng rộng rãi như Tivi 3D, điện  
thoại di động 3D... Sự phát triển của công nghệ này nhằm nhằm mang tới sự thỏa mãn  
nhu cầu ngày càng cao của người dùng về thẩm mỹ, về chức năng. . . của sản phẩm.  
Một vấn đề đối với thiết bị hỗ trợ cá nhân nói riêng và thiết bị nhúng nói chung:  
năng lực hạn chế của bộ xử lý, dung lượng lưu trữ của bộ nhớ và bộ nhớ thực thi. . . Những  
ứng dụng thực thi trên PC nhưng không thể thực thi trên thiết bị nhúng nên những kỹ  
thuật xử lý hình ảnh thông thường từ 2D sang 3D áp dụng cho PC có thể sẽ không được  
áp dụng đúng đắn với hệ nhúng. Những đặc điểm này dẫn đến nhu cầu phát triển hệ  
thống đồ họa không phụ thuộc nền tảng( hệ điều hành, năng lực xử lý.. . ) và đặc biệt là  
tính gọn nhẹ, đơn giản và có khả năng tạo những hiệu ứng 3D một cách mềm mại, uyển  
1
CHƯƠNG 1: ĐẶT VẤN ĐỀ  
chuyển. Trước nhu cầu đó, chúng tôi đã lựa chọn công nghệ Flash, một công nghệ hiện  
nay được sử dụng rất phổ biến vì tính trực quan, tính gọn nhẹ và có khả năng hỗ trợ khá  
tốt đồ họa 3D.  
1.2 Hướng tiếp cận  
Trong khuôn khổ hợp tác giữa trường Đại học Công nghệ- ĐHQGHN và tập đoàn  
Toshiba, trung tâm công nghệ phần mềm thuộc tập đoàn đã đưa ra bốn mô hình sử dụng  
các kỹ thuật đồ họa 3D khác nhau: Compiz Fusion( C/C++), Flash, Qt và Wide Studio.  
Sau khi so sánh các đặc điểm, ưu và nhược điểm của từng kỹ thuật, trung tâm đã thống  
nhất dùng Flash để thực thi đồ họa 3D với sự hỗ trợ của PaperVision 3D[1].  
Với mục đích định hướng nghiên cứu bắt kịp với trình độ thế giới, được sự hỗ trợ  
từ trung tâm, chúng tôi tiến hành nghiên cứu kỹ thuật xây dựng 3D cho thiết bị nhúng,  
đây là xu hướng mới đang được phát triển khá mạnh trên thế giới trong thời điểm này.  
Mục đích của quá trình nghiên cứu là xây dựng một chương trình khung1 hiển thị  
giao diện người dùng đồ họa 3D dựa trên công nghệ Flash, được thực thi bởi chương  
trình chơi Flash2 hỗ trợ OpenGLES 2.0. Hướng nghiên cứu này còn bao gồm thuật toán  
hiển thị 3D trực quan dựa trên những thư viện 3D và thư viện hiển thị trực quan trên  
công nghệ Flash đã có sẵn( PP3D[1], Flare[2]. . . ). Cùng với đó, dự án cần nghiên cứu  
việc phân tích dữ liệu để hiển thị trực quan 3D dựa trên phương pháp ước lượng. Mục  
tiêu cần đạt được của dự án là cung cấp một chương trình khung cho việc hiển thị dữ liệu  
trực quan 3D dựa trên Flash, cùng với những hiệu ứng sinh động, chạy mượt mà trên hệ  
thống nhúng sử dụng OpenGLES, thực thi bởi chương trình chơi Flash.  
Hình 1.1: Ví dụ về hiển thị trực quan 3D  
Nhiệm vụ  
1Framework  
2Flash Player  
2
CHƯƠNG 1: ĐẶT VẤN ĐỀ  
Đối với thiết bị nhúng việc tạo ra giao diện đồ họa 3D từ OpenGLES 1.1/2.0 trực  
tiếp là rất phức tạp, vì lẽ đó chúng ta cần phải xây dựng một chương trình khung để giảm  
thiểu sự phức tạp này. Ngoài ra, một vài sản phẩm được cung cấp bởi Toshiba đã được  
cài đặt ứng dụng Flash như điện thoại di động, tivi số, một số ứng dụng phân tích dữ  
liệu. . .  
Nhưng các thiết bị của Toshiba, những ứng dụng được cài đặt chỉ mới hỗ trợ hoạt  
họa 2D và cần phải được cải tiến để thực thi 3D trên Flash Lite. Toshiba đã có một số  
ứng dụng về phân tích dữ liệu trực quan và bây giờ cần phải cải tiến để phù hợp với công  
nghệ Flash.  
Trong thời gian nghiên cứu hiện tại, chúng tôi hướng tới mục tiêu xây dựng một hệ  
thống máy ảo riêng để thực thi Flash và có hỗ trợ 3D, nhằm hướng tới mục tiêu thực thi  
trên thiết bị nhúng. Để tiến tới mục đích này, chúng tôi tiến hành tìm hiểu chương trình  
chơi Flash mã nguồn mở Gnash, thư viện Flash 3D: Papervision 3D và đưa ra giải pháp  
cho việc thực thi trên thiết bị nhúng.  
Để thực hiện được mục đích trên, nhằm hướng tới mục tiêu xây dựng đồ họa 3D  
cho thiết bị nhúng, trong khuôn khổ khóa luận này tập trung chủ yếu vào việc xác định,  
tìm hiểu và đưa ra kỹ thuật hiển thị Flash trước mắt là trên hệ thống PC, và sau đó sẽ là  
hệ thống nhúng dựa trên bộ xử lý ARM.  
1.3 Phạm vi nghiên cứu  
Trong giai đoạn tìm hiểu đầu, chúng tôi cần phải tìm hiểu chương trình chơi Flash  
nguồn mở- Gnash đưa lên trên thiết bị nhúng và can thiệp vào chương trình này sao cho  
có thể thực thi hầu hết các phiên bản của ngôn ngữ ActionScript( tương ứng là các phiên  
bản của SWF) và xử lý đồ họa 3D trên thiết bị nhúng.  
Trong khuôn khổ khóa luận này, tôi có nhiệm vụ tìm hiểu kỹ thuật hiển thị FlashVideo,  
luồng xử lý trong Gnash, cơ chế thực thi phim Flash và đưa ra giải pháp thực hiện đồ họa  
3D vào Gnash cũng như chuyển chương trình chơi Flash lên hệ thống nhúng. Nhiệm vụ  
còn lại tìm hiểu cách thức xây dựng đối tượng Flash 3D, nghiên cứu biện pháp để Gnash  
thực thi Flash 3D dựa vào PaperVision 3D được giao cho bạn Lê Viết Sơn.  
Do đây là một vấn đề phức tạp liên quan đến nhiều lĩnh vực: đồ họa máy tính, kỹ  
thuật xử lý Flash, công nghệ chạy run-time, bộ thông dịch.. . , thời gian thực hiện khóa  
luận này là không đủ nên kết quả đạt được chưa được như mong đợi của mục tiêu đề ra.  
Trong thời gian tiếp theo, tôi sẽ tiếp tục hoàn thiện đề tài này để đạt được kết quả mong  
muốn.  
3
CHƯƠNG 2  
Cơ sở lý thuyết  
Flash được biết đến chủ yếu trên các trang Website với các thể hiện như: quảng cáo,  
chiếu phim trực tuyến, tạo các thành phần cho trang Web cũng như tạo các game tương  
tác. . . bởi sự gọn nhẹ, tính linh hoạt và sinh động. Flash là một công nghệ được phát triển  
bởi Macromedia và hiện nay được biết tới như một sản phẩm của Adobe Systems. Với  
Flash, Macromedia và Adobe đưa ra một số kỹ thuật được áp dụng cho công nghệ này  
như máy ảo, ngôn ngữ kịch bản hành động( ActionScript), tệp tin SWF, chương trình  
chơi Flash( Flash Player)...  
Do đặc điểm đó, Flash có những kỹ thuật riêng để thể hiện đối tượng đồ họa, đặc  
biệt là đồ họa 3D. PaperVision 3D là một thư viện hỗ trợ đồ họa 3D cho Flash. Với những  
cơ sở lý thuyết được giới thiệu, chúng tôi tiến tới xây dựng một hệ thống riêng độc lập  
với công nghệ Adobe Flash( gồm máy ảo AS, quá trình biên dịch và thực thi) trong thời  
gian tới.  
2.1 ActionScript - Flash - SWF  
2.1.1 Ngôn ngữ ActionScript  
ActionScript[3] là một ngôn ngữ lập trình hướng đối tượng1 với các đối tượng như  
class, interface và packages được dùng như lệnh kịch bản(script) cho các phim dùng  
Adobe Flash.  
ActionScript là ngôn ngữ kịch bản dựa trên ECMAScritpt[4]. ActionScript được sử  
dụng chính cho mục đích phát triển các thành phần trên Website và thi hành trên  
ứng dụng Adobe Flash Player( Tệp tin Flash- phần mở rộng có dạng SWF là một  
dạng được sử dụng trên các trang web).  
1Object-oriented programming language  
4
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
ActionScritpt được thiết kế để điều khiển những hiệu ứng hình ảnh vector 2D đơn  
giản được tạo bởi AdobeFlash. Những phiên bản sau này có thêm chức năng cho  
phép tạo trò chơi trên web và vô vàn những ứng dụng Internet với dữ liệu media như  
âm thanh và hình ảnh.  
ActionScript bắt đầu là một ngôn ngữ kịch bản cho công cụ Macromedia Flash và  
hiện tại được phát triển bởi Adobe Systems như là Adobe Flash. Những phiên bản  
ban đầu của Flash chỉ cung cấp giới hạn những đặc điểm tương tác như những hành  
động đơn giản gồm play, stop, getURL, gotoAndPlay  
Tphiên bản Flash 4 được phát hành năm 1999, tập hợp những hành động đơn giản  
trở thành ngôn ngữ kịch bản nhỏ với những khả năng mới như cho phép khai báo  
biến, phương thức, câu lệnh rẽ nhánh, lặp.  
2.1.2 Công nghệ Flash  
Flash[5] là một công nghệ nền đa phương tiện thường được sử dụng để tạo hoạt  
họa, video, tương tác với các trang web, và để phát triển những ứng dụng trên Internet(  
trò chơi, quảng cáo... ). Flash sử dụng kỹ thuật đồ họa vector và đồ họa điểm để tạo hoạt  
họa cho chữ, hình vẽ, ảnh, hỗ trợ thực thi luồng âm thanh, video. Nó chứa bên trong một  
ngôn ngữ hướng đối tượng gọi là ActionScript. Để hiển thị nội dung Flash, chúng ta phải  
sử dụng một số phần mềm chơi Flash như Adobe Flash Player hoặc Flash Lite trên thiết  
nhúng.  
Flash được giới thiệu lần đầu vào năm 1996 bởi Macromedia và hiện tại là Adobe  
Systems. Tiền thân của ứng dụng Flash là SmartSketch- Một ứng dụng cho máy tính  
dùng bút chạy trên hệ điều hành Penpoint OS phát triển bởi Jonathan Gay, sau đó được  
đưa vào phát triển trên hệ điều hành Microsoft Windows Mac OS.  
Cho đến khi Internet trở nên phổ biến SmartSketch được biết tới với tên gọi mới là  
FutureSplash. Năm 1995, SmartSketch được thay đổi với đặc điểm hoạt họa frame-by-  
frame 2 với tên gọi mới là FutureSplash Animator.  
Năm 1996, Macromedia đưa ra tên gọi mới là Flash, sự viết tắt của "Future" và  
"Splash". Tệp tin Flash được gọi với tên Shockwave Flash và có phần mở rộng là .swf.  
Flash là một công nghệ đóng hoàn toàn, được độc quyền sở hữu 100% bởi Adobe  
Systems, một công ty công nghệ lớn của Mỹ với những sản phẩm nổi tiếng như: Adobe  
PhotoShop, Adobe Reader, Adobe Creative Suite. . . Các công nghệ của hãng được sử  
dụng rộng rãi trên toàn thế giới như chương trình đọc tài liệu Adobe Reader - đọc tệp  
tin .pdf3, chương trình chơi Flash được bổ sung vào trình duyệt web như Adobe Flash  
2Khung hình nối tiếp khung hình  
3Portable Document File, một định dạng tài liệu rất phổ biến trên Internet  
5
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
Player tới những sản phẩm chuyên dụng như Adobe Creative Suite.. .  
Do được sử dụng rộng rãi trên toàn thế giới, Adobe phổ biến với số lượng khá lớn  
các tài liệu hướng dẫn sử dụng, hướng dẫn thi hành, cơ chế.. . Tuy nhiên, những tài liệu  
này chủ yếu hướng tới đối tượng là người sử dụng cuối cùng( người dùng sản phẩm của  
hãng) và không hướng tới mục đích cung cấp tài liệu đặc tả kỹ thuật cho những người  
phát triển dựa trên công nghệ này. Việc một sản phẩm được phổ biến một cách rộng rãi  
không đồng nghĩa với việc đó là công nghệ mở. Nhất là khi những sản phẩm này được  
kiểm soát hoàn toàn và chỉ được giới thiệu bởi một mình Adobe. Họ có quyền quyết định  
tới tương lai của công nghệ này. ..  
2.1.3 Tệp tin Flash - SWF  
SWF( ShockWave Flash)[6] hoặc tên gọi khác là Small Web Format hay Flash  
movies hoặc Flash games. Tệp tin Flash có phần mở rộng là .swf và có thể được sử dụng  
như một thành phần thêm vào trên web.  
SWF có thể được tạo ra từ một vài sản phẩm của Adobe như Flash, FlexBuilder(  
hoặc dạng MXMLC). Mọi tệp SWF đều bắt đầu bằng phần Header, với 3 byte dấu tiếp  
theo là những tag chứa các thông tin như định dạng, định nghĩa dữ liệu, các hằng. . . được  
đặc tả chi tiết trong tài liệu mô tả SWF[6]. Thuộc tính FileAttributes chỉ cần thiết cho  
SWF8 và các phiên bản sau( hình vẽ 2.1).  
Hình 2.1: Cấu trúc file SWF  
Trong file SWF, các tag có thể có là tag điều khiển(Control Tag) tag định  
nghĩa(Defination Tag).  
Tag định nghĩa định nghĩa một đối tượng được biết đến như là đặc điểm của đối  
tượng được lưu trữ trong danh sách thuật ngữ.  
Tag điều khiển chứa nhiều đặc điểm và cách điều khiển luồng của file, quản lý một  
vài mặt tổng thể của files, frames và playback của files SWF như setBackground-  
Color, FrameLabel.  
Flash Player xử lý tất cả các tags của file SWF cho đến khi một tag gọi là ShowFrame  
được gọi tới. Tại thời điểm này, danh sách hiển thị được chuyển tới màn hình và  
Flash Player tiếp tục gọi frame tiếp theo để xử lý.  
6
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
Hình vẽ 2.2 là các tag có trong tập tin SWF sau khi được phân tích thành dạng  
XML4. Chúng ta có thể dễ dàng nhận thấy cấu trúc của tệp tin SWF bao gồm tuần tự các  
tag nối tiếp nhau bao gồm các thuộc tính, các giá trị.. . Ví dụ đối với thẻ Header có các  
thuộc tính định nghĩa cho phim Flash: số lượng Frame( Frame count), tỉ lệ Frame( Frame  
rate), tiếp đó là một danh sách các tag nối tiếp nhau như File Attributes( các thuộc tính  
của file SWF: chứa ABC tag hay DoAction tag, chứa dữ liệu Meta: hasMetaData... ).  
Với ví dụ này ta có thể thấy đây là tệp tin được sinh ra từ AS 3 vì chứa DoABC tag,  
tiếp theo đó là các thông tin định nghĩa các đối tượng hằng( chuỗi, số nguyên.. . ), các  
QName5- định nghĩa một định danh và thuộc tính mới, định nghĩa các đối tượng, các  
phương thức trong AS...  
Hình 2.2: Ví dụ các tag có trong tập tin abc sau khi giải mã(Flash-SWF)  
Hình vẽ 2.3 thể hiện một phần của nội dung tệp tin nhị phân SWF ứng với mô hình  
được mô tả trong hình vẽ 2.1.  
4Ngôn ngữ đánh dấu mở rộng  
5qualified name  
7
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
Hình 2.3: Minh họa cho nội dung tệp tin SWF  
Qua quá trình phân tích này, chúng ta dễ dàng nhận thấy sự tương đồng của hình 2.3 với  
hình 2.1.  
2.2 ActionScript Virtual Machine( AVM)  
Để tệp tin Flash có thể thực thi trên mọi nền tảng khác nhau mà không phụ  
thuộc vào hệ điều hành( Windows, Linux, Solaris, MacOS. . . ) cũng như kiểu PC(Mac,  
Solaris. . . ), Flash đưa ra giải pháp dùng máy ảo ActionScript( ActionScript Virtual  
Machine- AVM). Cũng giống như công nghệ Java của Sun với máy ảo Java, máy ảo  
ActionScript thực thi qua hai giai đoạn: dịch mã trung gian và thông dịch thành mã thực  
thi trên máy vật lý.  
2.2.1 Giới thiệu AVM  
AVM cài đặt bên trong một cơ chế gọi là run-time compiler6 để chuyển những  
chỉ lệnh từ AVM tới những chỉ lệnh xử lý đặc biệt của bộ vi xử lý(processor-specific  
intructions).  
Máy ảo AVM được thiết kế để thực thi mã và những phương thức thân chứa khái  
niệm của những thông tin về phương thức(method infomation), vùng dữ liệu cục bộ(a  
local data area), vùng chứa những hằng số, vùng heap với cơ chế non-premititve cho đối  
tượng dữ liệu được tạo ra trong lúc thực thi và một môi trường thực thi run-time( hình vẽ  
2.4[7]).  
2.2.2 Kiến trúc của AVM  
Đầu vào của máy ảo ActionScript là file có phần mở rộng là abc7, sau khi qua quá  
trình phân tích của tệp tin .swf. Quá trình .abc parser để phân tích những thành phần  
của file .abc thành những mã bytecode để truyền vào cho quá trình tiếp theo là xác thực  
bytecode(Bytecode Verifier). Tại đây sẽ được chuyển sang quá trình chạy JIT nếu mã  
bytecode còn chứa những chỉ lệnh phức tạp và quá trình thông dịch khi mã bytecode chỉ  
6Biên dịch lúc chạy  
7Dùng abcdump để tạo file .abc  
8
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
Hình 2.4: Kiến trúc AVM  
chứa những chỉ lệnh đã có sẵn. Kết thúc quá trình này, máy ảo sẽ chuyển sang quá trình  
thực thi đối tượng trên hệ thống thật(Runtime System), chuyển toàn bộ chỉ lệnh từ máy  
ảo sang chỉ lệnh cho bộ xử lý máy thật và được quản lý bởi trình quản lý bộ nhớ và bộ  
dọn dẹp bộ nhớ.  
Để một chương trình Flash được thực thi trên thiết bị sử dụng, chúng phải qua một  
quá trình chuyển mã gồm nhiều giai đoạn( hình vẽ 2.5). Ban đầu, người phát triển mã  
hóa chương trình dưới dạng AS, sau đó chương trình biên dịch FlexSDK cho ra mã trung  
gian chứa trong file .abc và MIR. Các mã trung gian với mục đích chính để chương trình  
được sinh ra không phụ thuộc môi trường, phương thức thực thi cũng như vận chuyển  
dễ dàng giữa các môi trường như truyền qua mạng, các hệ thống Windows, Linux, Mac  
OS. . . Tcác mã trung gian này, máy ảo với bộ biên dịch JIT mới bắt đầu sinh ra mã thật  
tùy thuộc vào hệ thống đang cài đặt bộ biên dịch này.  
MIR8 là một dạng mã được dùng cho máy ảo Flash, mã này độc lập với mã máy  
tính vật lý. Ưu điểm của MIR là đơn giản, gần với mã máy vật lý, là thành phần trung  
gian giữa bytecode và JIT, là đầu vào của JIT. MIR được thiết kế để tối ưu quá trình biên  
dịch giữa mã chương trình với mã máy, với MIR, người lập trình không cần quan tâm tới  
môi trường thực thi của chương trình cuối cùng.  
File .abc được xử lý trong AVM qua bốn bước chính là nạp, liên kết, xác thực và  
thi hành [8].  
8Mã máy Macromedia trung gian  
9
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
Hình 2.5: Quá trình chuyển mã của công nghệ Flash  
Trong quá trình nạp, file .abc được đọc vào trong bộ nhớ và giải mã, phân tích.  
Trong quá trình liên kết, một vài tên được tham chiếu từ vùng riêng của cấu trúc file  
ABC để được xử lý và sau đó trả lại kết quả là một cấu trúc dữ liệu phức tạp hơn rất  
nhiều liên kết các đối tượng cùng nhau.  
Quá trình xác thực là tương đối giữa các đối tượng, tên đối tượng được nhắc đến  
phải rõ ràng, kết quả theo tập hợp phải được mạch lạc . . .  
Quá trình thực thi, thể hiện mã bytecodes biên dịch trong file ABC và chạy thông  
dịch suốt quá trình thực hiện tính toán. Trong quá trình này, việc xác thực xảy ra  
liên tục với luồng chỉ lệnh và nội dung thực thi chứa trong stack: chỉ lệnh không  
được bên ngoài mảng dữ liệu bytecode đã có, chỉ lệnh phải chứa một kiểu phương  
thức chính xác. ..  
Quá trình xác thực liên tục được thực hiện ở mỗi bước, ở bước nào có lỗi, AVM sẽ  
đưa ra một thông điệp là VerifyError và thông điệp này có thể được bắt trong quá  
trình thực thi bởi chương trình.  
Dựa vào kiến trúc AVM và mục tiêu của dự án, với mục đích chính là thực thi Flash  
3D trên thiết bị nhúng, tôi đặc biệt quan tâm tới các quá trình: chuyển tệp SWF sang dạng  
.abc, chuyển từ .abc vào quá trình .abc parser và đặc biệt là quá trình JIT Compiler vì  
nó liên hệ trực tiếp tới quá trình chuyển sang mã máy của hệ thống nhúng.  
Mã máy( Bytecode) được lưu trữ trong dạng nhị phân có phần mở rộng là SWF,  
được thông dịch bởi Virtual Machine của Flash Player. Mã máy chứa các kiểu để định  
nghĩa những thành phần như: dữ liệu hằng, chuỗi, số. . . , định nghĩa không gian tên(  
namespace), định nghĩa phương thức, định nghĩa kiểu, ngoài ra mã máy còn cần có khả  
10  
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
năng mô tả kiểu, phương thức được định nghĩa lại từ những kiểu cơ bản đã có sẵn. Trong  
đó điều không thể thiếu là bảng ngoại lệ, một cơ chế để xử lý và trả lại cho chương trình  
những hành động không phù hợp với máy ảo. Mã máy được đọc vào và lưu trữ trong một  
ngăn xếp định hướng( Stack orientd abstract machine). Ngoài ra trong mã máy còn chứa  
các mã như tạo đối tượng, truy cập địa chỉ( slot access), tìm kiếm thuộc tính( property  
search).  
Cơ chế biên dịch thời gian chạy đó là cơ chế xác thực lại quá trình thực thi, thông  
dịch9 và sau đó là 2 quá trình biên dịch JIT( gồm dịch từ mã máy ảo và dịch mã máy ảo  
tới mã máy thật vật lý) và đi cùng với cơ chế này là cơ chế dọn dẹp bộ nhớ( Garbage  
Collector)- cơ chế thu hồi bộ nhớ, con trỏ lạc, không còn được sử dụng.  
2.2.3 Bộ dọn dẹp bộ nhớ AVM  
AVM Garbage Collector[7] một cơ chế quản lý tự động thu hồi bộ nhớ khi tham  
chiếu không còn được dùng đến, giải phóng tài nguyên cho hệ thống khi đối tượng không  
còn được sử dụng. Nhiệm vụ chính của bộ dọn dẹp bộ nhớ là tìm kiếm những đối tượng  
trong chương trình có thể không được sử dụng tiếp ở các lần chạy tiếp theo và thu hồi tài  
nguyên được sử dụng bởi những đối tượng này.  
Thư viện sử dụng lại(Reusable library)  
Chỉ thu hồi rác  
Thêm mới, xóa (Không quản lý bộ nhớ)  
Gỡ lỗi  
Đặc điểm  
Kế thừa những kỹ thuật chính được sử dụng trong Java như: sử dụng Heap, cơ  
chế xóa bộ nhớ khi đối tượng không còn được sử dụng, cách kiểm tra đối tượng  
còn được sử dụng, đếm tham chiếu. . .  
Sử dụng thuật toán làm chậm tham chiếu đếm10: Chỉ duy trì RC11 cho heap này  
tới heap khác, bỏ qua các Stack và các thanh ghi, đặt biến đếm Zero trong Zero  
Count Table(ZCT), quét Stack khi ZCT là đầy, xóa các đối tượng trong ZCT  
khi không tìm thấy trong stack  
Tập gia tăng12: mỗi 30ms là giới hạn cho việc làm mới tập hợp, tập hợp cung  
cấp con trỏ thông minh, sự gia tăng của tập hợp có thể bị ngắt một cách trực  
tiếp( incremental = interruptible)  
9leaner interpreter  
10DRC: Deferred Reference Counting  
11Reference Counter: Bộ đếm tham chiếu con trỏ  
12Incremental Collection  
11  
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
Khi một vùng nhớ được cấp phát, với thuật toán RC13 mỗi một vùng nhớ mới sẽ có  
một biến đếm đi kèm với nó. Tùy vào đối tượng này được cấp phát có quan hệ với những  
đối tượng khác mà bộ đếm gắn cho một biến đếm khác nhau. Sau đó, đối với những đối  
tượng được gán nhãn cao nhất- khi không được sử dụng nữa( không được tham chiếu bởi  
đối tượng khác) thì GC sẽ sử dụng cơ chế xóa để xóa đối tượng này. Garbage Collection  
không thể biết vùng nào còn trống để có thể cấp phát bởi nó được quản lý bởi Hệ điều  
hành do đó GC chỉ có nhiệm vụ giải phóng vùng này để trao lại quyền quản lý cho hệ  
điều hành. Chi tiết được thể hiện dưới hình 2.6.  
Hình 2.6: Cơ chế của bộ dọn dẹp bộ nhớ  
2.2.4 Bộ xác thực AVM  
AVM Verifier là một cơ chế xác thực hành động, mã máy có trong kiến trúc AVM.  
Hành động xác thực không xảy ra tất cả cùng một lúc. Mã xác thực được đặt vào máy  
ảo cho đến khi hành động thực sự diễn ra như một số đối tượng phụ thuộc được tải vào  
máy ảo và sau đó tham chiếu được chuyển tiếp nếu còn tiếp tục hoặc trả lại kết quả cho  
quá trình thông dịch tiếp sau. Để thực hiện cơ chế này, những đặc điểm chính của bộ xác  
thực như sau:  
Cấu trúc tổng thể, nhiệm vụ  
Đảm bảo nhãn hoạt động đúng với chỉ lệnh  
Không bị sai lạc ở cuối của mã  
Tham chiếu tới tài nguyên một cách chính xác, đúng đắn  
Kiểu an toàn(Type safety)  
Dataflow phân tích tĩnh  
Ràng buộc kiểu  
13Reference Counting  
12  
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
Làm giảm tốc độ xử lý  
Thêm lựa chọn việc tạo mã MIR( Macromedia Intermediate Representation) để tạo  
chỉ lệnh( IR14) trong khi xác thực và có thể chạy độc lập quá trình gồm: xác thực và  
tạo IR.  
2.2.5 Bộ thông dịch AVM  
AVM Interpreter là cơ chế thực thi mã sau khi qua quá trình xác thực dữ liệu .abc  
trong file SWF, giá trị được tạo ra là 32 bit( hình 2.7).  
Ngăn xếp định hướng  
Không phân luồng  
Mã hóa 32bit  
Thực thi trực tiếp từ bộ đệm kiếm chứng(verified buffer)  
Không có sự sửa mã bytecode  
2.2.6 AVM Just-in-Time Compiler(JIT)  
Một hệ thống để chuyển một ngôn ngữ bậc cao hoặc mã máy tới ngôn ngữ tự nhiên  
ngay lập tức trước khi chuyển tới quá trình xử lý thực sự của mã máy vật lý. Just-In-Time  
là một cơ chế chính được cài đặt cho công nghệ máy ảo như Microsoft .NET và Java. Sử  
dụng MIR là mã gián tiếp để chuyển mã máy ảo sang máy thật( hình 2.7).  
Lần chạy đầu tiên  
Trình bày trực tiếp(MIR) những hành động xảy ra đồng thời với việc kiểm  
chứng  
Liên kết cùng nhau  
Hằng gấp(Constant folding)  
Copy và truyền hằng(copy and constant propagation)  
Loại bỏ những biểu hiện con chung(common sub-expression elimination (CBE))  
Lần chạy thứ 2  
Sinh mã gốc  
Lựa chọn chỉ lệnh  
14Intermediate Representation  
13  
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
Đăng ký, cấp phát  
Loại bỏ mã không còn dùng nữa(Dead code elimination (DCE))  
Hình 2.7: Các quá trình của AVM  
2.3 Tamarin  
Trong năm 2006, Adobe phân phối công cụ(engine) AS 3 như là một dự án mã  
nguồn mở cho cộng đồng cùng với dự án Mozilla. Tên của dự án mới này là Tamarin.  
Kiến trúc của dự án này đã thay đổi, phát triển theo thời gian, các đặc điểm chính của  
những phương pháp tiếp cận khác nhau được mô tả ngắn gọn như dưới đây.  
2.3.1 Giới thiệu Tamarin  
Mục đích của dự án Tamarin là cung cấp mã nguồn mở với hiệu năng cao cho ngôn  
ngữ AS 3. "Tamarin" được cài đặt gồm 2 thành phần: bộ biên dịch JIT với hiệu năng cao  
và bộ thông dịch.  
Máy ảo Tamarin được sử dụng trong chương trình Adobe Flash Player và được cho  
14  
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
phép sử dụng trong các dự án bên ngoài Adobe. Bộ biên dịch JIT( thường gọi là "Nano-  
JIT") là một sự hợp tác phát triển giữa hai bên: Tamarin và Mozilla TraceMonkey[9].  
Hình 2.8: Kiến trúc Tamarin  
Trong phần này, chúng tôi chỉ giới thiệu những hiểu biết cơ bản về Tamarin, để  
hiểu chi tiết hơn các bạn có thể tìm thấy trong khóa luận "Phương pháp thực thi đồ họa  
Flash 3D dựa trên PaperVision 3D"15.  
Dựa vào kiến trúc Tamarin(hình vẽ 2.8) và AVM( hình vẽ 2.4), chúng ta dễ dàng  
thấy rằng đầu vào của Tamarin là file .abc còn đầu vào của một chương trình chơi Flash là  
tệp tin SWF. Tamarin có thành phần chính là gói core chứa AVMCore và thành phần biên  
dịch JIT, bộ quản lý bộ nhớ MMgc16. Tệp tin .abc sau quá trình phân tích( ABCParser)  
được đưa vào máy ảo qua AVMCore. Sau đó, giống như kiến trúc AVM, Tamarin đưa ra  
những mã máy của máy vật lý.  
Tamarin là máy ảo chỉ dùng cho những tệp tin được sinh ra từ AS 3. Trong quá  
trình phân tích tệp tin ABCparser, Tamarin đưa ra những thuộc tính, những tag, hàm  
theo chuẩn AS 3( vì ngôn ngữ AS 3 có nhiều thay đổi so với AS 1, 2 trước đó). Tệp  
tin AS 3 chứa tag mới như DoABC, DoABCDefine. . . trong khi với AS 1, 2 chứa tag  
DoAction, DoInitAction...  
Bộ biên dịch ActionScript là một thành phần có trong bộ công cụ phát triển Flash:  
Flex SDK[10].  
2.3.2 Mục đích dự án Tamarin  
Mục đích chính của dự án Tamarin là hỗ trợ đa nền tảng của phần cứng, bao gồm  
cả ARM cho hệ thống nhúng và X64 cho hệ điện toán 64 bit ngoài hệ thống x86 thông  
thường. Việc phát triển Tamarin không ngoài mục đích:  
Cải tiến hiệu năng thực thi thời gian thực(run-time)  
15Khóa luận của bạn Lê Viết Sơn  
16Macromedia Garbage Collector  
15  
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
Phát triển bộ biên dịch thời gian thực(run-time compiler)  
2.3.3 Tamarin central  
Tamarin central là phiên bản ổn định của bộ công cụ. Được Adobe phân phối chính  
thức với sự cộng tác của Mozilla, nó bao gồm một kiến trúc cơ sở cơ bản và mã đã được  
biên dịch ổn định. Công cụ này bao gồm cả bộ thông dịch và bộ công cụ JIT(NanoJIT)-  
thành phần trung gian giữa(LIR) và một số nền tảng cụ thể( x86, x86-64, PPC, ARM).  
2.3.4 Tamarin redux  
Tamarin redux là một sản phẩm mới được phát triển của dự án. Nó được thực hiện  
bằng cách cải tiến phiên bản trước( Tamarin central). Điều thú vị nhất của dự án là xuất  
hiện mã trung gian Forth- Được sử dụng như là một back-end cho quá trình biên dịch mã  
máy AS. Thực tế, công cụ này chứa 2 lần biên dịch. Mã AS đầu tiên được chuyển tới mã  
trung gian Forth và sau đó được chuyển tới mã trung gian của NanoJIT- MIR, rồi mới  
kết thúc quá trình biên dịch.  
Forth bản thân nó là một ngôn ngữ cơ sở ngăn xếp(stack based language).  
2.4 PaperVision 3D  
PaperVision 3D[11] là một thư viện đồ họa Flash 3D nguồn mở được đưa ra bởi bên  
thứ ba, cung cấp giao diện lập trình ứng dụng cho phép người lập trình tạo các chương  
trình Flash 3D dựa trên FlexSDK.  
Chi tiết hơn về PaperVision 3D được giới thiệu trong khóa luận của bạn Lê Viết  
Sơn về "Phương pháp xử lý đồ họa 3D của PaperVision 3D". Trong phần này tôi xin giới  
thiệu những hiểu biết cơ bản về PaperVision 3D.  
2.4.1 Giới thiệu  
PaperVision 3D được hỗ trợ sử dụng trên các công cụ tạo Flash được cung cấp bởi  
Adobe như: Adobe Flash, Flex Builder. . . Với việc sử dụng PP3D, tệp tin Flash được tạo  
ra có đồ họa bắt mắt, sinh động với nội dung hấp dẫn, lôi cuốn như các game đối kháng,  
truyện tranh tương tác có đồ họa phức tạp. . .  
PaperVision 3D gồm 2 gói chính là:  
16  
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
Gói ascollada(AS COLLAborative Design Activity): những kịch bản ActionScript  
được thiết kế sẵn để tạo ra file .dae có thể chuyển đỏi được cho ứng dụng tương tác  
3D.  
Gói PaperVision 3D: gồm các thành phần tạo 3D và xử lý sự kiện, tương tác người  
dùng.  
2.4.2 Đặc điểm PaperVision 3D  
PaperVision 3D sử dụng các kỹ thuật trong đồ họa máy tính để xây dựng hình ảnh  
3D trên màn hình, nó bao gồm các thành phần chính như: Camera, Viewport, Scene,  
Render( được thể hiện trong hình vẽ 2.9).  
Hình 2.9: Các thành phần thể hiện đồ họa 3D  
Scene: là thành phần chứa tất cả các đối tượng của không gian 3D. Các đối tượng  
này được lưu trữ trong cấu trúc dữ liệu dạng cây.  
Camera: Xác định điểm nhìn mà chúng ta đang xem Scene, được dùng để thay đổi  
góc nhìn, hướng, trọng tâm hiển thị. . .  
Viewport: là vùng chứa những đối tượng mà Camera có thể nhìn thấy, thể hiện  
một phần trong Scene 3D.  
2.5 Gnash  
GNU[12] với mục đích cung cấp cho cộng đồng một hệ thống những phần mềm  
được sử dụng, phân phối tự do, tự do tùy biến phần mềm đã thực hiện kế hoạch tạo  
chương trình chơi Flash độc lập với Adobe Flash Player.  
17  
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
2.5.1 Giới thiệu  
Gnash[13] là một phần mềm ứng dụng mã nguồn mở thuộc dự án GNU[12] dùng  
để thực thi các tệp tin Flash một cách độc lập hoặc đóng vai trò là plugin hỗ trợ trình  
duyệt web( tương thích với trình duyệt Mozilla, Firefox, Konqueror). Phiên bản Gnash  
hiện tại( 0.8.7) hỗ trợ tới phiên bản SWF 9, ActionScript[3] 2.0 và đang tiếp tục phát  
triển để hỗ trợ ActionScript 3.0.  
2.5.2 Kiến trúc  
Mã nguồn Gnash gồm các gói: libcore, libbase, backend, GUI, doc, cygnal, libltd,  
libamf, libmedia, libnet, libsound, utilities. Dựa vào chức năng của từng gói và mục tiêu  
của dự án, tôi đã đặc biệt quan tâm tới các gói: libcore, libbase và backend.  
libcore:  
Xử lý, đưa ra cơ chế chủ yếu để thực thi tệp tin Flash:  
Định nghĩa các đối tượng cơ bản của AS trong gói asobj như kiểu nguyên, màu  
sắc, hành động, đối tượng. . .  
Các lớp được định nghĩa bởi AS trong gói asobj/flash  
Định nghĩa các tag có trong cấu trúc tệp tin SWF[6] trong gói swf  
Cách thức chuyển dữ liệu từ mã máy nhị phân( tập tin Flash) sang mã máy ảo  
AS( AVM) trong gói swf và gói parser  
Xây dựng máy ảo AS(AVM) để thực thi các mã máy(ActionScript Byte Code)-  
Tương tự như AVM trong Flash Player của Adobe  
Cách thức chuyển hành động từ AVM sang máy vật lý  
Các quá trình xử lý các đối tượng (asobj), mã bytecode Flash (abc), "decod-  
ing",...  
libbase:  
Bao gồm các lớp nền tảng: lớp hỗ trợ nhập xuất( từ tệp tin, từ URL), thực thi  
tài nguyên của máy vật lý, quản lý bộ nhớ, con trỏ( bộ thu hồi bộ nhớ- Garbage  
Collector), các đối tượng đồ họa 2D. . .  
backend:  
Bước xử lý trung gian để thể hiện hình ảnh cuối cùng ra màn hình, hỗ trợ AGG,  
OpenGL, Cairo. Backend sử dụng các hàm, giao diện(interface) được cung cấp bởi  
libcore, libbase,... Tôi quan tâm chủ yếu đến phần hỗ trợ OpenGL của backend.  
Do Flash không có các thành phần cơ bản như: đường tròn, hình chữ nhật, tam  
18  
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
giác,... các đối tượng đều được chuyển về điểm và đường cong trong khi OpenGL  
chỉ hiểu các thành phần cơ bản như điểm, đường tròn, tam giác, hình chữ nhật. Mục  
tiêu là chỉnh sửa backend để Gnash hỗ trợ OpenGLES.  
gui:  
Sử dụng backend và kết quả thực thi từ VM, phân tích( parser trong libcore) để cho  
ra hình ảnh trên màn hình hiển thị.  
Các gói được sử dụng trong Gnash( hình vẽ 2.10):  
Hình 2.10: Các thành phần trong Gnash  
Chú thích( các gói chứa trong libcore):  
abc định nghĩa, định dạng các tag, hàm, đối tượng. . . trong các khối mã bytecode(  
đơn vị tính theo byte vật lý) theo dạng mã máy AS  
swf định nghĩa các tag trong SWF: control, action, sound. . . các tag này được VM  
thực thi  
vm thực thi các tag sau khi được nhận vào mã máy( abc)  
parser đóng vai trò phân tích tệp tin SWF, kết quả cho ra là SWFMovieDefinition  
mà phần gui có thể hiểu và hiển thị được  
gui sử dụng backend và kết quả nhận được từ parser để hiển thị ra màn hình cuối.  
Tuần tự quá trình xử lý( hình vẽ 2.11):  
19  
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
Hình 2.11: Quá trình xử lý qua các thành phần Gnash  
Chú thích:  
Tệp tin SWF chứa 2 thành phần chính là tag điều khiển(control tags) và mã máy(bytecode).  
Tag điều khiển có thể có: PlaceObject, RemoveObject, SetBackgroundColor, ShowFrame,  
StartSound... tag định nghĩa bao gồm: DefineShape, DefineBitsJPEG2, Define-  
Sound, SoundStreamBlock...  
VM chứa các thành phần: JIT compiler, garbage collector, application domains, và  
chuyển tới DisplayList  
DisplayList Cấu trúc dữ liệu trung tâm để hiển thị mọi thứ lên trên màn hình  
Renderer: chuyển DisplayList tới bề mặt hiển thị hình ảnh(Màn hình)  
Chú ý: Lúc xử lý và có các tags rồi thì VM mới bắt đầu được khởi tạo chứ không khởi  
tạo ngay từ đầu.  
Trong VM có các hàm để nhận biết phiên bản của SWF và AVM. Ngoài ra, AVM  
với chức năng là xử lý mã máy ở dạng .abc và bắt các sự kiện trong lúc thực thi phim  
Flash. Khi AVM đọc được tag điều khiển ví dụ như ShowFrame, nó sẽ đưa toàn bộ những  
đối tượng, thuộc tính. .. đang được xử lý trong nó sang DisplayList để thể hiện lên trên  
màn hình hoặc với tag PlaceObject đọc được từ đầu vào, AVM sẽ thực hiện di chuyển  
đối tượng chứa trong tham số của PlaceObject tới vị trí mới có trong mã máy đang đọc  
và thể hiện lên màn hình thông qua việc chuyển sang DisplayList.  
Với những đặc điểm này, VM có trong Gnash phải sử dụng tới rất nhiều cơ chế để  
thực hiện việc kiểm soát dữ liệu vào ra: quản lý bộ nhớ( GarbageCollector), kiểm tra tính  
chính xác của mã máy( bộ xác thực), và quan trọng nhất là thực thi mã máy ActionScript  
tới mã máy thật thông qua bộ thông dịch và JIT. Với đầy đủ những đặc điểm này, VM đã  
thể hiện mình là một máy ảo ActionScript khá hoàn chỉnh cho việc chơi Flash.  
Trở lại với ví dụ trong hình 2.2 , với mã bytecode được nạp vào từ tệp tin .abc,  
VM đọc lần lượt từng mã vào trong bộ nhớ như Cpool để nạp vào NamingPool và đặt  
20  
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  
những namespaces vào trong VM, sau đó tới lượt các phương thức được nạp vào như:  
getlex, callpropvoid, getproperty, pushscope. . . , và mã cuối cùng của đoạn tệp tin abc là  
tag showframe, máy ảo sẽ đưa những đối tượng sau khi được xử lý sang danh sách hiển  
thị.  
2.5.3 Đặc điểm của Gnash  
Gnash đơn thuần là chương trình chạy tệp tin Flash, Gnash hỗ trợ việc xử lý tệp tin  
trên máy và qua giao thức mạng. Tuy nhiên, phiên bản hiện tại của Gnash chưa hỗ trợ tốt  
cho việc xử lý những tệp tin Flash được tạo ra bởi AS 3 do một số lớp, thuộc tính được  
định nghĩa trong AS 1/2 đã được xóa bỏ hoặc bị thay đổi, và một số lớp thuộc tính mới  
được cung cấp thêm.  
Gnash chưa hỗ trợ hiển thị tệp tin Flash có những đối tượng đồ họa 3D với hiệu  
ứng phức tạp và những tệp tin định dạng SWF ở phiên bản về sau.  
Trong phiên bản AS3, Adobe Systems đã giới thiệu VM mới có tên là AVM 2[7]  
để thực thi những mã máy được sinh ra từ AS3. Đi kèm theo đó, đặc tả SWF[6] cũng  
thay đổi để phù hợp với VM mới. Mỗi tệp tin SWF chỉ chứa một kiểu duy nhất: khối  
ABC(ABC blocks) cho AS 3 hoặc khối DoAction(DoAction blocks) tồn tại trong AS  
1/2.  
Mục đích chính của khóa luận này là cung cấp cơ sở lý thuyết hướng tới việc thể  
hiện một cách trực quan đồ họa 3D trên hệ thống nhúng, trên cơ sở lý thuyết đó để phát  
triển hệ thống riêng( gồm máy ảo và hệ thống biên dịch) dành cho hệ thống nhúng. Cung  
cấp một số giải pháp toàn diện để thực hiện một cách dễ dàng 3D trên hệ thống nhúng  
với hiệu năng cao.  
21  

Tải về để xem bản đầy đủ

pdf 46 trang yennguyen 09/05/2025 40
Bạn đang xem 30 trang mẫu của tài liệu "Khóa luận Kỹ thuật xây dựng đồ họa 3D dựa trên công nghệ flash dành cho thiết bị nhúng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfkhoa_luan_ky_thuat_xay_dung_do_hoa_3d_dua_tren_cong_nghe_fla.pdf