A Kieu và t¾p l¾nh tr on g VM2
2.15 Quan h¾ giua các gói trong Papervision3D
lóp SceneObject3D và do tính chat nêu trên nên lóp DisplayObject3D là lóp cơ só cúa SceneObject3D. DisplayObjectContainer3D +root +childrend +addChild() +removeChild() SceneObject3D Scene3D Hình 2.16: Scene3D Camera
Có the tưóng tưong chúc năng cúa nó như m®t Camera th¾t mà nó ó trong không gian 3D và ghi hình lai tat cá các hoat đ®ng bên trong Scene cúa chương trình. Camera xác đ%nh điem nhìn mà chúng ta đang xem Scene. Nó không phái là m®t v¾t the hi¾n huu trong chương trình do đó không can phái cho vào Scene. Giong như Camera thông thưòng Camera trong Papervision3D có the phóng to, hưóng trong tâm, và các tính
năng khác. Vì lý do hi¾u năng cúa chương trình, Camera có the bó qua nhung đoi tưong ó v%
trí quá xa nó, như v¾y tiet ki¾m đưoc thòi gian tính toán cho đoi tưong đó.
Trong thư vi¾n Papervision3D, có xây dnng bon loai Camera theo các cách sú dnng khác nhau. Thu¾t ngu Camera chí chung 4 loai này. Theo sơ đo cau tao thì Camera thùa ke tù lóp CameraObject3D mà lóp này lai là lóp con cúa DisplayObject3D. Camera có các đ¾c tính cơ bán là:
• Focus (tiêu điem) và field of view (góc quan sát). Focus là so dương the hi¾n khoáng
cách giua Camera và viewport (m¾t phang chieu). Field of view là góc the hi¾n vùng quan sát cúa Camera. Giá tr% cúa Focus và field có sn liên h¾ vói nhau là khi giá tr% focus lón thì khoáng cách giua Camera và m¾t phang chieu tăng lên và field of view (góc quan sát) giám đi. Và ngưoc lai góc quan sát tăng lên khi giá tr% focus bé.
• Zoom: Khi chúng ta phóng to tranh ánh hay phim, thì ánh mà ta nhìn thay đưoc
kéo r®ng ra. Túc là cánh đuoc mó r®ng ra mà không can phái đưa Camera lai gan. Đây chính là cơ che zoom trong Papervision3D.
• Moi quan h¾ giua Zoom, Focus và Field of View: Neu giám giá tr% cúa zoom ho¾c
focus thì giá tr% field of view cũng giám. Ngưoc lai, tăng ho¾c giám field of view se làm cho giá tr% focus tăng ho¾c giám tương úng, nhưng không làm thay đoi giá tr% cúa zoom.
• Near và Far: Khi cat m®t hình bang hai m¾t phang gan và xa thì giá tr% near và far chính là khoáng cách giua Camera đoi vói m¾t phang gan và m¾t phang xa tương úng. Đ¾t giá tr% cho thu®c tính near cũng như gán cho focus.
Papervision3D xây dnng bon loai Camera:
Target Camera là loai Camera luôn hưóng nhìn đen 1 đích. Kieu du li¾u thu®c tính cúa Target Camera là DisplayObject3D.
Free Camera hoat đ®ng như target Camera ngoai trù không có đích đe hưóng vào. Nó luôn nhìn theo hưóng thang tien theo trnc z trong h¾ toa đ® 3 chieu.
Debug Camera: khi xây dnng m®t chương trình 3D Flash dna vào Papervision3D chúng ta có the se thieu sót phan nào đay trong không gian 3D. Đe lưu tru v% trí Camera và nhung cài đ¾t cho ngưòi dùng kiem tra lai chương trình cúa mình là lý do tao ra Debug Camera. Debug Camera xây dnng nhung cách đieu hưóng chương trình sú dnng bàn phím và chu®t, đong thòi hien th% nhung thong kê nhung gì se tiep tnc xáy ra vói chương trình.
Spring Camera: là kieu Camera luôn di chuyen theo đoi tưong trong chương trình. Không chí v¾y, nó còn có hi¾u úng lò xo khi đoi tưong tăng toc ho¾c re. Spring Camera sú dnng nhung tính chat v¾t lý, tao ra m®t lò xo theo tưóng tưong giua Camera và đoi
tưong. Khi đoi tưong di chuyen, lò xo này se đưoc kéo giãn ra ho¾c co lai, tao ra sn di chuyen liên tnc trông như th¾t.
DisplayObject3D
CameraObject3D
Camera3D
SpringCamera3D
Hình 2.17: Camera trong Papervision3D
Viewport
Viewport là m®t vùng chúa hien th% nhung gì Camera cúa chương trình thay đưoc . Có the tưóng tưong như nó là ong kính cúa Camera, the hi¾n m®t phan trong scene 3D . Bưóc cat xén đoi tưong đưoc thnc hi¾n vói viewport.
Sprite IViewport3D
Viewport3D
BitmapViewport3D
Hình 2.18: Viewport trong Papervision3D
Object
M®t hình trong không gian 3D đưoc goi là v¾t the hay đoi tưong 3D, hay Display- Object3D trong Papervision3D. Các đoi tưong cơ bán đưoc xây dnng san trong Paper- vision3D là: điem 3D, đưòng thang, hình nón, hình l¾p phương, hình trn, máy bay giay, máy bay, hình cau.
Material
Chat li¾u đưoc sú dnng trong Papervision3D đe tô phú lên be m¾t đe tao cho đoi tưong 3D trông th¾t, song đ®ng và đep mat. Vi¾c mô hình hóa đoi tưong 3D đưoc thnc hi¾n thông qua xây dnng tù các tam giác.
Render
Đe ve lên khung nhìn ta can đen render engine (máy ve). Nó liên tnc c¾p nh¾t nhung gì xáy ra trong khung cánh ó không gian 3D mà Camera ghi lai và ve lai trên khung hình (viewport). AbstractRenderEngine IRenderEngine BasicRenderEngine LazyRenderEngine QuadrantRenderEngine Hình 2.19: Xây dnng Render 2.4.3 M®t so ket lu¾n
Moi quan h¾ giÑa Papervision3D và AS 3.0
Papervision3D dna vào ngôn ngu AS 3.0 đe xây dnng phương pháp hien th% đo hoa 3D. Các tính chat tao hoat hoa, chuyen đ®ng, hi¾u úng đưoc đeu thùa ke và mó r®ng tù AS 3.0.
So sánh OpenGL và Papervision3D
Cách ve đoi tưong, cơ che hoat đ®ng cúa OpenGL và Papervision3D có m®t so khác bi¾t là:
• Papervision3D sú dnng h¾ trnc toa đ® phái13 còn OpenGL sú dnng h¾ toa đ® trái 14 .
13trnc z đi vào trong
• Thu¾t toán xác đ%nh m¾t hi¾n mà OpenGL sú dnng là z-buffer15trong khi
Papervi- sion3D sú dnng thu¾t toán painter’s algorithm 16 .
• Papervision3D là thư vi¾n ho tro cho vi¾c l¾p trình, OpenGL không chí ho tro
l¾p trình mà còn giao tiep vói phan cúng đo hoa cúa thiet b% cài đ¾t nó.
So sánh Papervision3D véi OpenGLES
Papervision3D có the thnc thi như OpenGL, OpenGLES chí sú dnng m®t phan các hàm API cúa OpenGL, do đó chương trình 3D tù Papervision3D đep và phong phú hơn. Hơn nua cơ che tương tác vói Flash cũng tăng thêm sn hap dan, lôi cuon.
Thư vi¾n Papervision3D đưoc xây dnng vói nhieu hàm, ho tro l¾p trình tot đe tao ra các chương trình 3D đep mat. Vi¾c l¾p trình OpenGLES g¾p khó khăn khi phái cân nhac đen tài nguyên h¾ thong mà chương trình sú dnng, trong khi vói Papervision3D vi¾c này đưoc máy áo xú lý.
Như v¾y lna chon Papervision3D đe phát trien xây dnng đo hoa 3D đe thnc thi trên thiet b% nhúng mang lai nhieu ưu điem hơn OpenGLES.
2.5 Môi trưèng đo hoa OpenGLES trên PowerVR
Tương tn Papervision3D, OpenGL và OpenGLES cũng là thư vi¾n ho tro đo hoa 3D. OpenGL đưoc sú dnng trên môi trưòng PC còn OpenGLES sú dnng trên thiet b % nhúng. Khi m®t t¾p tin đưoc tao khi sú dnng OpenGL, sú dnng nó đe thnc thi trên môi trưòng thiet b% nhúng vói OpenGLES thì se có nhung thành phan không xuat hi¾n đưoc. Bói vì, chí có 10% các hàm trong OpenGL đưoc sú dnng ó OpenGLES, 50% so hàm đó tù OpenGL phái chính súa thay đoi vói tham so sao cho sú dnng ít tài nguyên hơn. Bói vì năng lnc xú lý cúa thiet b% nhúng b% han che hơn.
Vói môi trưòng giá l¾p trên PC mô phóng PowerVR insider 17 đưoc cung cap
cho ngưòi phát trien phan cúng và phan mem trên thiet b% nhúng. PowerVR đưa ra m®t giái pháp manh me, linh hoat cho vi¾c thnc thi nhung úng dnng 2D/3D véc tơ vói
GPU 18 bao gom cá xú lý, tao ánh 2D/3D mã hóa - giái mã Video. Tat cá các API chính
đưoc ho tro bao gom: OpenGLES 2.0/1.1, OpenVG 1.1, OpenGL 2.0/3.0, DirectX 9/10 và OpenCL. Đ¾c bi¾t vói các phiên bán tiep theo (tù phiên bán 5), PowerVR cung cap giái pháp cho tat cá các dang tiep theo cúa đo hoa 3D, 2D, đo hoa véc tơ cho thiet b% nhúng vói các ky
15 b® đ¾m z
16Thu¾t toán ngưòi tho sơn
17M®t chip đo hoa nhúng ho tro thnc thi OpenGLES 2.0
18Graphics Processing Unit
thu¾t chong răng cưa, và đưa các chúc năng xú lý hình ánh chuyên sâu.
Trên thnc te, PowerVR đã tró thành chip xú lý đo hoa pho biet nhat sú dnng trong
đi¾n thoai di đ®ng đe hien th% hình ánh 2D, 3D, tăng toc đo hoa véc tơ 19 và đưoc sú dnng
bói các công ty, t¾p đoàn đi¾n tú hàng đau the giói.
CHƯƠNG 3
Ky thu¾t xN lý đo hoa 3D Flash
Dna vào phan cơ só lý thuyet ó trên, chương này se mô tá bài toán đong thòi nêu ra phương pháp giái quyet và mô hình minh hoa cho giái pháp trên.
3.1 Mô tá bài toán
Do dn án mang tính dài ha, ó thòi điem hi¾n tai chúng tôi chí dùng lai ó múc đ® tìm hieu, phân tích và kiem thú các mã nguon mó m®t cách toi thieu đe đưa ra tính thnc thi cúa dn án.
Trong pham vi dn án, chúng tôi se xây dnng ky thu¾t xú lý 3D Flash trên h¾ thong
nhúng (trưóc het là giá l¾p có ho tro đo hoa OpenGLES 2.0 như PowerVR SDK 1 . Sú
dnng Gnash đe xây dnng trình xú lý Flash, hien th% Flash Video nham mnc đích thnc thi đưoc 3D Flash cúa Papervision3D. Tiep đay, chúng tôi se đưa mô hình giá l¾p lên thiet b% di đ®ng đe chơi đưoc 3D Flash.
3.2 Mô hình đe xuat
3.2.1 Ý tưéng
Tù nhung tìm hieu ve lý thuyet ó chương hai, ket hop vói yêu cau cúa bài toán đ¾t ra chúng tôi có m®t so nh¾n xét.
• Vi¾c xú lý đo hoa 3D Flash cũng theo cơ che xú lý AS 3.0. Papervision3D
đưoc phát trien dna trên AS 3.0, ky thu¾t ve tương tác, sn ki¾n vói ngưòi dùng hoàn toàn tương tn. Các v¾t the 3D cũng đưoc mô hình tù các đoi tưong cơ bán cúa AS 3.0.
CHƯƠNG 3: KY THU¾T XU LÝ Đ6 H6A 3D FLASH
Tù Flash Player phiên bán 9 tró đi có the hien th% Papervision3D mà không can phái cài đ¾t thêm thư vi¾n nào;
• Máy áo AVM2 cúa Gnash chưa ho tro het cho AS 3.0 nên Papervision3D
không chơi đưoc trên Gnash. Phan hien th% cúa Gnash ho tro nhieu công ngh¾, nen táng đo hoa (OpenGL, agg, gtk, . . . ) chúng tó xú lý hình ánh cúa Gnash tot;
• Máy áo Tamarin-AVM2 thnc thi ngôn ngu AS 3.0 vói hi¾u năng cao, toi ưu vi¾c
v¾n hành bói b® biên d%ch JIT và cơ che quán lý b® nhó MMgc 2 Xú lý 3D Flash
cúa Papervision3D cũng như vói AS 3.0 nên máy áo Tamarin-AVM2 có the đám trách tot vói đo hoa 3D.
3.2.2 Giái pháp
Theo ý tưóng trên, đe xú lý đo hoa 3D cúa Papervision3D chúng tôi can có m®t máy áo thnc thi AS 3.0. Ket hop đau ra cúa máy áo này vói phan hien th% Gnash se cho ra ket qúa hien th% 3D Flash. Vì v¾y, giái pháp sú dnng máy áo tamarin- AVM2 cho vi¾c xú lý 3D cúa Papervision3D, ket hop vói chúc năng hien th% đo hoa cúa Gnash se thu đưoc máy chơi 3D Flash hi¾u quá. Giái pháp đưoc minh hoa bói hình 3.1
• Vói AS 1.0 và 2.0 vi¾c thnc thi ABC đưoc tiep tnc vói máy áo AVM1 cúa Gnash.
• Vói AS 3.0 và Papervision3D đưoc xú lý bói máy áo tamarin-AVM2. Sau khi xú
lý ABC, tamarin-AVM2 chuyen đau ra cho Gnash thnc hi¾n bưóc hien th%. Rendering
ActionScript
Bytecode Gnash AVM1
AS1,2 Displaying SWF Tamarin AVM2 NanoJIT AS3 Papervision3D OpenGL|ES
Hình 3.1: Mô hình ket hop tamarin và Gnash
2Phan Tamarin, chương hai
CHƯƠNG 4
ThNc nghi¾m
Trên cơ só thnc nghi¾m này, chúng tôi có sú dnng các dn án nguon mó thnc thi Flash khác nhau đe đưa vào so sánh tìm ra phương án toi ưu cho h¾ thong.
Trong phan thnc nghi¾m này chúng tôi có sú dnng m®t so công cn bao gom:
• B® công cn phát trien Java: JDK
• B® l¾p trình phát trien Flex Builder 3.
• B® biên d%ch Flash nguon mó Flex SDK 3.4
•Công cn tách mã ABC tù các t¾p SWF “abcdump” trong gói tamarin-central Môi
trưòng thnc nghi¾m:
• B® xú lý: Intel Core 2 Duo 1.6GHz
• B® nhó RAM: 1.5GB
• H¾ đieu hành : Ubuntu 9.10 / Linux
Mô hình thnc nghi¾m như hình 4.1 gom các bưóc như sau:
• Sú dnng b® phát trien Flex Buider có sú dnng thư vi¾n Papervision3D đe sinh ra
t¾p SWF.
• Dùng công cn abcdump trong gói util cúa tamarin đe tách t¾p SWF
Papervision3D sang dang ABC. Phan phn lnc B nói chi tiet hơn ve cách thúc thnc
nghi¾m sú dnng công cn “abcdump”.
• Thnc thi t¾p ABC vói máy áo tamarin.
Flex Builder Papervision3D SWF AS2,3,Papervision3D abcdump/tamarin ABC tamarin-AVM2 OUTPUT Hình 4.1: Mô hình xú lý 3D
4.1 Ket quá thNc thi
4.1.1 Cau tao cúa ABC
Sú dnng công cn “abcdump” trong gói tamarin-central, chúng tôi tách đưoc thành phan ABC cúa các t¾p Flash AS 3.0. Vói Papervision3D, cũng sinh đưoc t¾p ABC tương úng. Tù nhung phép bóc tách này, chúng tôi hieu rõ đưoc bán chat thành phan cúa t¾p, đong thòi nam đưoc cơ che nh¾n đau vào cúa máy áo tamarin-AVM2.
4.1.2 Cau hình phan cNng can thiet
Đe thnc thi đưoc đo hoa 3D Flash cúa Papervision3D, thiet b% di đ®ng toi thieu can phái có chip ho tro xú lý OpenGLES và có khá v¾n hành máy áo tamarin và Gnash. Dna vào nhung thnc nghi¾m ve đo hoa, chúng tôi đưa ra cau hình toi thieu đe có the đáp úng cho vi¾c xú lý 3D Flash. Cau hình đe xuat như ó báng dưói:
B® xú lý Toc đ® xú lý B® nhó RAM toi thieu
ARM v7 PBX A9 600 - 800 MHz 128MB
ARM v7 PB A8 550 MHz 64MB
ARM v6 RealView EB 200 - 400 MHz 32MB
ARM v6 RealView PB 200 - 400 MHz 32MB
4.2 Minh hoa thNc nghi¾m
Sú dnng môi trưòng phát trien l¾p trình Flex Builder ket hop vói thư vi¾n Papervi- sion3D, chúng tôi tao ra chương trình 3D Flash đơn gián.
CHƯƠNG 4: THUC
T¾p Flash chay trên phan mem Flash Player, hien th% như hình 4.2. Ví dn minh hoa hình l¾p phương quay trong không gian 3D. Đoan mã Papervision3D dùng đe tao chương trình trên đưoc nói chi tiet trong phan phn lnc CHƯƠNG 4: THUC C
Hình 4.2: Thnc thi 3D cúa Papervision3D trên Flash Player
Khóa lu¾n này đang trong giai đoan thnc hi¾n cúa dn án nên chưa có thnc nghi¾m trên thiet b% nhúng. Tuy nhiên, ket quá sau khi hoàn thành dn án, chúng tôi xây dnng môi trưòng xú lý 3D Flash trên thiet b% di đ®ng mà chat lưong hình ánh và toc đ® xú lý đat như minh hoa trên.
Ket lu¾n và hưéng phát trien
5.1 Ket lu¾n
Trong giai đoan đau cúa dn án, chúng tôi đã đat đưoc m®t so ket quá: hieu cơ che xú lý, xây dnng do hoa 3D Flash-Papervision3D, cơ che hien th% Flash cúa Gnash, kiem tra tính khá thi sú dnng máy áo Tamarin, và đe ra giái pháp cho máy Flash xú lý 3D- Paperision3D. Giao đoan tìm hieu, xây dnng các van đe lý thuyet này là nen táng cho vi¾c xây dnng mô hình thnc thi 3D Flash trên thiet b% di đ®ng. Vói thòi gian không cho phép,
5.2 Hưéng phát trien
Trong khuôn kho nhung gì đã thnc hi¾n, chúng tôi đã chúng minh tính khá thi cho vi¾c xú lý 3D Flash trên thiet b% nhúng. Đong thòi, lý thuyet và mô hình đã xây dnng đưoc là cơ só cho các bưóc tiep theo cúa dn án đe đưa h¾ thong xú lý Flash hoàn thi¾n trên h¾ thong nhúng, môi trưòng OpenGLES. Hơn nua, nhung thu¾t toán xú lý 3D se dna vào lý thuyet tìm hieu ve Papervision3D.
CHƯƠNG
Kieu và t¾p l¾nh trong AVM2
A.1 M®t so kieu dÑ li¾u trong AVM2
• int (nguyên) bieu dien giá tr% nguyên đ® lón 32bit, khoáng giá tr% cúa nó là:
• uint (nguyên không dau) có đ® dài 32bit, giá tr% nam trong khoáng
• double (so thnc dau phay đ®ng)
• string (xâu ký tn) bieu dien lan lưot các ký tn Unicode. String ó dang UTF-8 và
đ® lón có the là 2
• namespace
• null bieu dien không đoi tưong nào.
• undefined bieu dien không có giá tr%
A.2 Tóm tat t¾p l¾nh AVM2
Các l¾nh chí đ%nh kieu du li¾u mà nó thnc hi¾n bói h¾u to ó sau tên l¾nh như : _b (Boolean) , _a (any), _i (int), _d (double), _s (string), _u (unsigned), _o (object).
• L¾nh tái và lưu. Truy c¾p vào thanh ghi cnc b® thông qua nhung l¾nh sau:
getlocal, getlocal0, getlocal1, getlocal2, getlocal3, setlocal0, setlocal1, setlocal2, setlocal3.
• L¾nh ve so hoc. Phép c®ng thnc thi bói nhung l¾nh: increment, increment_i, inclo-
cal, inclocal_i, add, add_i. Phép trù gom: decrement, decrement_i, delocal, delo- cal_i,