Xem mẫu

  1. Ng«n ng÷ m« h×nh hãa thùc t¹i ¶o VRML ? LÞch sö VRML „ VRML lµ mét ng«n ng÷ v¨n b¶n dïng ®Ó m« t¶ c¸c m«i tr−êng t−¬ng t¸c vµ c¸c vËt thÓ 3-D „ C¸c file text VRML cã ®u«i lµ .wrl „ VRML 1.0 dùa trªn ng«n ng÷ m« t¶ Silicon Graphics 3D gäi lµ “Open Inventor”. VRML 1.0 cho phÐp m« t¶ c¸c c¶nh tØnh vµ kh«ng t−¬ng t¸c. „ VRML 2.0 lµ mét ng«n ng÷ m« t¶ dùa trªn Silicon Graphics vµ ®−îc goi lµ “Moving Worlds”. „ VRML1 (1994) & VRML2 (1997) cã më réng thªm c¸c chñ ®Ò liªn quan (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 TÝnh chÊt CÊu tróc file VRML „ B¹n cã thÓ xem c¸c file VRML nhê tr×nh duyÖt VRML : „ Trong file VRML gåm cã : #VRML V2.0 utf8 „ Mét øng dông hç trî VRML „ §Çu ®Ò cña file # example1.wrl - a yellow box „ Mét øng dông VRML nhóng vµo mét tr×nh duyÖt HTML „ Comments – chó thÝch Shape „ B¹n cã thÓ xem c¸c file VRML tõ ®Üa cøng , hay qua m¹ng Internet cña b¹n { geometry Box{ } # default box „ Toµn bé trang Web „ Nodes – nót chøa c¸c appearance Appearance # override „ Nhóng vµo trang Web th«ng tin quan träng cña c¶nh vËt appearance „ Toµn bé khung cña trang Web {material Material # with a new „ Fields – c¸c thuéch tÝnh „ Nhóng vµo khung cña trang Web cña nót mµ b¹n cã thÓ material „ Nhóng vµo c¸c øng dông ®a thêi gian thay ®æi {diffuseColor 1.0 1.0 0.0 # „ B¹n cã thÓ t¹o c¸c file VRML nhê : „ Values – c¸c thuéc tÝnh yellow „ Mét tr×nh so¹n th¶o v¨n b¶n ®¬n gi¶n gi¸ trÞ } „ Mét ch−¬ng tr×nh øng dông „ Vµ . . . } „ Mét tr×nh dÞch ®Þnh d¹ng vµ m« h×nh hãa 3D } „ Mét ng«n ng÷ t¹o vËt thÓ (nh− ng«n ng÷ kÞch b¶n Perl ) (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Comments-chó thÝch PhÇn tö c¬ b¶n cña VRML: Nót „ Lêi chó thÝch b¾t ®Çu víi ký tù # . „ Mét file VRML gåm cã mét danh s¸ch c¸c nót, mçi nót chøa mét phÇn th«ng tin m« t¶ toµn c¶nh. „ Ký tù # trong nh¸y kÐp kh«ng ph¶i b¾t ®Çu chó thÝch. „ Mét nót cã thÓ ®Þnh nghÜa h×nh d¹ng vËt thÓ, hay thuéc tÝnh cña cña mét ®èi t−îng , nh− mµu mµu s¾c vµ hÖ täa ®é cña nã. „ Chó ý r»ng dßng ®Çu cña VRML 2.0 lµ : „ Mçi nót cã mét tªn, theo sau lµ cÆp dÊu { } cã thÓ kh«ng chøa tr−êng nµo #VRML 2.0 utf8 hoÆc nhiÒu tr−êng. vµ lµ b¾t buéc ! „ Mét c©u lÖnh tr−êng gåm cã tªn tr−êng sau ®ã cã thÓ cã mét hay nhiÒu gi¸ trÞ.C¸c tr−êng cã thÓ ®−îc viÕt theo c¸c trËt tù kh¸c nhau. „ Tõ khãa utf dïng ®Ó nãi ®Õn bé ký tù quèc tÕ UTF-8 ®−îc „ Tªn cña nót b¾t ®Çu b»ng ký tù hoa, tªn tr−êng b¾t ®Çu b»ng ký tù dïng trong file. th−êng (case sensitive). „ VÝ dụ về nót „ Lêi chó thÝch vµ kho¶ng tr¾ng cã thÓ kh«ng ®−îc b¶o toµn „ Shape, Box, Appearance, Material,lights, sounds, . bëi VRML document server. (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Lê Tấn Hùng CNTT- ĐHBK Hà nội Email: hunglt@it-hut.edu.vn Page 1 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  2. CÊu tróc ph©n líp CÊu tróc c¶nh „ Nót Shape chøa hai tr−êng, geometry vµ appearance, mçi tr−êng l¹i z Shape chøa c¸c nót kh¸c ®−îc coi nh− gi¸ trÞ cña chóng. geometry z Box „ Shape { appearance NULL exposedField SFNode appearance z Appearance geometry NULL exposedField SFNode material z Material } „ §«i khi nót Shape cã mét tr−êng Appearance nh−ng kh«ng cã tr−êng diffuseColor geometry (vÝ dô nh− c¸c vËt thÓ kh«ng nh×n thÊy!) „ VRML gióp b¹n chia mét líp thµnh c¸c khoanh cã thÓ qu¶n lý ®−îc . „ Mçi nót riªng lÎ th× rÊt ®¬n gi¶n, sù kÕt nèi gi÷a c¸c nót cho phÐp t¹o ra „ Tr−êng geometry chøa nót Box vµ tr−êng appearance coi nót c¸c líp phøc t¹p. Appearance nh− lµ gi¸ trÞ cña cã. „ Nót shape ®−îc t¹o nªn trung t©m cña thÕ giíi VRML . „ Nót Appearance l¹i chøa mét nót kh¸c lµ Material. „ Mét file VRML cã thÓ chøa nhiÒu nót shape „ C©u tróc c©y cña nót mµ nót l¹i ®−îc chøa trong nót kh¸c gäi lµ scene „ C¸c nót shape cã thÓ trïng lªn nhau khi chóng ®−îc t¹o nªn ë cïng mét graph. vÞ trÝ. „ B¹n nªn xem vµ sö dông mét trong c¸c tr−êng geometries sau (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 C¬ b¶n vÒ nót shape C¬ b¶n vÒ nót shape „ Nót Shape lµ nh÷ng viªn g¹ch „ Box „ Cylinder t¹o nªn thÕ giíi VRML C¸c nót {size 8 12 10 # x, y, z (=w, h, Shape gèc lµ c¸c khèi chuÈn : { radius 4 # chiÒu réng lµ 8 d) • Box height 6 } • Cone Xem code Ch¹y vÝ dô bottom TRUE # “cup” cã c¹nh vµ ®¸y • Cylinder • Sphere „ Cone side TRUE • Text { bottomRadius 5 # so 10 top FALSE # nh−ng kh«ng cã ®Ønh „ C¸c tr−êng cña nót Geometry units wide } ®iÒu khiÓn kÝch th−íc height 12 Xem code Ch¹y vÝ dô „ KÝch th−íc th−êng cã ®¬n vÞ lµ m, side TRUE nh−ng cã thÓ bÊt cø ®¬n vÞ g× „ Sphere # ®¬n gi¶n nhÊt trong c¸c nót shape bottom TRUE Xem code Ch¹y vÝ dô { radius 2 # nh−ng còng lµ phøc t¹p } Xem code Ch¹y vÝ dô } (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Nót text CÊu tróc ¶nh bitmap „ Tr¸nh t¹o ra c¸c ®Æc t¶ kü thuËt Web-based 3D/VR. „ Sö dông ¶nh bitmap thay cho mét m« h×nh 3D thËt cô thÓ cã thÓ tiÕt kiÖm „ Text rất hữu Ých ë c¸c hÖ chuyªn gia,vÝ dô nh− trong khoa häc vÒ trùc quan. ®−îc nhiÒu thêi gian xö lý... „ Text „ Tuy vËy viÖc sö dông réng r·i ¶nh bitmap cã thÓ cã nh÷ng bÊt lîi sau: { string “Hi!” # multi-field „ CÊu tróc cña ¶nh sÏ ®−îc gñi cho tr×nh duyÖt ,cã thÓ ph¶i qua mét length 0 # stretch to this width (0=natural width) qu¸ tr×nh th«ng tin chËm. fontStyle FontStyle „ ThiÕt kÕ mét ¶nh bitmap vµ ®−a nã lªn mµn h×nh lµ c«ng ®o¹n xö lý { family“SERIF” # or SANS or TYPEWRITER kh¸ lµ kü l−ìng. style “PLAIN” # or BOLD ITALIC size 4 } } Xem code Chaþ vÝ dô (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Lê Tấn Hùng CNTT- ĐHBK Hà nội Email: hunglt@it-hut.edu.vn Page 2 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  3. CÊu tróc trong VRML HÖ täa ®é „ Appearance „ Mét file VRML x©y dùng nªn c¸c thµnh phÇn cña thÕ giíi VRML { texture ImageTexture { url “skin.gif” # GIF, JPG or PNG „ Mét file thµnh ®−îc x©y dùng trong thÕ giíi hÖ to¹ ®é repeatSTRUE # repeat or stretch? „ Theo mÆc ®Þnh , tÊt c¶ c¸c vËt thÓ ®−îc x©y dùng tõ gèc cña hÖ to¹ ®é repeatT TRUE } „ VRML sö dông hÖ to¹ ®é thuËn .hÖ to¹ ®é §Ò C¸c } Xem code Ch¹y vÝ dô „ §¬n vÞ chuÈn ®o chÒu dµi vµ kho¶ng c¸ch trong VRML lµ m. „ C¸c Texture cã thÓ lµ mét URL ®Çy ®ñ hoÆc chØ lµ mét URLt−¬ng ®èi ®¬n „ Gãc lµ radian. gi¶n nh− sö dông ë trªn. „ Cã ba kiÓu nót texture lµ : ImageTexture, MovieTexture and PixelTexture „ Mét vßng quay lµ 2π radian. Xem code Ch¹y vÝ dô „ 360 lµ 2π radian, kho¶ng 6.28 radian, 90 lµ π/2 radian, kho¶ng 1.57 radian. (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 ChuyÓn ®æi mét hÖ to¹ ®é Tr−êng children „ Mét nót transform t¹o ra mét hÖ to¹ „ Nhãm c¸c nót Transform t¹o ra „ Tr−êng children bao gåm mét danh s¸ch mét hay nhiÒu nót ®é cã: mét nhãm víi hª to¹ ®é cña chÝnh n㠄 Positioned :gèc • rotation – h−íng „ Transform { . . . „ Rotated :gãc quay • scale – kÝch cì children [ „ Scaled :tû lÖ • translation – vÞ trÝ Shape { . . . } „ Liªn hÖ víi hÖ to¹ ®é cha cña nã • children – c¸c vËt thË t¹o Shape { . . . } „ C¸c vËt thÓ ®−îc x©y dùng trong hÖ Transform { Transform { . . . } . . . ] } to¹ ®é míi ®−îc ®Þnh vÞ ,quay vµ tû lÖ translation . . . cïng víi nã. rotation . . . scale . . . children [ . . . ] } (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Nót transform Nót transform „ Tr−êng Translation ®Þnh vÞ hÖ to¹ „ Tr−êng Rotation ®Þnh h−íng hÖ to¹ ®é „ Co gi·n , xoay vµ dÞch mét hÖ to¹ ®é, c¸i nµy sau c¸i kia ®é bëi X,Y vµ Z quay quoanh mét c¹nh bëi mét gãc Transform { „ Transform { # X Y Z quay translation 2.0 0.0 0.0 translation 2.0 0.0 0.0 children • Gãc th−êng ®−îc ®u b»ng ®¬n rotation 0.0 0.0 1.0 0.52 [...]} vÞ radian scale 0.5 0.5 0.5 „ Tr−êng Scale ®Ó co hay gi¶n mét • radian = ®é/ 180.0 * 3.141 children [ . . . ] } hÖ to¹ ®é dùa vµu hÖ sè tû lÖ ë Transform { # X Y Z Angle „ C¸c thao t¸c ®−îc thùc hiÖn tõ d−íi lªn bottom-up: c¸c trôc X, Y, vµ Z rotation 0.0 0.0 1.0 0.52 „ Tr−êng children ®−îc co gi·n ,xoay råi sau ®ã míi dÞch „ Transform { # X Y Z scale 0.5 children [ . . . ] } „ Thø tù gi÷a c¸c tr−êng ®−îc Ên ®Þnh, ®éc lËp víi trËt tù cña c¸c tr−êng 0.5 0.5 children [ . . . ] } Xem code Ch¹y vÝ dô (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Lê Tấn Hùng CNTT- ĐHBK Hà nội Email: hunglt@it-hut.edu.vn Page 3 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  4. nót Appearance nót Material „ C¸c vËt thÓ gèc cã mµu ph¸t ra tõ b҄ Mét nót Appearance miªu t¶ toµn „ Mét nót Material ®iÒu khiÓn c¸c thuéc tÝnh vÒ chÊt liÖu cña vËt thÓ ngoµi lµ mµu tr¾ng bé h×nh d¹ng cña vËt thÓ • diffuseColor – mµu bãng chÝnh „ B¹n cã thÓ ®iÒu khiÓn mµu cña mét • emissiveColor – mµu ph¸t chÝnh • Tr−êng material gåm c¸c vËt thÓ: thuéc tÝnh nh− color, • transparency – Trong suèt hay kh«ng transparency, etc. „ Shape { • Mµu bãng „ Shape { appearance Appearance { • Mµu ph¸t ra material Material { • TÝnh trong suèt appearance Appearance { diffuseColor 0.8 0.8 0.8 • TÝnh kh«ng chiÕu s¸ng material . . . } emissiveColor 0.0 0.0 0.0 • C−êng ®é ¸nh s¸ng bao geometry . . . } transparency 0.0 } quanh } geometry . . . } (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Nót material B¶ng mµu th−êng dïng „ Nót Material còng cã thÓ ®iÒu khiÓn tÝnh chiÕu s¸ng cña mét vËt thÓ ambient diffuse specular • specularColor – ®iÓm cã mµu næi bËt nhÊt M« t¶ shininess Intensity Color Color • shininess – kÝch cë chç næi bËt nhÊt • ambientIntensity – hiªu øng ¸nh s¸ng xung quanh Aluminum 0.30 0.30 0.30 0.50 0.70 0.70 0.80 0.10 „ Shape { Copper 0.26 0.30 0.11 0.00 0.75 0.33 0.00 0.08 appearance Appearance { Gold 0.40 0.22 0.15 0.00 0.71 0.70 0.56 0.16 material Material { specularColor 0.71 0.70 0.56 Metalic Purple 0.17 0.10 0.03 0.22 0.64 0.00 0.98 0.20 shininess 0.16 Metalic Red 0.15 0.27 0.00 0.00 0.61 0.13 0.18 0.20 ambientIntensity 0.4 } } Plastic Blue 0.10 0.20 0.20 0.71 0.83 0.83 0.83 0.12 geometry . . . } Xem code Ch¹y vÝ dô (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 nót Group KÕt nèi tíi mét vÞ trÝ kh¸c „ Th«ng th−êng chóng ta cÈn nhãm c¸c „ B¹n cã thÓ nhãm c¸c vËt thÓ l¹i víi „ Còng nh− trong trang Web , siªu liªn kÕt còng s½n cã trong VRML. ®èi t−îng l¹i víi nhau. VRML dïng nót nhau ®Ó t¹o thµnh mét vËt thÓ phøc „ Cã thÓ kÕt nèi tíi c¸c kiÓu d÷ liÖu hîp lÖ , bao gåm c¸c trang VRML Group ®Ó thùc hiÖn ®iÒu nµy t¹p . kh¸c, c¸c trang HTML vµ c¸c øng dông CGI . „ Nót Group cã thÓ cã c¸c nót con. „ VRML cã nhiÒu nót group bao gåm „ VÞ trÝ (x, y, z) cña con trá cã thÓ ®−îc truyÒn tíi URL, chØ thùc sù cã Ých víi „ Cã thÓ chÝnh c¸c nót con lµ c¸c nót Group { . . . } c¸c øng dông CGI. group . Switch { . . . } „ Cã c¸c kiÓu nót group sau: Transform { . . . } Billboard { . . . } Transform Group LOD Anchor { . . . } Anchor Inline Inline { . . . } Collision Switch Billboard Xem code Chaþ vÝ dô (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Lê Tấn Hùng CNTT- ĐHBK Hà nội Email: hunglt@it-hut.edu.vn Page 4 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  5. C¸c nót Group-Switch-Transform Nót Anchor vµ Inline „ Nót Group t¹o ra c¸c nót c¬ b¶n „ Nót Transform t¹o ra mét nhãm dùa „ Nót Anchor t¹o ra mét nhãm mµ ho¹t Nót Inline t¹o ra mét nhãm ®Æc biÖt tõ kh¸c trªn chÝnh hÖ to¹ ®é cña nã ®éng nh− kiÓu cã thÓ kÝch chuét ®−îc néi dung cña mét file VRML kh¸c „ Mçi nót child trong group lµ ®−îc „ Mçi nót child lµ ®−îc hiÓn thÞ „ ChØ nót child lµ ®−îc hiÓn thÞ „ Nót con ®äc tõ file ®−îc chän bëi hiÓn thÞ Transform { URL „ KÝch chuét vµo nót child theo sau „ Group { children [ . . . ] } translation 0.0 0.0 0.0 bëi mét URL „ Mçi nót child lµ ®−îc hiÓn thÞ „ Nót nhãm Switch t¹o ra mét nhãm cã rotation 0.0 1.0 0.0 0.0 thÓ chuyÓn cho nhau. „ Tr−êng description ®Æt tªn cho nót „ Inline { url "table.wrl" } scale 1.0 1.0 1.0 children [ . . . ] } anchor „ ChØ cã mét nót child group is „ Inline { trong nhãm lµ ®−îc hiÓn thÞ „ Nót nhãm Billboard t¹o ra mét nhãm víi hÖ to¹®é ®Æc biÖt url "table.wrl" } . . . „ B¹n chän nót child nµo Anchor { Transform { • Mçi nót child ®−îc hiÓn thÞ • Nót con ®−îc ®¸nh sè t−êng displayed url "stairwy.wrl" translation -0.95 0.0 0.0 minh tõ 0 • HÖ to¹ ®é trë l¹i mÆt xem description "Twisty Stairs" rotation 0.0 1.0 0.0 3.14 • A -1 kh«ng chän nót con nµo „ Billboard { children [ . . . ] } children [ Inline { url "chair.wrl" } ] } Switch { whichChoice 0 choice [ . . . ] axisOfRotation 0.0 1.0 0.0 } „ Xem code Ch¹y vÝ dô Xem code Ch¹y vÝ dô Xem code Chaþ vÝ dô children [ . . . ] } (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 §Æt tªn Tõ khãa use „ NÕu nhiÒu vËt thÓ gièng nhau vÒ c¸c „ Có ph¸p DEF t¹o ra tªn cho mét „ Tõ kho¸ USE cho phÐp sö dông „ USE b¾t buéc ph¶i lµ chö hoa yÕu tè h×nh häc hay h×nh d¹ng , b¹n nót mét nót ®· ®−îc ®Æt tªn tr−íc „ Sö dông l¹i nót ®· ®−îc ®Æt tªn ph¶i dïng nhiÒu nót gièng hÖt nhau „ Shape { „ Shape { gäi lµ mét biÕn hay mét thÓ hiÖn „ Thay vµo ®ã , ®Þnh nghÜa mét tªn appearance Appearance { cho nót t×m thÊy ®Çu tiªn appearance Appearance { „ Mét nót ®· ®−îc ®Æt tªn cã thÓ cã material „ Sau ®ã, sö dông tªn ®Êy ®Ó chia sÎ material mét vµi thÓ hiÖn DEF RedColor cho nót t−¬ng tù ë trong ng÷ c¶nh USE RedColor } „ Mçi thÓ hiÖn chia sÎ cïng mét míi Material { diffuseColor 1.0 0.0 0.0 geometry . . . } miªu t¶ vÒ nót ®Êy } } geometry . . . } „ ChØ cã thÓ cã thÓ hiªn mµ tªn „ DEF b¾t buéc ph¶i ký tù hoa Xem code Ch¹y vÝ dô cña nót ®· ®−îc ®Þnh nghÜa „ Cã thÓ ®Æt tªn cho mét nót nµo ®Êy trong cïng mét file „ Tªn cã thÓ lµ hÇu hÕt c¸c chuçi ký tù vµ sè „ Trong mét file tªn ph¶i lµ duy nhÊt (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 −u ®iÓm Giíi thiÖu ho¹t c¶nh „ §Æt tªn vµ sö dông nót: „ C¸c nót nh− Billboard vµ Anchor cã c¸c hµnh ®éng x©y dùng s½n „ L−u nh÷ng g× ®· ®¸nh vµo „ B¹n cã thÓ t¹o ra hµnh ®éng cña riªng b¹n nh− lµm cho c¸c vËt thÓ cã thÓ di chuyÓn,xoay, co gi·n vµ h¬n thÕ n÷a „ Gi¶m kÝch th−íc file „ Chóng ta cÇn mét ph−¬ng thøc ®Ó kÝch , thêi gian ho¸, vµ ®¸p øng mét „ Cho phÐp thay ®æi nhanh chãng c¸c vËt thÓ cã cïng thuéc tÝnh chuçi c¸c sù kiÖn theo mét trËt tù ®Ó mét sù t−¬ng t¸c tèt h¬n gi÷a ng−êi dïng vµ thÕ giíi bªn ngoµi „ T¨ng tèc ®é cho qu¸ tr×nh xö lý trªn tr×nh duyÖt „ HÇu hÕt c¸c nót ®Òu cã thÓ lµ thµnh phÇn trong mét dßng ho¹t c¶nh „ Tªn còng cÇn thiÕt cho c¶nh ®éng ... „ Nót ho¹t ®éng nh− c¸c phÇn ®iÖn tö ¶o „ Nót cã thÓ göi vµ nhËn c¸c sù kiÖn „ C¸c ®−êng d©y nèi c¸c nót l¹i víi nhau „ Mét sù kiÖn lµ mét th«ng b¸o ®−îc göi gi÷a c¸c nót „ Mét gi¸ trÞ d÷ liÖu (gièng nh− sù dÞch chuyÓn) „ Thêi gian hoµn thµnh (Khi sù kiÖn ®−îc chøng nhËn lµ ®· ®−îc göi) (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Lê Tấn Hùng CNTT- ĐHBK Hà nội Email: hunglt@it-hut.edu.vn Page 5 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  6. Thªm c¸c sù kiÖn Cµi ®Æt ho¹t c¶nh „ §Ó quay mét vËt thÓ: „ §Ó cµi ®Æt mét dßng ho¹t c¶nh , b¹n cÇn ba thø : • Nèi mét nót mµ göi sù kiÖn rotation víi tr−êng rotation cña nót „ Mét nót göi sù kiÖn Transform „ Nót ph¶i ®−îc ®Æt tªn víi c©u lÖnh DEF „ §Ó lµm mét vËt thÓ nhÊp nh¸y: „ Mét nót nhËn sù kiÖn • Nèi nót göi sù kiÖn color víii tr−êng diffuseColor cña nót „ Nót ph¶i ®−îc ®Æt tªn víi c©u lÖnh DEF Material „ Mét ®−êng d©y kÕt nèichóng l¹i „ Mçi nót cã c¸c tr−êng , th«ng tin vµo vµ th«ng tin cÇn cã: „ field: Mét gi¸ trÞ d÷ liÖu ®−îc l−u trö „ eventIn: ®Çu vµo „ eventOut: ®Çu ra „ Mét tr−êng exposedField viÕt gän cho mét gi¸ trÞ d÷ liÖu, ®Çu vµo vµ ®Çu ra (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 C¸c vÝ dô Vµo- ra Tõ khãa route „ Nót OrientationInterpolator „ Nót Transform cã c¸c sù kiÖn „ C©u lÖnh ROUTE cho phÐp kÕt nèi „ C¸c quy −íc vÒ ®Æt tªn hai nót l¹i víi nhau : cã sù kiÖn ra : vµo: „ HÇu hÕt c¸c nót ®Òu cã exposedFields „ Tªn nót göi vµ sù kiÖn ra „ NÕu tr−êng exposed tªn lµ xxx, th×: „ value_changed ®−a ra gi¸ trÞ „ set_translation „ Tªn nót nhËn vµ s− kiÖn vµu • set_xxx lµ mét sù kiÖn vµo gãc xoay „ set_rotation „ ROUTE ®−îc g¸n cho tr−êng „ set_scale MySender.rotation_changed „ Nót PositionInterpolator cã TO MyReceiver.set_rotation • xxx_changed lµ sù kiÖn ra sù kiÖn ra : ®−îc göi ®i khi tr−êng ®ã thay „ Nót Material cã c¸c sù kiÖn vµu: „ ROUTE vµ TO b¾t buéc ph¶i lµ ®æi „ value_changed ®−a ra vÞ trÝ „ set_diffuseColor ký tù hoa • C¸c tiÕp ng÷ set_ vµ _changed „ Nót TimeSensor cã sù kiÖn ra: „ set_emissiveColor lµ tuú chän nh−ng nªn cã ®Ó ph©n biÖt „ time ®−a ra thêi gian „ set_transparency „ Nót Transform cã: Tr−êng rotation • Sù kiÖn vµo set_rotation • Sù kiÖn ra rotation_changed (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Ho¹t c¶nh ®iÒu khiÓn thêi gian „ Ho¹t c¶nh cho phÐp thay ®æi qua thêi gian: „ Nót TimeSensor cho phÐp b¹n ®iÒu khiÓn thêi gian b¾t ®Çu vµ kÕt thóc • VÞ trÝ – mét « t« ®ang ®i „ Nót c¶m øng t¹o sù kiÖn thêi gian khi nã ®ang ch¹y • H−íng - mét m¸y bay ®ang l−în „ §Ó kÝch ho¹t , dÉn c¸c sù kiÖn thêi gian tíi c¸c nót kh¸c • Mµu s¾c – ®æi mïa „ Nót TimeSensor t¹o ra hai sù kiÖn thêi gian lµ absolute and fractional „ Ho¹t c¶nh b¾t buéc ®iÒu khiÓn qua thêi gian: „ Sù kiÖn thêi gian Absolute t¹o ra thêi gian thùc • Khi nµo th× b¾t ®Çu vµ dõng • Thêi gian tuyÖt ®èi ®−îc ®u b»ng gi©y tõ 12:00h mång 1 th¸ng 1 • Møc ®é nhanh chËm n¨m 1970! • RÊt cã Ých cho viÖc triÖu gäi mét sù kiÖn ë thêi gian cô thÓ (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Lê Tấn Hùng CNTT- ĐHBK Hà nội Email: hunglt@it-hut.edu.vn Page 6 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  7. sö dông thêi gian ph©n ®o¹n Nót timesensor „ Sù kiÖn thêi gian ph©n ®o¹n nhËn c¸c gi¸ trÞ sè tõ 0.0 tíi 1.0 „ Nót TimeSensor t¹o ra c¸c sù kiÖn „ §Ó t¹o ra bé thêi gian ch¹y liªn tôc: dùa vµo thêi gian „ loop TRUE „ Khi nót c¶m øng thêi gian b¾t ®Çu , ®Çu ra cña nã lµ 0.0 „ Thêi gian b¾t ®Çu_ startTime vµ „ stopTime
  8. Colorinterpolator-scalarinterpotator „ OrientationInterpolator „ PositionInterpolator „ ColorInterpolator „ ScalarInterpolator „ Nót OrientationInterpolator m« „ Nót PositionInterpolator m« t¶ „ Nót ColorInterpolator m« t¶ ®−êng „ Nót ScalarInterpolator m« t¶ t¶ ®−êng dÉn h−íng ®−êng dÉn vÞ trÝ hay tû lÖ dÉn mµu s¾c ®−êng dÉn v« h−íng • key – kho¸ thêi gian ph©n • key – kho¸ thêi • key – kho¸ thêi gian ph©n • key – kho¸ thêi gian ph©n ®o¹n gian ph©n ®u¹n ®o¹n ®o¹n • keyValue – kho¸ vÒ xoay • keyValue – kho¸ (gåm c¹nh vµ gãc) vÞ trÝ (hoÆc tû lÖ) • keyValue – kho¸ mµu • keyValue – kho¸ v« „ OrientationInterpolator { key [ • PositionInterpolator { (®á,xanh d−¬ng,xanh da trêi) h−íng (dïng cho bÊt cø 0.0, . . . ] keyValue [ 0.0 1.0 0.0 key [ 0.0, . . . ] keyValue [ „ ColorInterpolator { key [ 0.0, . . . ] vËt thÓ nµo) 0.0, . . . ] } 0.0 0.0 0.0, . . . ] } keyValue [ 1.0 1.0 0.0, . . . ] } „ ScalarInterpolator { key [ 0.0, . . „ Th−êng göi gi¸ trÞ vÒ gãc xoay • Th−êng göi gi¸ trÞ vÞ trÝ vµo „ Th−êng göi vµu sù kiÖn ®Çu vµo . ] keyValue [ 4.5, . . . ] } vµo sù kiÖn set_rotation cña nót sù kiÖn set_scale cña nót set_diffuseColor hay „ Th−êng göi vµo sù kiÖn Transform Transform set_emissiveColor cña nót set_transparency cña nót Material Material „ Xem code Ch¹y vÝ dô „ Xem code Ch¹y vÝ dô (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 nót Sensor nót Sensor „ Cã 7 kiÓu nót sensor . „ Nót ProximitySensor ph¸t hiÖn ra vÞ trÝ quan s¸t gÇn nhÊt „ Nót sensor dß c¸c hµnh ®éng cña ng−êi dïng vµ ph¸t ra mét „ Nót TouchSensor ph¸t hiÖn sù kiÖn kÝch chuét sù kiªn. „ Nót TimeSensor lµ bé ®Õm thêi gian „ B¹n cã thÓ liªn kÕt c¸c sù kiÖn nµy tíi c¸c nót kh¸c ®Ó t¹o ra „ TÊt c¶ c¸c nót CylinderSensor, PlaneSensor and chu kú ®¬n gåm cã nguyªn nh©n_kÕt qu¶. SphereSensor ph¸t hiÖn tr¹ng th¸i kÐo c¸c vËt thÓ. „ Bèn bµi cuèi cïng trong phÇn “VRML Resources | Example „ Nót VisibilitySensor nhËn biÕt mét ®èi t−îng lµ h÷u h×nh ®èi VRML Worlds” cña Website lµ nh−ng vÝ dô hay vÒ c¸c nót víi ng−êi dïng sensor vµ liªn kÕt víi c¸c sù kiÖn. (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 nót Sensor viewer Dïng visibilitysensor vµ proximitysensor „ Motivation „ Hai nót VisibilitySensor vµ ProximitySensor c¶m biÕn vïng vËt thÓ „ C¶m øng vÞ trÝ ng−êi dïng cho phÐp kÝch ho¹t c¸c ho¹t c¶nh d¹ng hép • Khi mét vïng h÷u h×nh ®èi víi ng−êi dïng • center – t©m vïng • Khi ng−êi dïng ë trong mét vïng nµo ®ã • size – kÝch th−íc vïng • Khi ng−êi dïng va ch¹m víi mét vËt thÓ nµo ®ã „ LOD vµ Billboard lµ c¸c nót ®Æc biÖt cã c¸c ®¸p øng víi viewer sensors „ C¶ hai nót cã ®Çu ra gièng nhau : ®−îc x©y dùng s¨n • Sù kiÖn enterTime – göi thêi gian vµo vïng vµo hay lóc h÷u h×nh „ Cã 3 kiÓu nót viewer sensor: • Sù kiÖn exitTime – göi thêi gian vµo vïng ra hay lóc kh«ng h÷u • Nót VisibilitySensor c¶m biÕn nÕu ng−êi dïng cã thÓ thÊy mét h×nh vïng nµo ®ã a region • Nót ProximitySensor c¶m biÕn khi ng−êi dïng ®Õn ph¹m vi xung • Sù kiÖn isActive – göi true ë vïng vµo, false ë vïng ra quanh vËt thÓ • Nót Collision c¶m biÕn xung ®ét gióp ®iÒu khiÓn vµ ph¸t hiÖn xung ®ét (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Lê Tấn Hùng CNTT- ĐHBK Hà nội Email: hunglt@it-hut.edu.vn Page 8 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  9. Nót VisibilitySensor nót ProximitySensor „ Nót VisibilitySensor c¶m biÕn nÕu ng−êi dïng nh×n thÊy hoÆc ngõng „ Nót ProximitySensor c¶m biÕn khi ng−êi dïng vµo/ rêi khái mét vïng nµo ®ã quan s¸t mét vïng nµo ®ã • center vµ size – kÝch th−íc vµ vÞ trÝ cña vïng • enterTime vµ exitTime –göi thêi gian vµo vïng vµo/vïng ra • center vµ size –t©m vµ kÝch th−íc cña vïng • isActive – göi gi¸ trÞ true/false nÕu vµo vïng vµo/ vïng ra • enterTime vµ exitTime – göi thêi gian vµo\ra „ DEF ProxSense ProximitySensor { center 0.0 0.0 0.0 size 14.0 14.0 14.0 } ROUTE ProxSense.enterTime TO Clock.set_startTime • isActive –göi gi¸ trÞ true/false vµo vïng vµo\vïng ra „ ProximitySensor „ DEF VisSense VisibilitySensor { center 0.0 0.0 0.0 size 14.0 14.0 14.0 • Nót ProximitySensor c¶m biÕn khi ng−êi dïng ®ang ë trong } ROUTE VisSense.enterTime TO Clock.set_startTime vïng • position vµ orientation –göi vÞ trÝ vµ h−íng khi ng−êi dïng ®ang ë trong vïng • DEF ProxSense ProximitySensor { . . . } ROUTE • ProxSense.position_changed TO PetRobotFollower.set_translation Xem code Ch¹y vÝ dô (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 nót Collision C¸c nót sensor hµnh ®éng „ Nót Collision c¶m biÕn ®−îc khi tÇm „ Tèi −u ho¸ viÖc ph¸t hiÖn xung ®ét quan s¸t cña ng−êi dïng v−íng c¸c vËt „ Cã 4 nót sensor hµnh ®éng „ C¶m biÕn c¸c vËt thÓ „ Sù kiÖn collision lu«n ®−îc kÝch ho¹t thÓ theo ngÇm ®Þnh chÝnh: „ TÊt c¶ c¸c c¶m biÕn hµnh „ collide – cho phÐp/kh«ng cho „ T¾t nã bÊt cø khi nµu cã thÓ! ®éng c¶m biÕn ®−îc tÊt c¶ phÐp c¶m biÕn „ Tuy nhiªn, mét khi nót collision cha • TouchSensor c¶m biÕn khi „ proxy – vËt thÓ ®¬n gi¶n ®−îc t¾t th× nót child kh«ng thÓ bËt nã trë ch¹m vµo vËt thÓ c¸c vËt thÓ cïng nhãm l¹i! c¶m biÕn thay cho c¸c nót con KÕt qu¶ ph¸t hiÖn xung ®ét lµ tõ ng−êi „ C¶m biÕn ®−îc kÝch ho¹t khi „ dïng va ch¹m víi mét vËt thÓ chø • SphereSensor khi kÐo chuét „ children – c¸c nót con ®−îc c¶m kh«ng ph¶i lµ vËt thÓ va ch¹m víi • CylinderSensor khi kÐo khi con trá cña ng−êi dïng biÕn ng−êi dïng „ collideTime – göi thêi gian khi „ Sö dông nhiÒu nót sensor chuét ch¹m ph¶i vËt thÓ ®−îc c¶m ng−êi dïng ch¹m vµo vËt thÓ „ Mét sè nót sensor cã thÓ c¶m biÕn biÕn „ DEF Collide Collision { collide TRUE cïng mét lóc • PlaneSensor khi kÐo chuét proxy Shape { geometry Box { . . . } } „ B¹n cã thÓ t¹o ra nhiÒu „ Nót Anchor lµ nót c¶m biÕn children [ . . . ] } ROUTE nótvisibility, proximity, and Xem code Ch¹y vÝ dô Collide.collideTime TO collision sensor hµnh ®éng cã môc ®Ých ®Æc biÖt OuchSound.set_startTime „ C¸c vïng c¶m biÕn cã thÓ ch«ng mµ c¸c ®¸p øng ®−îc x©y dùng lªn nhau „ Xem code Ch¹y vÝ dô „ NÕu nhiÒu nót sensor ®−îc kÝch s½n ho¹t, chóng sÏ thùc hiÖn (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Touchsensor vµ spheresensor Cylindersensor-planesensor „ Nót TouchSensor c¶m biÕn sù va „ Nót SphereSensor c¶m biÕn sù „ Nót CylinderSensor nhËn biÕt „ Nót PlaneSensor nhËn biÕt con trá ch¹m cña con trá dich chuyÓn con trá t¹o ra sù con trá ®−îc rª vµ lµm cho vËt ®−îc rª vµ lµm dÞch chuyÓn vËt thÓ thÓ xoay quanh h×nh trô trªn mét mÆt ph¼ng • isOver – göi gi¸ trÞ true/false xoayquanh h×nh cÇu khi con trá ®ang ë trong hay • isActive – göi gi¸ trÞ • isActive – göi c¸c gi¸ trÞ • isActive –göi c¸c gi¸ trÞ true/false khi chuét ®−îc ë ngoµi vïng vËt thÓ true/false khi chuét ®−îc nhÊn hay th¶ true/false khi con chuét nhÊn hay th¶ • isActive – göi gi¸ trÞ ®−îc nhÊn hay th¶ • translation_changed – lµm true/false khi chuét ®−îc • rotation_changed – lµm cho vËt thÓ dÞch chuyÓn khi nhÊn hay th¶ • rotation_changed - ®−a cho vËt thÓ quay khi kÐo rª chuét • touchTime –®−a ra thêi gian ra sù quay khi rª con „ Transform { children [ DEF „ Transform { children [ DEF khi chuét ®−îc th¶ chuét Rotator CylinderSensor { } Mover PlaneSensor { } DEF DEF RotateMe Transform { . MoveMe Transform { . . . } ] } „ Transform { children [ DEF „ Transform { children [ DEF . . } ] } ROUTE ROUTE Touched TouchSensor { } Rotator SphereSensor { } Mover.translation_changed TO Shape { . . . } . . . ] } DEF RotateMe Transform { . Rotator.rotation_changed MoveMe.set_translation TO RotateMe.set_rotation Xem code Ch¹y vÝ dô . . } ] } ROUTE Rotator.rotation_changed „ Xem code Ch¹y vÝ dô „ Xem code Ch¹y vÝ dô TO RotateMe.set_rotation (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Lê Tấn Hùng CNTT- ĐHBK Hà nội Email: hunglt@it-hut.edu.vn Page 9 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  10. Sö dông nhiÒu nót sensor vÝ dô sö dông c¸c nót sensor NhiÒu nót sensor cã thÓ c¶m biÕn cïng mét vËt thÓ nh−ng. . . #Clock to drive animations • NÕu c¸c nót sensor ë trong cïng mét nhãm : DEF Clock TimeSensor { cycleInterval 10.0 loop TRUE } • TÊt c¶ ®Òu cã thÓ ®¸p øng c¸c sù kiÖn # Colour changes for sphere (red -> green -> blue -> red) • NÕu c¸c nót sensors cã ®é s©u kh¸c nhau trong cÊu tróc c©y cña DEF NewColour ColorInterpolator { key [0.0, 0.33, 0.66, 1.0 ] nót : keyValue [1.0 0.2 0.2, 0.2 1.0 0.2, 0.2 0.2 1.0, 1.0 0.2 0.2 ] } • Nót sensor s©u nhÊt sÏ ®¸p øng . . . (Above is Grouped with the object we’re changing) • C¸c nót kh¸c kh«ng ®¸p øng # use clock to run a ColorInterpolator, generating smoothly varying colour ROUTE Clock.fraction_changed TO NewColour.set_fraction # use varying colour value to feed material's diffuseColor field ROUTE NewColour.value_changed TO SphereColour.set_diffuseColor (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 nót Script c¸c ng«n ng÷ kÞch b¶n „ NhiÒu hµnh ®éng qu¸ phøc t¹p ®èi víi c¸c nót ho¹t c¶nh „ Nót Script chän mét ch−¬ng tr×nh „ §Þnh nghÜa giao tiÕp c¸c • TÝnh to¸n ®−êng ®i (vÝ dô lùc hÊp dÉn) kÞch b¶n ®Ó ch¹y: ch−¬ng tr×nh kÞch b¶n øng • Gi¶i thuËt vÒ vËt thÓ (eg. fractals) „ url – chän ch−¬ng tr×nh kÞch dông • C¸c m«i tr−êng cÇn sù c«ng t¸c (vÝ dô game) b¶n „ Nót Script còng khai b¸o giao „ B¹n cã thÓ t¹o ra c¸c nót sensors, interpolators, v©n v©n , b»ng c¸nh sö dông „ DEF Bouncer Script { tiÕp ch−¬ng tr×nh kÞch b¶n c¸c ch−¬ng tr×nh kÞch b¶n viÕt b»ng c¸c ng«n ngö url "bouncer.class" or... • field, eventIn, vµ • Java – ng«n ngö lËp tr×nh rÊt m¹nh url "bouncer.js" or... eventOut – lµ c¸c thao • JavaScript – ng«n ngö kÞch b¶n dÔ häc t¸c xuÊt nhËp • VRMLscript – gièng JavaScript url "javascript: ..." or... • Mçi c¸i cã mét tªn vµ kiÓu Ng«n ng÷ VRML kh«ng b¾t buéc ph¶i hç trî c¸c ng«n ng÷ kÞch b¶n url "vrmlscript: ..." } d÷ liÖu • HÇu hÕt c¸c tr×nh duyªt ®Òu hâ trî JavaScript vµ • C¸c tr−êng cã mét gi¸ trÞ • NhiÒu tr×nh duyªt hç trî Java Xem code Ch¹y vÝ dô khëi ®Çu „ VRMLScript = JavaScript = ECMAScript „ DEF Bouncer Script { field • JavaScript kh«ng gièng Java SFFloat bounceHeight 3.0 • VRMLScript lµ phÇn mÒm cña Cosmo Software hç trî JavaScript eventIn SFFloat set_fraction • C¸c ®Æc t¶ kü thuËt cña ISO VRML gäi lµ ECMAScript, phiªn b¶n cã hç eventOut SFVec3f tr¬ JavaScript value_changed } (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Java Java class „ So víi c¸c ng«n ng÷ nh− „ Khai b¸o giao tiÕp ch−¬ng „ NhËp c¸c package cho líp Java JavaScript/VRMLscript, Java cã tr×nh kÞch b¶n „ File cña ch−¬ng tr×nh kÞch b¶nph¶i import c¸c package cña VRML : • §−îc cung cÊp c¸c c«ng ty ph©n phèi tr×nh duyÖt VRML kh¶ n¨ng: „ Víi ch−¬ng tr×nh kÞch b¶n viÕt „ import vrml.*; • M« ®un ch−¬ng tr×nh tèt b»ng ng«n ng÷ Java t¹o ra mét „ import vrml.field.*; h¬n file class trong tr−êng url cñanót „ import vrml.node.*; • CÊu tróc d÷ liÖu tèt h¬n Script „ T¹o ra c¸c file Java class „ C¸c ch−¬ng tr×nh kÞch b¶n ph¶i ®Þnh nghÜa mét líp cã tÝnh public kÕ thõa tõ líp • Kh¶ n¨ng thùc hiÖn nhanh • file class ®−îc biªn dÞch Script h¬n b»ng ch−¬ng tr×nh kÞch „ public class bounce2 extends Script { . . . } • Truy cËp m¹ng b¶n Java • Ph−¬ng thøc tuú chän initialize ®−îc gäi khi script ®−îc t¶i „ DEF Bouncer Script { field • public void initialize ( ) { . . . } „ Víi nh÷ng c«ng viÖc ®¬n gi¶n th× • Qu¸ tr×nh khëi t¹o xÈy ra khi: sö dông JavaScript/VRMLscript SFFloat bounceHeight 3.0 • Nót Script ®−îc t¹o (th−êng khi tr×nh duyÖt n¹p thÕ giíi c¸c vËt thÓ) eventIn SFFloat • Ph−¬ng thøc shutdown ®−îc gäi ®Õn khi script th«i n¹p „ Nh÷ng ch−¬ng tr×nh phøc t¹p th× set_fraction eventOut • public void shutdown ( ) { . . . } dïng Java SFVec3f value_changed url • Shutdown xÈy ra : "bounce2.class" } • Nót Script bÞ xo¸ • Tr×nh duyÖt n¹p thÕ giíi míi (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Lê Tấn Hùng CNTT- ĐHBK Hà nội Email: hunglt@it-hut.edu.vn Page 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  11. Sù kiÖn -event Tr−êng eventout tõ java „ §¸p øng mét sù kiÖn „ Truy nhËp c¸c tr−êng tõ Java „ Truy nhËp tr−êng eventOuts tõ „ VÝ dô Java script • Ph−¬ng thøc „ Mçi tr−êng giao tiÕp cã thÓ ®−îc Java „ T¹o nót interpolator víiqu¶ bãng processEvent ®−îc gäi ®äc vµ viÕt „ Mçi giao tiÕp eventOut cã thÓ ®äc nÈy råi tÝnh träng lùc nh− chuyÓn mçi khi mét sù kiÖn nhËn • Gäi getField ®Ó ®äc vµ ghi ®éng nÈy ngang tõ d÷ liÖu ®Çu ®−îc , chuyÓn mét ®èi tr−êng cña ®èi t−îng • gäi getEventOut ®Ó ®äc vµo lµ thêi gian ph©n ®o¹n t−îng sù kiÖn chøa „ obj = (SFFloat) getField( tr−êng eventOut cña ®èi „ Nót cÇn: DEF Ball Transform { . • Gi¸ trÞ cña sù kiÖn "bounceHeight" ); t−îng . . } DEF Clock TimeSensor { . . • Thêi gian • Gäi getValue ®Ó lÊy gi¸ trÞ „ obj = (SFVec3f) . } DEF Bouncer Script { . . . } „ public void processEvent( cña tr−êng getEventOut( Event event ) { . . . } „ lastval = obj.getValue( ); "value_changed" ); • Gäi setValue ®Æt gi¸ trÞ • Gäi getValue ®äc gi¸ trÞ Xem code vrml cho mét tr−êng cuèi cïng ®−îc göi „ lastval = obj.getValue( ); „ obj.setValue( newval ); Xem code java • Gäi setValue ®Ó göi mét sù kiÖn „ obj.setValue( newval ); (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002 Lê Tấn Hùng CNTT- ĐHBK Hà nội Email: hunglt@it-hut.edu.vn Page 11 CuuDuongThanCong.com https://fb.com/tailieudientucntt
nguon tai.lieu . vn