PHẦN 2. TÌM HIỂU MOLEHILL (STAGE3D) API
Trình độ: Cao Cấp | Phần mềm | File mẫu |
- Vững ActionScript 3 - Biết FlashDevelop - Biết Flash 3D hoặc 3D Engine | - Flash Develop 4 (tải về) - Flex SDK 4.5 r.19786 (tải về) | molehill_getting_start_p2.zip |
(TTT) Đây là bài viết giới thiệu về Molehill (Stage3D) API ở khía cạnh cơ bản của nó. Molehill API là một tập lệnh cấp thấp nên đòi hỏi bạn phải vững về ActionScript 3 và có chút kinh nghiệm về 3D (Flash) để có thể dễ dàng tiếp cận hơn.
(Dịch)Trước khi chúng ta bắt đầu, có một số thuật ngữ các bạn nên biết:
Các thuật ngữ:
- Vertex: Một điểm trong không gian 3D. Một vertex sẽ xác định đỉnh của một tam giác. Tuy nhiên trong MoleHill, vertex định nghĩa cả vị trí và màu của đỉnh.
- Matrix: Bạn dùng Matrix (ma trận) để biến đổi các Vertex. Hãy hình dung Matrix giống như là các "phương trình" để xoay, thay đổi tỉ lệ hoặc thay đổi vị trí của Vertex.
- Shader: Shader là một chương trình nhỏ dùng để xử lý Vertex. Shader có thể dùng Matrix để làm các phép biến đổi lên Vertex. (Hay nói cách khác, chương trình thực thi một phương trình lên tất cả các điểm trong 3D). Không như tôi nghĩ, Shader trong MoleHill không chỉ xử lý hoa văn và giao diện mà nó còn dùng để xử lý vị trí của các đối tượng.
Các thành phần tạo nên MoleHill:
Stage3D
Stage3D là phần đứng giữa Flash và bộ máy xử lý đồ họa (GPU). Stage3D không nằm trong display list (bạn không thể làm thao tác addChild với Stage3D). Stage3D tồn tại song song với đối tượng Stage chúng ta đã biết. Stage3D nằm đằng sau tất cả các đối tượng hiển thị của Flash nhưng nằm đằng trước StageVideo.
Minh họa Stage3D (nguồn: ByteArray)
Context3D
Stage3D sẽ chứa Context3D. Để dễ hình dung, bạn hãy liên tưởng tới việc Bitmap chứa BitmapData. Bạn không vẽ trực tiếp lên Bitmap cũng như bạn sẽ không render đối tượng trực tiếp lên Stage3D. Việc bạn làm với Context3D sẽ tương tự như với BitmapData.VertextBuffer3D
Context3D sẽ chứa các đối tượng VertextBuffer3D. Hãy hình dung VertextBuffer3D như là các “chỉ dẫn” cần phải vẽ những gì và chúng trông như thế nào. VertextBuffer3D gồm một Vector.IndexBuffer3D
IndexBuffer3D chứa một Vector giống VertexBuffer3D. Nhưng thay vì là một Vector.Program3D
Program3D là một “chương trình” mà nó sẽ duyệt qua dữ liệu của VertextBuffer3D và “biến đổi” chúng. Program3D chứa 2 Shader mà một sẽ biến đổi vị trí của từng vertex và một sẽ định nghĩa các pixel trong một tam giác sẽ trông như thế nào. 2 chương trình nhỏ đó được gọi là VertexShader và FragmentShaderVertexShader
VertexShader là một chương trình nhỏ viết bằng ngôn ngữ AGAL mà nó sẽ biến đổi vị trí các Vertex (đỉnh) của tam giác. Chẳng hạn, nếu bạn muốn co giãn, xoay, hoặc di chuyển một tam giác, bạn sẽ dùng VertexShader để làm việc này.FragmentShader
FragmentShader là một chương trình khác viết bằng AGAL mà nó sẽ xử lý các pixel bên trong tác giác. Chẳng hạn, nếu bạn muốn đổi màu tam giác thành màu đỏ thì bạn cần viết một chương trình FragmentShader để làm việc đó.AGAL
AGAL (Adobe Graphics Assembly Language) là một ngôn ngữ lập trình cấp thấp. Nó được dùng để viết các chương trình VertexShader và FragmentShader. Nó là trái tim của MoleHill.Sơ đồ bên dưới mô tả sự liên hệ giữa các thành phần
Ứng dụng MoleHill thường có 2 phần:
- Cài đặt
- Render (tạm dịch: xử lý hiển thị)
1. Những việc chúng ta cần làm trong giai đoạn Cài đặt
- Truy xuất đối tượng Context3D từ Stage3D.
- Cài đặt Context3D
- Tạo một VertextBuffer
- Tạo một IndexBuffer
- Gửi dữ liệu Vertex cho VertexBuffer
- Gửi dữ liệu Index cho IndexBuffer
- Biên dịch VertexShader
- Biên dịch FragmentShader
- Tạo một Program3D để sử dụng 2 shader vừa tạo
- Lắng nghe sự kiện ENTER_FRAME để liên lục gửi dữ liệu đến GPU.
Bạn có thể thấy có khá nhiều việc phải làm trong bước cài đặt. Việc cài đặt, theo tôi, phức tạp hơn nhiều so với việc render.
2. Những việc cần làm trong quá trình Render (ENTER_FRAME):
- Dọn sạch Context3D
- Cài đặt chương trình Program3D sẽ dùng
- Gửi VertextBuffer đến Context3D
- Cài đặt dữ liệu cho các shader (khai báo các biến AGAL)
- Vẽ các tam giác
- Hiển thị ra màn hình các tam giác được vẽ
Mã nguồn ví dụ
Bây giờ chúng ta sẽ xem qua mã nguồn ví dụPhần cài đặt mô tả ở trên được hiện thực trong hàm onGotContext. Bởi vì để lấy được Context3D, chúng ta phải gửi yêu cầu cho Flash và chờ cho đến khi nó được trả về.
Phần render xảy ra trong hàm onRenderLoop xử lý sự kiện ENTER_FRAME.
Tôi đã cố gắng viết thật nhiều dòng ghi chú trong code để bạn có thể dễ nắm bắt. Cũng cần nói thêm là mã nguồn ví dụ này được dựa trên bài blog của Thibault Imbert và video này.
|
Để biên dịch được đoạn code trên, bạn cũng làm các bước chuẩn bị như ở Phần 1-II-1.
Các bước để biên dịch đoạn code trên như sau:
- Vào project settings, thêm thư mục lib vào danh sách Classpaths.
- Tải về thư viện AGALMiniAssembler tại đây (đây là lớp tiện ích bên ngoài, không có sẵn trong Flash Player Incubator), giải nén vào thư mục lib của dự án. (thư mục ‘com’ ở trong ‘lib’).
(Nếu bạn dùng lại dự án đã tạo cho phần 1 thì không cần phải làm bước này, AGALMiniAssembler đã được đóng gói sẵn với Away3D) - Tạo một lớp mới tên MolehillDemo.as và nhập nội dung của lớp như ở trên.
- Click chuột phải lên MolehillDemo.as trên cửa sổ Project Manager, chọn Document Class
- Nhấn F8 hoặc Project > Build Project để biên dịch ứng dụng.
- Mở file index.html bằng browser đã cài Flash Player Incubator.
Xem thêm:
- Bài viết gốc: http://labs.jam3.ca/2011/03/molehill-getting-started- Giới thiệu về Flash Player Incubator và cách biên dịch: http://labs.adobe.com/wiki/index.php/Flash_Player_Incubator#Authoring_for_Flash_Player_11.2C0.2C0.2C58_Incubator
- Đào sâu hơn về Molehill API: http://www.bytearray.org/?p=2555
No comments:
Post a Comment