Đề tài Tìm hiểu ngôn ngữ VRML

Tài liệu Đề tài Tìm hiểu ngôn ngữ VRML: Tìm hiểu ngôn ngữVRML Lời nói đầu Trong xu thế tin học hoá toàn bộ cuộc sống đang diễn ra tấp nập hiện nay,lĩnh vực đồ hoạ đóng góp một vai trò cực kỳ to lớn.Ở đâu ta cũng có thể tìm thấy những minh hoạ cho việc áp dụng đồ hoạ máy tính vào cuộc sống : xử lý ảnh, phim hoạt hình, đặc biệt là thực tại ảo(Virtual Reality_VR)..Thực tại ảo,là một nghành công nghệ cao,có ứng dụng đặc biệt rộng rãi.Từ các trò chơi 3D cực kì sống động đến những mô phỏng phức tạp trong công nghiệp và khoa học công nghệ(mô phỏng các vụ thử hạt nhân,mô phỏng thế giới ảo dùng để huấn luỵện phi công…),từ những trường hợp đơn giản đến các trường hợp cực kì quan trọng. Một phần quan trọng của VR là mô phỏng thế giới thực xung quanh chúng ta.Để làm được điều này, chúng ta có thể dùng ngôn ngữ VRML(Virtual Reality Modeling Language).Đây là một ngôn ngữ tương đối đơn giản nhưmg cực kỳ hiệu quả.Với VRML,kết hợp với trình duyệt IE hay Nescape,chúng ta có thể mô phỏng thế giới quanh ta một cách như ý.Trong thế giới đó,c...

doc47 trang | Chia sẻ: hunglv | Lượt xem: 1609 | Lượt tải: 1download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Tìm hiểu ngôn ngữ VRML, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tìm hiểu ngôn ngữVRML Lời nói đầu Trong xu thế tin học hoá toàn bộ cuộc sống đang diễn ra tấp nập hiện nay,lĩnh vực đồ hoạ đóng góp một vai trò cực kỳ to lớn.Ở đâu ta cũng có thể tìm thấy những minh hoạ cho việc áp dụng đồ hoạ máy tính vào cuộc sống : xử lý ảnh, phim hoạt hình, đặc biệt là thực tại ảo(Virtual Reality_VR)..Thực tại ảo,là một nghành công nghệ cao,có ứng dụng đặc biệt rộng rãi.Từ các trò chơi 3D cực kì sống động đến những mô phỏng phức tạp trong công nghiệp và khoa học công nghệ(mô phỏng các vụ thử hạt nhân,mô phỏng thế giới ảo dùng để huấn luỵện phi công…),từ những trường hợp đơn giản đến các trường hợp cực kì quan trọng. Một phần quan trọng của VR là mô phỏng thế giới thực xung quanh chúng ta.Để làm được điều này, chúng ta có thể dùng ngôn ngữ VRML(Virtual Reality Modeling Language).Đây là một ngôn ngữ tương đối đơn giản nhưmg cực kỳ hiệu quả.Với VRML,kết hợp với trình duyệt IE hay Nescape,chúng ta có thể mô phỏng thế giới quanh ta một cách như ý.Trong thế giới đó,có các vật thể,có các tương tác và có các cảm biến y như thế giới thực.Ứng dụng của VRML cũng rất rộng rãi : mô phỏng nhà cửa,thiết kế các phòng học ảo,các thiết bị thí nghiệm ảo, lập trình không gian ảo… Trong bài tập lớn môn học này,em đã tìm hiểu về VRML và dùng ngôn ngữ VRML để mô phỏng toà nhà C14-15 của trường đại họcBKHN.Tuy được sự hướng dẫn tận tình của thầy Hùng nhưng do thời gian và năng lực còn có hạn nên kết quả còn nhiều thiếu sót.Tuy nhiên,em rất cám ơn thầy Hùng vì môn học và bài tập lớn này đã đem lại cho em nhiều hiếu biết về thế giới đồ hoạ,mở ra cho chúng em một hướng đi mới trong lĩnh vực tin học. BÁO CÁO BÀI TẬP LỚN MÔN HỌC "ĐỒ HOẠ MÁY TÍNH VÀ HIỆN THỰC ẢO" I.Giới thiệu về VRML 1.Về ngôn ngữ VRML a,VÒ tr×nh duyÖt §iÒu ®Çu tiªn b¹n cÇn lµ VRML browser, ®Ó quan s¸t c¸c thÕ giíi cña b¹n. PhÇn lín c¸c brower VRML ho¹t ®éng cho Nescape vµ Internet Explorer, c¸c browser cã s½n ®èi víi c¸c hÖ ®iÒu hµnh. §Ó biÕt thªm th«ng tin b¹n h·y tra trong VRML Repository. b,Soạn thảo VRML §iÒu tiÕp theo b¹n cÇn lµ t¹o nªn c¸c thÕ giíi cña b¹n. Cã hai c¸ch ®Ó thùc hiÖn ®iÒu nµy. §Çu tiªn b¹n cã thÓ sö dông mét trong c¸c c«ng cô t¹o ra VRML, chÝnh lµ c¸c m« h×nh 3D mµ b¹n cã thÓ t¹o ra thÕ giíi cña b¹n. Mét ph­¬ng ph¸p thùc hiÖn VRML lµ m· ho¸ b»ng tay, tÊt c¶ b¹n cÇn lµ viÖc so¹n th¶o v¨n b¶n wordpad hoÆc notepad. VrmlPad lµ bé so¹n th¶o Vrml ®Æc biÖt hiÖu qu¶ víi ®Æc ®iÓm næi bËt có ph¸p. Lo¹i ®¬n gi¶n ®­îc m· ho¸ chØ ra, ®­îc cÊt d­íi file cã d¹ng filename.wrl. Sau ®ã b¹n cã thÓ t¶i vµo browser vµ lÊy ra ®Ó xem. NÕu b¹n sö dông bé so¹n th¶o phøc t¹p h¬n, nh­ Wordpad, h·y ®¶m b¶o cÊt d­íi file ®¬n gi¶n hoÆc nÕu kh«ng nã sÏ kh«ng lµm viÖc. Lµm viÖc víi VRML ch­a cã kinh nghiÖm, nã cã thÓ rÊt khã ®Ó t¹o ra c¸c ®èi t­îng phøc t¹p. §Ó thùc hiÖn ®iÒu nµy b¹n cÇn ph¶i sö dông hoÆc c«ng cô b¶n quyÒn møc cao hoÆc ng«n ng÷ m« h×nh ho¸. NÕu b¹n ®i ®Õn c¸c lùa chän muén h¬n, b¹n cã thÓ sÏ cÇn vµi lo¹i file ch­¬ng tr×nh biªn dÞch ®Ó chuyÓn gi÷a c¸c d¹ng m« h×nh ho¸ vµ VRML. Bé biªn dÞch miÔn phÝ lµ crossroads. C¸c c«ng cô VRML cÊp cao cã s½n ®èi víi nhiÒu c«ng ty. c. Kü thuËt nÐn, MIME vµ xuÊt b¶n Sù më réng th«ng th­êng cho c¸c file VRML lµ .wrl vµ .wrz sö dông cho viÖc nÐn VRML. Browser cã thÓ ®äc c¸c file VRML bÞ nÐn bëi GZIP. C¸c file nÐn cã thÓ sö dông nh­ .wrz, .wrl.gz hoÆc sù më réng chuÈn .wrl. GZIP lµ mét chuÈn c©n b»ng trªn c¸c hÖ thèng UNIX nh­ng b¹n cã thÓ nhËn thÊy trªn phiªn b¶n PC hoÆc Mac. C¸ch tèt nhÊt ®Ó nÐn c¸c file lµ sö dông Chisel, lµ bé x¸c nhËn vµ bé ®¸nh gi¸ VRML cã thÓ bÞ cÊt c¸c file VRML GZIP. §©y lµ mét c«ng cô tèt ®Ó cã bÊt kú c¸ch nµo cho viÖc gì rèi m· bëi v× kh«ng cã ai viÕt VRML hoµn h¶o ngay tõ lÇn ®Çu tiªn. TÊt c¶ c¸c tµi liÖu internet theo chuÈn MIME, chuÈn VRML MIME lµ model/vrml, t­¬ng tù nã cã thÓ lµ x-world/x-wrml. Mçi khi b¹n t¹o thÕ giíi cña b¹n, b¹n cÇn t¹o nã lªn trang web ®Ó mäi ng­êi cã thÓ xem nã. §èi víi viÖc nµy b¹n cÇn mét vµi ISP (Internet Service Provider). B¹n cã thÓ sö dông kh«ng gian nµy ®Ó ®­a c¸c file lªn trang web, cã thÓ lµ c¸c file HTML th«ng th­êng. d. Headers vµ chó thÝch. VRML(Virtual Reality Modeling Language), là ngôn ngữ cho phép mô tả các đối tượng 3D của thể giới thực, và chạy trên môi trường web. Nó cho phép xây dựng nên các file . wrl có thể mở được bằng các trình duyệt web như IE hay NESCAPE. Một file vrml có dạng như sau: Tiêu đề file: #VRML V2.0 utf8 trong đó utf8 là cụm từ cho phép dùng các ký tự quốc tế trong file VRML sau đó là các nút. §iÒu nµy nãi cho c¸c browser xem xÐt file VRML, vµ phiªn b¶n nµy nã ®ang sö dông. Trong tr­êng hîp nµy nã lµ phiªn b¶n 2.0. VRML lµ tr­êng hîp dÔ bÞ ¶nh h­ëng(case sensetive), viÖc sö dông chÝnh x¸c nh­ b¹n ®· thÊy. PhÇn utf8 th«ng b¸o cho browser chuÈn chuçi v¨n b¶n ®Ó sö dông. VRML 1.0 hoÆc lµ ascii hoÆc utf8 nh­ng phiªn b¶n 2.0 chØ lµ utf8, tèt nhÊt ®Ó sö dông. BÊt kú dßng nµo b¾t ®Çu víi kÝ tù # lµ chó thÝch, vµ bÞ lê ®i khái bé ph©n tÝch có ph¸p VRML. TiÕp theo lµ VRML hîp lÖ. e,C¸c nót trong VRML Nút đầu tiên thường là nút WORLDINFO chứa thông tin đặc tả về file vrml sau đó là các loại nút khác để xây dựng nên file vrml. Nót nµy chøa th«ng tin chung vÒ thÕ giíi ( the world) nh­ tiªu ®Ò cña thÕ giíi, ®­îc hiÓn thÞ trong thanh tiªu ®Ò cña cö sæ browser t­¬ng tù nh­ cê TITLE trong HTML. WorldInfo còng cã thÓ chøa mét chuçi th«ng tin, chøa c¸c th«ng tin kh¸c vÒ file. B¹n cã thÓ ®Æt vµo c¸c tõ kho¸ cho c¸c search engine. Mét nót WorldInfo mÉu ®­îc chØ ra ë d­íi ®©y: WorldInfo { title "Floppy's VRML97 Tutorial Example 1" info ["(C) Copyright 1999 Vapour Technology" "guide@vapourtech.com"] } Cã thÓ cã c¸c chuçi phøc t¹p trong tr­êng info, b»ng c¸ch ®Æt chóng bªn trong ngoÆc vu«ng. Tiªu ®Ò kh«ng cÇn ngoÆc vu«ng, khi nã chØ lµ mét chuçi ®¬n lÎ. File VRML cã thÓ cã nhiÒu nót WorldInfo nh­ng chØ cã nót ®Çu tiªn ®­îc ph©n tÝch, c¸c phÇn sau bÞ lê ®i. VRML có 54 loại nút khác nhau, và được chia làm 9 nhóm, bao gồm: . Grouping Nodes : Các nút nhóm . Special Group Nodes: Các nút nhóm đặc biệt . Common Nodes: Các nút chung . Sensor Nodes: Các nút cảm biến . Geometry : Các nút hình học . Geometric Properties Nodes: Các nút thuộc tính hình học . Appearance Nodes : Các nút hình dáng . Interpolators Nodes Các nút nội suy . Bindable Nodes: Các có thể ghép nối được Một nút gồm có : Tên nút: Thường bắt đầu bằng chữ in hoa và chỉ có thể là một trong các tên chuẩn do vrml cung cấp, sau đó là đến các trường của nút chúng thường bắt đầu là chữ thường, mổi loại nút có các trường khác nhau. Gía trị của trường có thể là các giá trị thực hoặc các bộ giá trị thực hoặc có thể là một nút cơ bản, ta có thể hình dung các nút như các lớp trong lập trình hướng đối tượng. VRML không cho bạn định nghĩa thêm các nút mới của mình mà chỉ được dùng các nút cơ bản của nó. Một hình dạng hình học bất kỳ có thể được xây dựng qua nút Shape. Cấu trúc của nút này có dạng như sau: Shape{ appearance Appearance{ material Material{ diffuColor 1 0 0 Shininess 0 } textture ImageTextTure{} } geometry Box{} } trong đó appearance là thuộc tính của nút giá trị của nó chỉ có thể là nút Appearance dùng chỉ dạng bề mặt của vật thể . Trong nút Appearance co các trường material dùng để chỉ màu, độ bóng, độ trong suốt của vật thể. Trường textture dùng để chỉ kết cấu của vật thể, giá trị của trường này có thể là các nút ImageTextture,MovieTextture... Chúng ta điểm qua một số nút cơ bản e1.C¸c nót appearrance Khi chóng ta nh×n thÊy ®èi t­îng FBOX chóng ta ®· ®Þnh nghÜa tr­íc ®©y, nót Shape cã mét tr­êng gäi lµ appearance, nã sö dông ®Ó chøa tr­êng Appearance ®­îc chØ ra d­íi ®©y: DEF FBOX Shape { appearance Appearance { material Material { } } geometry Box { } } VÝ dô nµy cã mét tr­êng bªn trong nót Appearance, tr­êng material. Theo c¸ch nµy cã c¸c nót bªn trong c¸c nót d­êng nh­ lµ khã kh¨n, nh­ng cho phÐp b¹n ®Þnh nghÜa c¸c h×nh d¹ng do sö dông DEF vµ USE. §iÒu nµy lµ hiÖu qu¶ trong viÖc cã nhiÒu ®èi t­îng theo cïng mét c¸ch quan s¸t. Nót Appearance cã thÓ chøa tr­êng material vµ texture. tr­êng material chøa nót Material. Nót texture chøa mét trong sè c¸c lo¹i nót kÕt cÊu. Nh÷ng ®iÒu nµy ®­îc m« t¶ trong phÇn sau, tr­íc tiªn chóng ta gi¶i quytÕt c¸c nót Material. e2.C¸c nót Material Nót Material cã thÓ chøa 6 tr­êng, ®ã lµ: diffuseColor mµu s¾c th«ng th­êng cña ®èi t­îng specularColor mµu s¾c næi bËt cña c¸c ®èi t­îng chiÕu s¸ng emissiveColor §èi t­îng 'glows' víi ¸nh s¸ng cña nã tõ mµu s¾c nµy, nã kh«gn ph¶i lµ ¸nh s¸ng mÉu tõ c¸c ®èi t­îng kh¸c. ambientIntensity Sè l­îng c¸c ¸nh s¸ng bao xung quanh mµ ®èi t­îng ph¶n chiÕu. shininess c¸ch ¸nh x¹ cña ®èi t­îng transparency c¸ch lµm râ rµng ®èi t­îng. chó ý mét vµi browsers kh«ng hç trî c¸c ®èi t­îng tõng phÇn kh«ng râ rµng. Ba tham sè ®Çu tiªn lµ c¸c gi¸ trÞ mµu, ba tham sè sau lµ c¸c gi¸ trÞ ®¬n gi¶n gi÷a 0 vµ 1. C¸c mµu s¾c ®­îc chØ râ nh­ c¸c thµnh phÇn red, green vµ blue nh­ trong HTML. B¹n cã thÓ lÊy bÊt kú mµu nµo b¹n thÝch tõ viÖc kÕt hîp c¸c mµu red, green vµ blue. C¸c gi¸ trÞ mµu ®¬n lÎ n»m gi÷a 0( kh«ng mµu) vµ 1(mµu ®Çy ®ñ), v× vËy red ®Çy ®ñ ®­îc ®Þnh nghÜa lµ 1 0 0, tr¾ng lµ 1 1 1, x¸m lµ 0.5 0.5 0.5...C¸ch nµy cã thÓ chØ râ c¸c mµu trong khi sö dông nh­ng b¹n cã thÓ sö dông bé lùa chän mµu trong PaintShop Pro hoÆc mét vµi thø ®Ó cã thÓ nhËn ®­îc c¸c mµu b¹n thÝch vµ chuyÓn chóng thµnh gi¸ trÞ VRML. V× vËy nÕu b¹n muèn t¹o h×nh khèi ban ®Çu, víi mµu xanh b¸n trong suèt, b¹n sÏ ®Þnh nghÜa d¹ng cña nã nh­ sau: Shape { appearance Appearance { material Material { emissiveColor 0 0.8 0 transparency 0.5 } } geometry Box { } } e3,KÕt cÊu h×nh ¶nh( image texture) C¸c mµu s¾c thó vÞ lµ rÊt tèt nh­ng ®Ó tr«ng thùc sù lµ hÊp dÉn, chóng ta ph¶i cã s¬ ®å kÕt cÊu c¸c vËt thÓ. §iÒu nµy ®­îc thùc hiÖn qua tr­êng texture cña nót Appearance . tr­êng nµy chøa ba lo¹i nót kÕt cÊu. Lo¹i ®Çu tiªn chóng ta xem xÐt lµ ImageTexture. §©y lµ s¬ ®å kÕt cÊu c¬ së, ¸nh x¹ toµn bé h×nh ¶nh vµo mét ®èi t­îng. Nót cã thÓ lµ s¬ ®å kÕt cÊu mét ®èi t­îng víi file JPEG hoÆc PNG. Mét vµi browser cã thÓ hç trî nã, nh­ng ®©y kh«ng ph¶i lµ chuÈn. nót cã thÓ chøa ba tr­êng. §Çu tiªn, url chØ râ h×nh ¶nh ®Ó sö dông chuÈn d¹ng URL. B¹n cã thÓ chØ râ danh s¸ch h×nh ¶nh trong c¸c ngoÆc vu«ng, browser sÏ hiÓn thÞ h×nh ¶nh ®Çu tiªn trong danh s¸ch mµ nã t×m thÊy. Hai tr­êng kh¸c lµ repeatS vµ repeatT, th«ng b¸o liÖu kÕt cÊu lÆp l¹i theo h­íng trôc ngang (S) hay trôc däc(T). §iÒu nµy dÉn ®Õn gi¸ trÞ boolean lµ TRUE hoÆc FALSE. chóng chØ thùc sù hiÖu qu¶ khi kÕt hîp víi TextureTransform, chóng ta kh«g tr×nh bµy kü ë phÇn sau. B¹n cã thÓ chØ râ c¸c th«ng tin trong suèt trong c¸c h×nh ¶nh ®· sö dông trong tr­êng hîp nã thay thÕ l¹i sù trong suèt cña c¸c ®èi t­îng ban ®Çu. NÕu b¹n sö dông kÕt cÊu tØ lÖ x¸m, diffuseColor ®­îc nh©n lªn víi ®é dµy cña kÕt cÊu ®Ó t¹o ra kÕt cÊu thùc sù. Thùc tÕ, b¹n cã thÓ t¹o nhiÒu hiÖu qu¶ do kÕt hîp nót Material vµ ImageTexture. Nãi chung, chóng chØ thùc hiÖn nh÷ng g× b¹n mong muèn, v× vËy chØ cÇn quan s¸t vµ mét chót kinh nghiÖm lµ b¹n cã thÓ t¹o ra ®­îc. V× vËy ®Ó ®Þnh d¹ng kÕt cÊu cña hép thø hai víi kÕt cÊu g¹ch, chóng ta cã thÓ sö dông nh­ sau: Appearance { texture ImageTexture { url "brick.jpg" } } khi nót appearance cña hép thø hai. e4. Movie Texture MovieTexture nhËn lÊy phim MPEG vµ s¬ ®å kÕt cÊu lªn mét ®èi t­îng theo c¸ch nh­ ImageTexture. Nã cã ba tr­êng gièng nhau, ngoµi ra cã mét sè tr­êng kh¸c, ®ã lµ: speed Gi¸ trÞ speed mÆc ®Þnh lµ 1, 2 lµ tèc ®é t¨ng 2 lÇn. Gi¸ trÞ 0 lu«n hiÓn thÞ ë c¬ cÊu ®Çu tiªn. loop Gi¸ trÞ boolean ( (TRUE hoÆc FALSE), chØ râ liÖu phim lÆp hay kh«ng. startTime Khi b¾t ®Çu phim, trong mét vµi gi©y tõ nöa ®ªm cña ngµy 1 th¸ng giªng 1970. stopTime Khi kÕt thóc phim, trong mét vµi gi©y tõ nöa ®ªm cña ngµy 1 th¸ng giªng 1970. e5. Pixel Texture Nót nµy cho phÐp b¹n ®Þnh nghÜa c¸c kÕt cÊu b»ng tay trong file VRML. §iÒu nµy d­êng nh­ khã tin lµ cã thÓ ®Çy ®ñ nh­ng nã kh«ng cã nh­ ®· sö dông, b¹n sÏ thÊy sau ®©y. Nã cã tr­êng image thay thÕ cho tr­êng URL. Tr­êng image bao gåm hai con sè chØ râ chiÒu réng vµ cao cña kÕt cÊu, tiÕp theo lµ mét con sè chØ râ sè l­îng c¸c thµnh phÇn. Thµnh phÇn mµu s¾c lµ tØ lÖ x¸m, hai thµnh phÇn mµu s¾c lµ tØ lÖ x¸m víi ®é trong suèt, thµnh phÇn thø ba lµ mµu RGB vµ thø t­ lµ RGB víi ®é trong suèt. Sau c¸c ®èi sè nµy lµ danh s¸ch c¸c ®iÓm pixel, lµ c¸c sè hexa víi mét byte cho mçi thµnh phÇn. V× vËy pixel thµnh phÇn thø t­ lµ red vµ 50 % ®é trong suèt lµ 0xFF00007F. C¸c pixel ®­îc s¾p xÕp theo thø tù tõ ®¸y tr¸i ®Õn ®Ønh bªn ph¶i. VÝ dô ®­îc chØ ra d­íi ®©y: DEF PIXMAP Appearance { texture PixelTexture { image 2 2 3 0xFF0000 0x00FF00 0x0000FF 0xFF0000 } } Chóng ta chØ cÇn m« t¶ nhanh vÒ c¸c sè hexa. Th«ng th­êng ë m¸y tÝnh thuËn tiÖn khi chØ râ c¸c con sè lµ c¸c sè thËp ph©n th«ng th­êng (0-9) hoÆc nhÞ ph©n (0-1) vµ ngoµi ra cã mét lo¹i kh¸c lµ hexadecimal, cã d¹ng nh­ sau: Hexadecimal Decimal 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 A 10 B 11 C 12 D 13 E 14 F 15 F trong sè hexa lµ 15 trong sè thËp ph©n. 10 trong hexa lµ 16 trong sè thËp ph©n. Ch÷ sè hexa th«ng th­êng ®­îc chØ râ 0x ë phÝa tr­íc ®Ó dÔ dµng nhËn ra. VÝ dô 0x10 = 16, 0xFF = 255, vµ 0x7F = 12. e6. V¨n b¶n vµ kiÓu font( text vµ fontstyle) Nót nµy t¹o v¨n b¶n 2D trong thÕ giíi. TÊt c¶ ®Òu thùc sù ®¬n gi¶n trõ phi b¹n muèn thùc hiÖn c¸c ®iÒu phøc t¹p h¬n sö dông Fontstyle. Nót Text cã 4 tr­êng. Tr­êng ®Çu tiªn lµ string, b¹n cã thÓ ®Þnh nghÜa chuçi hoÆc danh s¸ch c¸c chuçi ®Ó hiÓn thÞ. Tr­êng fontStyle chøa nót FontStyle. Hai tr­êng cuèi lµ maxExtent, b¹n chØ râ ®é réng lín nhÊt ( theo ®¬n vÞ mÐt) cña v¨n b¶n vµ length lµ danh s¸ch chiÒu dµi ®èi víi mçi chuçi, v× vËy b¹n cã thÓ chØ râ ®é réng riªng biÖt cña mçi chuçi. NÕu c¸c length ®­îc chØ râ, browser sÏ ®Þnh l¹i kÝch th­íc cña v¨n b¶n ®Ó cho võa víi kÝch th­íc ®ã. geometry Text { string ["Hello", "World"] fontStyle USE HELLOFONT maxExtent 5 length [3, 3] } Nót Text lµ phøc t¹p, FontStyle phøc t¹p h¬n. C¸ch tèt nhÊt ®Ó thùc hiÖn ë ®©y lµ liÖt kª danh s¸ch c¸c tr­êng. FontStyle { size family style horizontal leftToRight topToBottom language justify spacing } size lµ chiÒu cao cña dßng v¨n b¶n theo hÖ mÐt. Tr­êng family cã thÓ nhËn 3 gi¸ trÞ vµ thay ®æi lo¹i bÒ mÆt cuØa font. Ba lo¹i ®ã lµ "SERIF", "SANS", hoÆc "TYPEWRITER", chóng rÊt râ rµng. §Ó thay ®æi c¸ch xem xÐt v¨n b¶n, b¹n cã thÓ sö dông tr­êng style, cã thÓ nhËn mét trong c¸c kiÓu sau: "PLAIN", "BOLD", "ITALIC", hoÆc"BOLD ITALIC". horizontal lµ gi¸ trÞ boolean chØ ra liÖu v¨n b¶n lµ ngang horizontal ("TRUE") hoÆc däc vertical ("FALSE"). leftToRight vµ topToBottom còng lµ gi¸ trÞ boolean vµ c©n b»ng trong c¸c ho¹t ®éng tr­íc. T­¬ng tù chuçi utf-8 cã thÓ xuÊt hiÖn kh¸c nhau, phô thuéc vµo ng«n ng÷ trong nã, v× vËy ®iÒu nµy lµ m· ho¸ hai kÝ tù ®èi víi ng«n ng÷. Thùc sù kh«ng biÕt c¸c m· lµ g×, tèt nhÊt lµ lê ®i tr­êng nµy. justify lµ hiÖu qu¶ vµ cãthÓ lµ mét trong bÊt kú "BEGIN", "MIDDLE", hoÆc "END". spacing lµ sè l­îng kh«ng gian tr«ngd gi÷a c¸c dßng trong v¨n b¶n. 1 lµ b×nh th­êng, 2 lµ gÊp ®èi kho¶ng c¸ch (dßng trång gi÷a mçi dßng. §ã lµ FontStyle , b¹n cã thÓ thùc sù lê ®i c¸c tr­êng nh­ng style, family vµ justify thùc sù lµ hiÖu qu¶. e7,Các đối tượng cơ bản Để chỉ hình dáng vật thể ta dùng trường geometry. Giá trị của trường này là các nút hình học cơ bản.VRML hỗ trợ 4 đối tượng cơ bản , đó là: Cone(hình nón), Cylinder(Hình trụ), Box(Hình hộp), Sphere(Hình cầu). Đây là bốn đối tượng hình học cơ bản giúp ta xây dựng nên các đối tượng hình học của mình .Cấu trúc của các nút này như sau Nút Box: Box{size cd cc cr}. Trong đó cd, cc, cr là các số thực lần lượt là chiều dài, chiều cao, chiều rộng của hình hộp. Tâm của hình hộp là gốc tọa độ hệ thống Nút Cylinder: Cone{ radius dk Chỉ bán kính của hình trụ height cc Chỉ chiều cao của hình hộp bottom TRUE/FALSE top TRUE/FALSE Hai giá trị này để chỉ xem hình trụ có nắp (TRUE) hay không(FALSE) ở đáy(bottom), đỉnh(top) của hình trụ } Nút Cone: Cone{ radius Một giá trị thực chỉ bán kính đáy của hình nón height Môt giá trị thực chỉ chiều cao của hình hộp } Nút Sphere: Sphere{ radius } trường radius chỉ bán kính của hình cầu Đây là bốn nút hình học cơ bản để bạn xây dựng nên các đối tượng hình học cơ bản của mình.Chúng được gọi là các nút hình học chuẩn. Để xây dựng nên các đối tượng hình học không chuẩn bạn có thể dùng các nút IndexedFaceSet, IndexedLineSet, IndexedPointSet,ElavationGrid, Extrusion Thông thường khi bạn tạo ra một đối tượng tâm của nó trùng với tâm của hệ toạ độ địa phương, để di chuểyn đối tượng bạn dùng nút Transform. Transform{ Scale Chỉ sự biến đối của đối tượng Translation chỉ các giá trị dịch chuyển theo các trục x, y, z Rotation chỉ góc quay và trục quay Children[] các nút con chịu tác động của translation và rotation } Trong nút Transform Scale có tác động đầu tiên, sau đó đến rotation và translation Để gom nhiều nút lại với nhau ta sử dụng nút Group, cú pháp của nó như sau: Group{ Children[] chứa các nút con của nút này } Trong VRML còn có các nút cảm biến với đuôi là Sensor, cho phép chúng ta mô phỏng một số loại cảm biến trong thực tế, như TimerSensor, TouchSensor, PlaneSensor.... Các nút nội suy, như PositionInterpolator, OrientationInterpolator, ColorInterpolator, cho phép bạn chuyển các giá trị khác kiểu về kiểu giá trị mà bạn mong muốn như chuyên sự thay đôi thời gian về giá trị dịch chuyển của một vật thể. Các nút nội suy đóng vai trò là các Engine trong luồng Animation của VRML. TRong VRML còn có một số loại nút khác như LOD, Switch.. 2.Các kiểu dữ liệu trong VRML Nh­ ®· nãi ë phÇn tr­íc, c¸c file VRML bao gåm mét nhãm c¸c nót. C¸c nót nµy cã thÓ chøa c¸ nót kh¸c vµ cã thÓ chøa c¸c tr­êng. Mçi tr­êng cã c¸c kiÓu d÷ liÖu kh¸c nhau. Sau ®©y lµ m« t¶ cña chóng. SFBool §©y lµ gi¸ trÞ boolean ®¬n lÎ, cã thÓ nhËn gi¸ trÞ "TRUE" or "FALSE". SFColor & MFColor SFColor lµ mét tr­êng chøa mµu ®¬n lÎ, ®­îc t¹o nªn tõ ba sè thùc dÊu chÊm ®éng gi÷a 0 vµ 1 t­¬ng øng víi c¸c gi¸ trÞ mµu red, green vµ blue, vÝ dô 0 1 0 lµ green. MFColor lµ mét tr­êng chøa c¸c sè nh©n, vÝ dô [0 1 0, 1 0 0, 0 0 1]. SFFloat & MFFloat SFFloat lµ gi¸ trÞ dÊu chÊm ®éng ®¬n lÎ, vÝ dô 7.5. MFFloat lµ mét sè c¸c gi¸ trÞ dÊu chÊm ®éng, vÝ dô [1.0, 3.4, 76.54]. SFImage SFImage lµ h×nh ¶nh hai chiÒu hoÆc lµ mµu hoÆc lµ x¸m. Nã bao gåm: Hai sè nguyªn, ®¹i diÖn chiÒu réng hoÆc chiÒu cao cña h×nh ¶nh Mét sè nguyªn biÓu thÞ sè thµnh phÇn cña h×nh ¶nh. 1 chØ lµ c¸ møc x¸m, 2 lµ c¸c møc x¸m víi ®é trong suèt, 3 lµ mµu RGB, 4 lµ RGB víi ®é trong suèt. Sau ®ã, cã c¸c con sè hexa are width * height bao gåm ahi ch÷ sè cho mçi thµnh phÇn. V× vËy 0xFF lµ mµu tr¾ng trong h×nh ¶nh 1- thµnh phÇn vµ 0xFF00007F sÏ lµ nöa mµu ®á trong h×nh ¶nh 4- thµnh phÇn. C¸c pixel ®­îc chØ râ tõ tr¸i sang ph¶i, tõ trªn xuèng d­íi. SFInt32 & MFInt32 C¸c sè nguyªn ®¬n lÎ hoÆc chuçi 32 bit cã thÓ theo d¹ng thËp ph©n hoÆc hexa. C¸c sè hexa b¾t ®Çu víi 32 bit, vÝ dô 0xFF lµ 255 hÖ thËp ph©n. SFNode & MFNode SFNode lµ mét nót ®¬n lÎ vµ MFNode lµ danh s¸ch c¸c nót. Tr­êng children víi nhiÒu nót lµ kiÓu MFNode. SFRotation & MFRotation C¸c tr­êng nµy chØ râ mét phÐp quay xung quanh mét trôc. Nã ®­îc t¹o nªn tõ 4 sè thùc dÊu chÊm ®éng. Ba sè thùc ®Çu tiªn chØ râ c¸c to¹ ®é X, Y vµ Z cho c¸c vect¬ t­¬ng øng víi trôc ®Ó quay, sè thø t­ lµ radian ®Ó quay. H¬n n÷a sù lùa chän lµ rotation trong phÇn 1.3. SFRotation lµ tËp c¸c gi¸ trÞ ®¬n lÎ, MFRotation lµ mét danh s¸ch. SFString & MFString Lo¹i nµy chøa danh s¸ch c¸c kÝ tù trong tËp kÝ tù utf-8. ASCII lµ tËp hîp phô cña utf-8, v× vËy b¹n kh«ng cÇn lo l¾ng vÒ tËp c¸c kÝ tù kh¸c nhau hoÆc vÒ bÊt kú ®iÒu g× kh¸c. Chuçi (SFString) nh­ "Hello", trong dÊu nh¸y kÐp. Mét danh s¸ch (MFString) tr«ng gièng nh­ : ["Hello", "World"]. SFTime & MFTime Thêi gian ®¬n lÎ hoÆc mét danh s¸ch thêi gian. Thêi gian ®­îc chØ râ nh­ c¸c sè dÊu chÊm ®éng biÓu thÞ sè l­îng c¸c gi©y tr«i qua tõ nöa ®ªm ngµy 1 th¸ng giªng 1970. §iÒu nµy t¹o nªn nhiÒu c¶nh quan h¬n khi chó ý ®Õn c¸c sù kiÖn sau ®ã. SFVec2f & MFVec2f C¸c vect¬ ®¬n lÎ hoÆc danh s¸ch c¸c vect¬ 2D. Mét vect¬ 2D lµ mét cÆp c¸c sè thùc dÊu chÊm ®éng. SFVec3f & MFVec3f C¸c vect¬ ®¬n lÎ hoÆc danh s¸ch c¸c vect¬ 3D. Mét vect¬ 3D lµ mét bé 3 c¸c sè thùc dÊu chÊm ®éng. 3.Hệ toạ độ trongVRML TÊt c¶ c¸c kho¶ng c¸ch trong VRML ®­îc ®o b»ng mÐt. . HÖ thèng to¹ ®é VRML ®­îc chØ ra trong s¬ ®å sau: X Y Z C¸c phÐp quay trong VRML lµm viÖc theo luËt tay ph¶i. NÕu b¹n t­ëng t­îng viÖc ®Æt bµn tay bao trïm lªn mét trong sè c¸c trôc, víi ngãn tay c¸i chØ theo chiÒu d­¬ng, h­íng quay d­¬ng cïng chiÒu víi h­íng cña bµn tay, nghÜa lµ ng­îc chiÒu víi kim ®ång hå lµ h­íng d­¬ng. §iÒu nµy lµ ®óng ®èi víi c¸c phÐp quay ®èi víi bÊt kú trôc nµo, v× vËy nÕu b¹n muèn quay mét ®èi t­îng mét gãc 90 xung quanh trôc X, b¹n sÏ ph¶i sö dông gãc quay ©m 90. §iÒu nµy còng ¸p dông cho c¸c phÐp quay xung quanh mét trôc tuú ý, ®­îc gi¶i thÝch trong phÇn sau cña tµi liÖu nµy. Mét ®iÓm cÇn chó ý lµ c¸c phÐp quay ®­îc ®o b»ng radian chø kh«ng ®o b»ng ®é. V× vËy ®Ó thùc hiÖn phÐp quay nh­ ®· m« t¶ ë trªn, b¹n phải thùc hiÖn phÐp quay -1.57 xung quanh trôc X. Ta phải nhớ là 3.14 radian tương ứng với 180 độ 4,Các phép biến đổi trong VRML §Ó t¹o nªn thÕ giíi sö dông tÊt c¶ mäi thø, chóng ta cÇn cã thÓ biÕn ®æi ®­îc mäi ®èi t­îng. VRML cã ba lo¹i biÕn ®æi cã thÓ ¸p dông cho c¸c ®èi t­îng. §ã lµ translations, rotations, vµ scales, vµ chóng ®­îc sö dông trong nót Transform. Nh­ng kh«ng ph¶i mét nót Transform ph¶i cã ®Çy ®ñ ba lo¹i biÕn ®æi trªn, vÝ dô trong nót Transform chØ cã phÐp quay rotation. C¸c phÐp biÕn ®æi trong Transform cã thÓ ¸p dông cho c¸c nót con children cña nót. §iÒu nµy gäi lµ mét tæ hîp, mét nót cha cã thÓ cã nhiÒu nót con. Có ph¸p cho vÊn ®Ò nµy ®­îc chØ ra d­íi ®©y, ¸p dông cho nót Transform . Transform { translation 1 1 1 rotation 0 1 0 0.78 scale 2 1 2 children [ USE FBOX ] } Mét nót Transform cã thÓ cã c¸c tæ hîp kh¸c bªn trong nót con cña nã, cho phÐp b¹n thùc hiÖn tuÇn tù mét chuçi c¸c phÐp biÕn ®æi. Chó ý r»ng trËt tù c¸c phÐp biÕn ®æi lµ kh«ng quan träng. Mét phÐp quay ®­îc tiÕp theo mét phÐp biÕn ®æi kh«ng gièng víi mét phÐp biÕn ®æi thùc hiÖn sau phÐp quay. Bªn trong mét nót Transform ®¬n lÎ, c¸c phÐp biÕn ®æi ®­îc thùc hiÖn theo mét trËt tù chÆt chÏ: Scale, Rotate vµ Translate. V× vËy nÕu b¹n muèn thùc hiÖn phÐp biÕn ®æi sau phÐp quay, b¹n cÇn tæ hîp c¸c nót Transform bªn trong c¸c nót kh¸c. TiÕp theo chóng ta cÇn m« t¶ mçi lo¹i phÐp biÕn ®æi lµm viÖc nh­ thÕ nµo. Translation and Scale ( PhÐp biÕn ®æi vµ tÝnh tØ lÖ) Cã hai phÐp biÕn ®æi t­îng tù nhau, c¶ hai ®Òu nhËn ba ®èi sè : gi¸ trÞ x, y vµ z. PhÐp biÕn ®æi dÞch chuyÓn trung t©m cña ®èi t­îng trong c¸c kho¶ng c¸ch nµy theo h­íng thÝch hîp. TØ lÖ nh©n víi kÝch th­íc cña ®èi t­îng bëi c¸c gi¸ trÞ nµy theo c¸c h­íng thÝch hîp. Mét phÐp biÕn ®æi 0 theo mét h­íng sÏ lo¹i bá c¸c ®èi t­îng kh«ng ¶nh h­ëng ®Õn h­íng. YÕu tè tØ lÖ 0 lµm cho ®èi t­îng kh«ng chÝnh x¸c theo h­íng ®ã, lµ ®iÒu b×nh th­êng kh«ng ®­îc mong muèn. YÕu tè 1 ®­îc yªu cÇu mµ kh«ng cã ¶nh h­ëng nµo c¶. Quan träng chó ý r»ng viÖc tÝnh tØ lÖ lµ t­¬ng ®èi cho nguyên bản, kh«ng ph¶i lµ trung t©m cña ®èi t­îng. V× vËy ®Ó tÝnh tØ lÖ cña trung t©m cña ®èi t­îng, chóng ta ph¶i ®¶m b¶o r»ng ®èi t­îng ®­îc ®Æt trung t©m t¹i phÇn më ®Çu. §ã lµ lÝ do t¹i sao viÖc tÝnh tØ lÖ ph¶i thùc hiÖn tr­íc phÐp quay vµ phÐp biÕn ®æi. Rotation ( phÐp quay) PhÐp quay cã ®iÓm h¬i kh¸c so víi hai lo¹i ë trªn. Nã nhËn 4 tham sè, ®Çu tiªn lµ ba to¹ ®é x¸c ®Þnh trôc cña phÐp quay vµ cuèi cïng lµ gãc quay, tÝnh b»ng radian. VÝ dô ®Ó quay 1 radian xung quanh trôc Y, b¹n ph¶i viÕt: Transform { rotate 0 1 0 1 children [ USE FBOX ] } ChiÒu dµi cña trôc quay lµ bÊt kú, kh«ng cÇn thiÕt lµ 1. B¹n cã thÓ sö dông gi¸ trÞ Y lµ 50 nÕu b¹n thÝch nh­ng nã kh«ng thùc hiÖn ®iÒu g× kh¸c víi gi¸ trÞ Y lµ 1. Trôc quay hoµn toµn lµ tuú ý, b¹n cã thÓ quay quanh bÊt kú trôc nµo b¹n thÝch. VÝ dô trôc 1 0.3 2.45 lµ hoµn toµn hîp lý. ThËt lµ khã kh¨n ®Ó t¹o c¸c phÐp quay theo c¸ch nµy, tuy nhiªn chóng cã thÓ khã kh¨n ®Ó quan s¸t, ®Æc biÖt nÕu b¹n kh«ng cã bÊt kú sù luyÖn tËp nµo. ChÝnh v× ®iÒu ®ã Vapour Technology ®· t¹o ra mét cÆp c«ng cô Dizzy vµ Twister. Twister t¹o phÐp quay vu«ng gãc víi trôc tõ mét lo¹i ®¬n gi¶n h¬n vµ Dizzy kÕt hîp nh©n c¸c phÐp quay vu«ng gãc víi trôc ®Ó t¹o mét lo¹i ®¬n gi¶n h¬n víi hiÖu qu¶ t­¬ng tù. B¹n cã thÓ sö dông c¸c ®iÒu nµy ®Ó dÔ dµng h¬n trong viÖc quay c¸c ®èi t­îng trong thÕ giíi. 5.C¸c sù kiÖn Mét sè c¸c tr­êng, hÇu nh­ c¸c nót ®Òu chøa c¸c sù kiÖn. Cã hai lo¹i sù kiÖn , eventIn vµ eventOut. C¸c eventOut lµ c¸c sù kiÖn s¾p ®i ra, ph¸t sinh c¸c th«ng tin nh­ thay ®æi nh­ thay ®æi mét gi¸ trÞ hoÆc thêi gian cña kÝch chuét. C¸c eventIn lµ c¸c sù kiÖn s¾p ®Õn, chÊp nhËn th«ng tin tõ bªn ngoµi cña nót vµ thùc hiÖn mét vµi ®iÒu víi nã. Mçi sù kiÖn cã mét lo¹i d÷ liÖu thÝch hîp víi chóng, nh­ m« t¶ ë trªn. Mét vµi nót cã c¸c tr­êng ®­îc tr­ng bµy. §iÒu nµy cã nghÜa lµ nót cã hai tr­êng ®Þnh nghÜa cho tr­êng ®ã set_fieldname and fieldname_changed. Cã eventIn vµ eventOut ®èi víi tr­êng cã thÓ sö dông ®Ó thiÕt lËp c¸c gi¸ trÞ cña nã vµ th«ng b¸o cho thÕ giíi bªn ngoµi khi cã sù thay ®æi. NÕu b¹n sö dông set_fieldname ®Ó thiÕt lËp gi¸ trÞ cña tr­êng, nót sÏ ph¸t sinh mét sù kiÖn fieldname_changed. §Ó dÔ dµng sö dông, c¸c thµnh phÇn set_ vµ _changed cña sù kiÖn cã thÓ nghiªng vÒ phÝa tr¸i vµ browser sÏ lµm viÖc khi sù kiÖn ®­îc sö dông. NÕu mét tr­êng kh«ng ®­îc ph¬i bµy ra, nã kh«ng thÓ thay ®æi do c¸c sù kiÖn vµ gi¸ trÞ trong tr­êng ®­îc sö dông trong suèt c¸c kho¶ng thêi gian. §Ó xem xÐt tr­êng nµo ®­îc bµy ra ®èi víi mçi nót, h·y gi÷ lÊy mét tham chiÕu tõ mét vÞ trÝ tõ trang liªn kÕt hoÆc nhËn lÊy tham chiÕu nót trong phô lôc. 6.C¸c router §Ó thùc hiÖn hiÖu qu¶ mäi thø víi c¸c sù kiÖn, chóng ta cÇn nèi chóng víi nhau. ViÖc kÕt nèi ®­îc biÕt ®Õn nh­ ROUTER. VÝ dô ®Ó dÉn tõ touchTime eventOut tíi startTime eventIn, chóng ta sÏ dÉn sù kiÖn nh­ sau: ROUTE SENSOR.touchTime TO SOUND.startTime V× vËy, bÝt nµy cña m· sÏ dÉn tíi sù kiÖn touchTime tõ TouchSensor ( sÏ ®Ò cËp ®Õn ë phÇn sau) tíi sù kiÖn startTime trong nót sound ( còng ®­îc ®Ò cËp ë phÇn sau). Do ®ã, khi TouchSensor bÞ kÝch vµo, ©m thanh ®­îc ch¬i. B¹n cÇn sö dông DEF cho mçi nót mµ b¹n dÉn tíi hoÆc tõ ®ã sao cho nã cã mét tªn riªng lÎ. V× vËy, c¸c nót TouchSensor vµ Sound sÏ ®­îc ®Þnh nghÜa: DEF SENSOR TouchSensor { } DEF SOUND Sound { } Ngo¹i trõ c¸c tr­êng bªn trong chóng. NÕu b¹n cã mét sè c¸c ®èi t­îng víi cïng mét tªn (do sö dông USE), vµ dÉn tíi hoÆc tõ chóng, tÊt c¶ c¸c ®èi t­îng bÞ ¶nh h­ëng, v× vËy nÕu b¹n chØ muèn mét ®èi t­îng bÞ ¶nh h­ëng, ®­a cho nã mét tªn duy nhÊt hoÆc sö dông PROTO, ®­îc gi¶i thÝch sau. 7,Camera, ©m thanh, ¸nh s¸ng Trong phÇn nµy chóng t«i sÏ tr×nh bµy c¸ch ®Ó gióp c¸c b¹n lµm cho phong c¶nh cña b¹n trë nªn hiÖn thùc h¬n. Nã bao gåm m¸y quay phim, ¸nh s¸ng, ©m thanh, nÒn vµ tr¹ng th¸i cña tÊt c¶ nh÷ng yÕu tè kh¸c. Tr­íc hÕt ta hñy bá ®i ®iÓm khëi ®Çu ngÇm ®Þnh vµ xem xÐt m¸y quay phim (camera). a,Camera VRMR browser t¹o ra mét cæng vµo mÆc ®Þnh cho mét c¶nh, nã ®­îc ®Æt däc theo trôc +Z sao cho toµn bé thÕ giíi ®­îc hiÓn thÞ trong cöa sæ. Tuy nhiªn b¹n kh«ng nªn b¾t ®Çu tõ vÞ trÝ nµy mµ b¹n nªn ®Ó ng­êi quan s¸t cã thÓ chän mét trong sè c¸c ®iÓm nh×n. §Ó lµm ®­îc ®iÒu nµy b¹n h·y ®Æt thªm c¸c camera trong phong c¶nh cña b¹n vµ sö dông c¸c nót ®iÓm nh×n (Viewpoint node). Nót ®iÓm nh×n cã mét sè tr­êng, tr­êng thø nhÊt lµ vÞ trÝ (position), ®ã lµ mét SFVec3f (nh­ mét bé ba c¸c sè thùc m« t¶ c¸c täa ®é X, Y, Z). Tr­êng nµy x¸c ®Þnh vÞ trÝ cña camera trong thÕ giíi. Tr­êng thø hai lµ h­íng (orientation), ®ã lµ mét SFRolation, nã còng gåm 3 sè thùc ®Ó x¸c ®Þnh sù quay cña camera. H­íng ngÇm ®Þnh lµ nh×n vÒ h­íng -Z víi ®é lÖch +X ë bªn ph¶i vµ +Y ë phÝa trªn. Tr­êng thø 3 lµ ph¹m vi nh×n (FieldofView). Tr­êng nµy lµ mét sè thùc tÝnh theo ®¬n vÞ radian cã gi¸ trÞ tõ 0 ®Õn pi. Nã dïng ®Ó x¸c ®Þnh gãc nh×n, gi¸ trÞ nhá h¬n t­¬ng øng víi gãc nh×n nhá h¬n, nã cho ta kÕt qu¶ thu nhá. Gi¸ trÞ lín t­¬ng øng víi h×nh ¶nh ®­îc phãng to. Gi¸ trÞ ngÇm ®Þnh lµ 0,78 radian øng víi h×nh ¶nh trung b×nh. Mçi ®iÓm nh×n cßn cã mét tr­êng m« t¶ (description). §©y lµ tr­êng mµ brouser dïng ®Ó x¸c ®Þnh camera, tr­êng nµy lµ mét SFString. Có ph¸p ®Çy ®ñ cña mét ®iÓm nh×n lµ nh­ sau: Viewpoint { position 0 5 5 orientation 1 0 0 0.39 fieldOfView 0.39 description "Camera 1" } B¹n còng cã thÓ sö dông nh÷ng camera kh¸c ®Ó t¹o ra nh÷ng cæng vµo kh¸c cho phong c¶nh cña b¹n b»ng c¸ch liªn kÕt tªn cña camera víi trang mµ nã ®­îc dïng lµm cæng vµo cho phong c¶nh. VÝ dô nh­ ®Ó ® vµo mét phong c¶nh t¹i camera cã tªn CAM1 b¹n ph¶i thùc hiÖn kÕt nèi nh­ sau: World.wrl#CAM1 Nh÷ng vÊn ®Ò liªn quan: Brouser sÏ b¾t ®Çu kiÓm tra h×nh ¶nh trong thÕ giíi cña b¹n t¹i camera ®Çu tiªn mµ nã t×m thÊy trong file, v× vËy h·y ch¾c ch¾n r»ng lµ cæng ®Çu tiªn mµ b¹n ®· ghi nhËn. Mét vÊn ®Ò nhá n÷a lµ viÖc lËp kÕ ho¹ch cho c¸c ®iÓm nh×n lµ kh¸ phøc t¹p. NÕu b¹n biÕt camera ë ®©u vµ n¬i nµo b¹n muèn xem th× sÏ rÊt khã ®Ó ®iÒu chØnh ®óng h­íng. Tuy nhiªn cã mét c«ng cô nhá tõ Vapour Technology sÏ gióp b¹n thùc hiÖn toµn bé ®iÒu nµy, h·y gäi Peek b,¢m thanh §Ó lµm cho thÕ giíi cña b¹n trë nªn hÊp dÉn h¬n, chóng ta sÏ thªm ©m thanh vµo ®ã. Ta cã thÓ t¹o ©m thanh nÒn, tiÕng chu«ng cöa, cßi b¸o ®éng hoÆc nh÷ng ©m thanh kh¸c mµ b¹n muèn. TÊt c¶ nh÷ng ®iÒu ®ã ®­îc thùc hiÖn bëi 2 lo¹i nót lµ nót Sound (Sound nodes) vµ nót AudioClip (AudioClip nodes). B¹n h·y t­ëng t­îng: mét nót Sound gièng nh­ sù x¸c ®Þnh ë n¬i nµo trong kh«ng gian b¹n sÏ nghe thÊy ©m thanh vµ nã b¾t nguån tõ ®©u. Cßn b¶n th©n ©m thanh sÏ ®­îc x¸c ®Þnh bëi nót AudioClip.Tr­íc tiªn chóng ta h·y xem xÐt nót Sound. Nót Sound: Mét nót Sound ®­îc sö dông ®Ó x¸c ®Þnh vÞ trÝ vµ sù ®Þnh h­íng cña mét nguån ©m thanh trong thÕ giíi cña b¹n. Nót sound ®­îc ®Æt t¹i mét n¬i nµo ®ã. Cho dï b¹n nghe ©m thanh hay bÊt cø liªn quan nµo kh¸c víi ©m thanh th× ©m thanh vÉn ®­îc ph¸t ra d­íi d¹ng nh÷ng mÆt elipsoid . Trong vïng mµu ®á, ©m thanh sÏ ®­îc nghe thÊy víi toµn bé c­êng ®é cña nã. Trong vïng mµu vµng, ©m thanh lo·ng ®i theo kho¶ng c¸ch ®Õn nguån ©m. C¸c kho¶ng c¸ch minFront, maxFront, minBack, maxBack lµ c¸c tr­êng ®­îc x¸c ®Þnh bëi nót sound, ®ã lµ c¸c h­íng. Có ph¸p cña nót Sound nh­ sau: Sound { SFVec3f direction 0 0 1 SFFloat intensity 1 SFVec3f location 0 0 0 SFFloat maxBack 10 SFFloat maxFront 10 SFFloat minBack 1 SFFloat minFront 1 SFFloat priority 0 SFNode source NULL SFBool spatialize TRUE } C¸c tr­êng kh¸c cã t¸c dông nh­ sau: Direction lµ mét vect¬ x¸c ®Þnh h­íng mµ ©m thanh truyÒn tíi. Intensity lµ c­êng ®é cña ©m thanh. Gi¸ trÞ 1 lµ toµn bé c­êng ®é cña ©m thanh trong file, cßn gi¸ trÞ 0 lµ hoµn toµn yªn lÆng. Location lµ vÞ trÝ cña nguån ©m thanh trong thÕ giíi. 4 th«ng sè max/ min/ Front/Back x¸c ®Þnh h×nh d¹ng cña elipsoid nh­ ®· nãi ë trªn. VÝ dô: §Ó cã mét ©m thanh cã thÓ nghe râ nh­ nhau ë tÊt c¶ c¸c h­íng b¹n h·y lÊy maxFront = maxBack, minFront = minBack. NÕu b¹n kh«ng muèn ©m thanh bÞ gi¶m theo kho¶ng c¸ch. B¹n h·y ®Æt tÊt c¶ c¸c gi¸ trÞ víi cïng mét kho¶ng c¸ch mµ kho¶ng c¸ch ®ã ®ñ lín ®Ó cã thÓ bao trïm toµn bé thÕ giíi cña b¹n. NÕu b¹n muèn cho ©m thanh cña b¹n nhá dÇn ®i theo kho¶ng c¸ch, h·y ®Æt c¸c gi¸ trÞ max lµ 10 nh©n víi gi¸ trÞ min. Priority lµ møc ®é ­u tiªn cña ©m thanh. Brouser cã mét sè c¸c kªnh ©m thanh vµ Priority cña c¸c ©m thanh ®­îc sö dông ®Ó x¸c ®Þnh xem ©m thanh nµo sÏ ®­îc ph¸t ra, nã sÏ lÊy gi¸ trÞ 0 hoÆc 1. ©m thanh nÒn cã møc ®é ­u tiªn thÊp víi gi¸ trÞ lµ 0, møc ®é ­u tiªn cao nªn dïng víi nh÷ng ©m thanh ng¾n nh­ tiÕng chu«ng, tiÕng cßi ... nã cã gi¸ trÞ 1. Tr­êng Spatialize ®­îc brouser dïng ®Ó x¸c ®Þnh viÖc truyÒn ©m thanh, ®iÒu ®ã cã nghÜa r»ng nã sÏ ph¸t ©m thanh th«ng qua c¸c speaker ®­îc xem lµ c¸c nguån ©m thanh, v× vËy b¹n sÏ nghe thÊy ©m thanh thay ®æi khi b¹n thay ®æi c¸ch liªn hÖ víi nã. NÕu nh­ tr­êng nµy lµ FALSE th× brouser sÏ kh«ng thùc hiÖn ®iÒu nµy. Tr­êng nµy cã Ých trong viÖc tèi ­u hãa còng nh­ trong viÖc t¹o ra c¸c ©m thanh bao xung quanh. Cã mét yÕu tè cßn ch­a cã trong nót sound, ®ã chÝnh lµ nót nguån ©m, ®©y lµ mét nót rÊt quan träng. Nã cã thÓ lµ nót AudioClip hoÆc nót MovieTexture. NÕu b¹n sö dông MovieTexture, brouser sÏ ph¸t ©m thanh tõ mét file h×nh (movie file). C¸ch nµy h÷u Ých trong viÖc ph¸t ©m thanh tõ c¸c file movie. C¸ch cßn l¹i tá ra hiÖu qu¶ h¬n lµ sö dông nót AudioClip, c¸ch nµy sÏ ®­îc tr×nh bµy d­íi ®©y. Audioclip: Nót audioclip x¸c ®Þnh c¸i g× sÏ ®­îc ph¸t ra t¹i nót sound vµ ph¸t ra khi nµo. Có ph¸p cña nã nh­ sau: AudioClip { SFString description "" SFBool loop FALSE SFFloat pitch 1.0 SFTime startTime 0 SFTime stopTime 0 MFString url [] } C¸c chøc n¨ng cña AudioClip nh­ sau: Tr­êng url lµ mét danh s¸ch c¸c file kh«ng nÐn cã d¹ng .WAV hoÆc General MIDI. MID. §iÒu nµy rÊt h÷u Ých cho viÖc kÕt hîp víi ©m nh¹c. Brouser sÏ tr×nh bµy file ®Çu tiªn trong danh s¸ch mµ nã cã thÓ load. Loop dïng x¸c ®Þnh xem ©m thanh cã ®­îc lÆp l¹i kh«ng, vµ description lµ sù m« t¶ vÒ ©m thanh mµ brouser muèn tr×nh bµy. Pitch lµ hÖ sè tèc ®é ph¸t l¹i vµ c­êng ®é cña ©m thanh. Gi¸ trÞ pitch 1.0 lµ tèc ®é th«ng th­êng, gi¸ trÞ pitch lµ 0.5 th× viÖc ph¸t l¹i sÏ ë tèc ®é b»ng mét nöa. Gi¸ trÞ lµ 2.0 sÏ cho kÕt qu¶ ng­îc l¹i, t¨ng gÊp ®«i tèc ®é ph¸t ©m thanh. StartTime vµ StopTime lµ c¸c gi¸ trÞ SFTime, chóng dïng ®Ó x¸c ®Þnh khi nµo ph¸t vµ ngõng ph¸t ©m thanh. NÕu b¹n ghi nhí mét sè gi©y kÓ tõ ngµy 1- 1- 1970 vµ liªn kÕt nã víi c¸c c¶m biÕn vµ c¸c ®­êng dÉn. Mét c¶m biÕn sÏ ph¸t ra mét tÝn hiÖu b¸o khi ®Õn thêi gian ®­îc kÝch ho¹t, vµ nÕu nã ®­îc nèi víi mét nót AudioClip th«ng qua viÖc ®Æt StartTime th× ©m thanh sÏ ®­îc ph¸t ra. Chóng ta sÏ xem xÐt thªm vÒ ®iÒu nµy khi t­¬ng t¸c trùc tiÕp víi c¸c sensor. Fade away Mét vÊn ®Ò n÷a cÇn xem xÐt ë c¸c nót sound lµ viÖc gi¶i nÐn. C¸c file d¹ng .WAV lµ qu¸ lín vµ tèn nhiÒu thêi gian ®Ó download, v× vËy ta ph¶i h¹n chÕ sö dông chóng ®Ó t¨ng hiÖu qu¶. C¸c file MIDI tèt h¬n vµ tá ra cã hiÖu qu¶ trong nh¹c nÒn. Tuy nhiªn cÇn ph¶i lµm cho nã ®¹t ®é trong (gièng file .WAV) mét c¸ch tèi ®a cã thÓ ®­îc. NÕu b¹n cã c¸c file nµy, chØ cÇn ng¾n vµ chÊt l­îng ®ñ chÊp nhËn ®­îc, chø kh«ng ai cã thÓ ®îi 10 phót ®Ó download nh÷ng file cã chÊt l­îng .WAV. §ã lµ tÊt c¶ nh÷ng vÊn ®Ò c¬ b¶n mµ b¹n cÇn biÕt vÒ ©m thanh. §Ó t¹o ra nh÷ng ©m thanh nh­ tiÕng chu«ng cöa, chóng ta cÇn cã kh¶ n¨ng t­¬ng t¸c víi thÕ giíi th«ng qua c¸c sensor vµ nh÷ng dông cô t­¬ng tù nh­ vËy. Chóng ta ch­a xem xÐt ®Õn vÊn ®Ò nµy vµ t«i xin dõng phÇn tr×nh bµy vÒ ©m thanh cña m×nh ë ®©y. c,¸nh s¸ng vµ mµu s¾c ë phÇn tr­íc, chóng ta ®· xÐt mét sè ®èi t­îng ®Æc biÖt ®ã lµ IndexFaceSets, Extrusions vµ ElevationGrid, chóng t¹o ra nh÷ng h×nh rÊt ®Ñp, tuy vËy ta cã thÓ lµm nhiÒu h¬n thÕ n÷a. Nh÷ng nót h×nh häc nµy cho phÐp b¹n x¸c ®Þnh ph¸p tuyÕn, mµu s¾c, kiÓu lo¹i vµ nh÷ng tham sè kh¸c ®Ó cã thÓ tuú chän sù xuÊt hiÖn cña c¸c ®èi t­îng nµy. T«i sÏ gi¶i thÝch mét chót vÒ nh÷ng ®iÒu nµy vµ tr×nh bµy c¸ch øng dông chóng. Ph¸p tuyÕn (Normal): Mét ph¸p tuyÕn lµ mét vector øng víi mét bÒ mÆt, nã n»m vu«ng gãc víi bÒ mÆt ë ®iÓm mµ t¹i ®ã nã c¾t bÒ mÆt. C¸c ph¸p tuyÕn ®­îc sö dông trong c¸c VRML Brouser ®Ó lµm viÖc tÝnh to¸n trë nªn s¸ng sña h¬n Tuy nhiªn b¹n vÉn ph¶i cÈn thËn v× c«ng viÖc cña b¹n ë ®©y kh«ng ph¶i lµ lËp tr×nh ®å häa 3D. Nh­ t«i ®· ®Ò cËp, Brouser sö dông c¸c ph¸p tuyÕn ®Ó lµm cho viÖc tÝnh to¸n trë nªn s¸ng sña h¬n. Dùa vµo h­íng cña ph¸p tuyÕn, brouser sÏ ®¸nh bãng bÒ mÆt theo nh÷ng c¸ch kh¸c nhau. NÕu 2 bÒ mÆt cã c¸c ph¸p tuyÕn t¹o víi nhau 1 gãc nhá h¬n mét gi¸ trÞ ®· ®Þnh nµo ®ã, brouser sÏ ®¸nh bãng lµm tr¬n vµ nèi chóng l¹i víi nhau, vµ t¹o nªn mét vïng tiÕp xóc cong. NÕu gãc lín h¬n gi¸ trÞ ®· ®Þnh ®ã, brouser sÏ ®¸nh bãng vµ kÕt nèi chóng thµnh mét c¹nh. Khi ®ã gãc nµy ®­îc gäi lµ gãc gÊp, ®ã lµ mét tr­êng xuÊt hiÖn ë trong extrusions, Elevationgrid vµ IndexFaceSets. Sö dông chóng cã thÓ lµm t¨ng kh¶ n¨ng hiÓn thÞ vËt thÓ, lµmvËt thÓ tr¬n h¬n hoÆc cã c¹nh gÊp. H·y xem phÇn example vµ code ®Ó biÕt c¸ch lµm mét gãc xuÊt hiÖn trong c¸c ®èi t­îng. B©y giê ta h·y quay l¹i víi c¸c ph¸p tuyÕn. Brouser sÏ t¹o ra c¸c ph¸p tuyÕn ngÇm ®Þnh cho tÊt c¶ c¸c lo¹i nót, bao gåm c¶ c¸c ®èi t­îng ®Æc biÖt. Tuy nhiªn nh÷ng nót h×nh häc ®Æc biÖt cã mét tr­êng lµ tr­êng ph¸p tuyÕn, tr­êng nµy chøa nót ph¸p tuyÕn (normal node). Nã cho phÐp b¹n x¸c ®Þnh c¸c ph¸p tuyÕn mét c¸ch râ rµng nhê ®ã b¹n cã thÓ ®¹t ®­îc hiÖu qu¶ cao vÒ bè trÝ ¸nh s¸ng. C¸c ph¸p tuyÕn nµy ®­îc x¸c ®Þnh cho mçi ®Ønh hoÆc cho mçi mÆt, x¸c ®Þnh ®iÒu nµy b»ng tr­êng normalPerVertex. NÕu tr­êng nµy lµ TRUE th× c¸c ph¸p tuyÕn ®­îc x¸c ®Þnh cho mçi ®Ønh, nÕu lµ FALSE th× c¸c ph¸p tuyÕn ®­îc x¸c ®Þnh cho tõng mÆt. NÕu b¹n hoµn toµn kh«ng x¸c ®Þnh c¸c ph¸p tuyÕn th× brouser sÏ t¹o ra chóng mét c¸ch ngÇm ®Þnh, ®©y lµ gi¶i ph¸p tèt nhÊt cho hÇu hÕt c¸c tr­êng hîp. B¹n còng chØ sö dông ®Õn c¸c ph¸p tuyÕn khi cÇn cã nh÷ng kÕt qu¶ ®Æc biÖt. ViÖc tù x¸c ®Þnh c¸c ph¸p tuyÕn sÏ lµm b¹n tèn rÊt nhiÒu kh«ng gian, vµ nhiÒu thêi gian ®Ó download. V× vËy nªn h¹n chÕ ®iÒu nµy vµ chØ thùc hiÖn khi thùc sù cÇn thiÕt. Trªn ®©y lµ phÇn lý thuyÕt, b©y giê ta sÏ ®i vµo cô thÓ. Ngoµi c¸c tr­êng CreaseAngle, NormalPerVertex ®· tr×nh bµy cßn cã mét sè tr­êng míi vµ nót míi. Chóng ta sÏ b¾t ®Çu víi nót Normal ®ã lµ nót bao gåm mét tËp c¸c ph¸p tuyÕn, nã chØ ®­îc sö dông trong tr­êng normal Normal { exposedField MFVec3f vector [] } Nót nµy chØ cã mét tr­êng ®ã lµ tr­êng vector, nã bao gåm mét tËp c¸c gi¸ trÞ MFVec3f ®ã lµ nh÷ng vector ph¸p tuyÕn cña tõng mÆt. . Nã ®­îc sö dông ®ª lµm cho nh÷ng ®èi t­îng cong, phøc t¹p trë nªn ®¬n gi¶n h¬n. VÝ dô: B¹n cã thÓ t¹o nªn mét h×nh trô tr¬n dùa vµo c¸c ph¸p tuyÕn. C¸c nót h×nh häc cã chøa tr­êng ccw. Nã x¸c ®Þnh c¸c ®Ønh cña bÒ mÆt ®­îc xÐt thø tù theo chiÒu kim ®ång hå hay ng­îc chiÒu kim ®ång hå. Nã ¶nh h­ëng ®Õn h­íng cña c¸c ph¸p tuyÕn ngÇm ®Þnh mµ nh÷ng ph¸p tuyÕn ngÇm ®Þnh nµy ®­îc sö dông trong viÖc tÝnh to¸n trùc quan. NÕu b¹n nh×n vµo bÒ mÆt víi c¸c ®Ønh ng­îc chiÒu kim ®ång hå th× ph¸p tuyÕn sÏ chØ vÒ phÝa b¹n. NÕu b¹n nh×n mét bÒ mÆt víi c¸c ®Ønh theo chiÒu kim ®ång hå th× ph¸p tuyÕn sÏ chØ ra ngoµi vµ sÏ kh«ng nh×n thÊy. ThiÕt lËp sai tr­êng nµy cã thÓ g©y ra mét sè kÕt qu¶ thó vÞ vÝ dô nh­ vËt thÓ kh«ng cã bÒ mÆt tr­íc (®Ó lé râ cÊu tróc bªn trong). Tr­êng ccw ®­îc ngÇm ®Þnh lµ TRUE. Tr­êng tiÕp theo lµ NormalIndex. Nã bao gåm mét danh s¸ch mét sè mÆt hoÆc c¸c ®iÓm, phô thuéc vµo tr­êng NormalPerVertex. MÆt (®iÓm) thø nhÊt ®­îc x¸c ®Þnh bëi tr­ëng CoorIndex (Coor) víi sè 0, tiÕp theo nh­ vËy ®Õn n-1. Trong ®ã n lµ sè mÆt (®iÓm). Tr­êng NormalIndex x¸c ®Þnh ph¸p tuyÕn nµo t­¬ng øng víi mÆt (®iÓm) nµo. Nh­ vËy b¹n kh«ng cÇn x¸c ®Þnh c¸c ph¸p tuyÕn theo thø tù gièng víi c¸c mÆt (®iÓm). NÕu b¹n kh«ng dïng tr­êng nµy th× c¸c ph¸p tuyÕn sÏ cã thø tù gièng víi c¸c mÆt, ®iÓm. C¸c nót extrution vµ IndexFaceSet còng cã tr­¬ng Convex. NÕu nã lµ TRUE th× brouser sÏ kh«ng kiÓm tra viÖc c¸c ®èi t­îng chång lªn nhau. Gi¸ trÞ ngÇm ®Þnh lµ FALSE, nã an toµn h¬n. B¹n chØ nªn thiÕt lËp tr­êng nµy khi biÕt ch¾c vËt thÓ hoµn toµn låi Mµu s¾c: T­¬ng tù nh­ c¸c ph¸p tuyÕn, ta cã thÓ ®iÒn mµu s¾c kh¸c nhau vµo c¸c mÆt hay c¸c ®iÓm. §iÒu nµy ®­îc thùc hiÖn bëi mét tr­êng Color, nã chøa mét nót Color . T­¬ng tù nh­ víi tr­êng normal (Ph¸p tuyÕn) nã còng cã tr­êng ColorIndex vµ ColorPerVertex vµ còng cã t¸c dông gièng nh­ tr­êng normal. Có ph¸p cña nót color lµ nh­ sau: Color { exposedField MFColor color [] } Intact 8.Một số vấn đề về lập trình VRML a,Tái sử dụng các đối tượng NÕu b¹n cã nhiÒu ®èi t­îng gièng hÖt nhau , th­êng rÊt khã kh¨n ®Ó duy tr× viÖc viÕt chÝnh x¸c nhiÒu ®èi t­îng theo cïng mét lo¹i. Do ®ã, b¹n cã thÓ sö dông l¹i c¸c ®Þnh nghÜa ë phÇn tr­íc. Sö dông hép nµy, b¹n cã thÓ ®Þnh nghÜa nã ®Ó cã tªn FBOX. Mçi khi b¹n muèn sö dông l¹i hép, b¹n cã thÓ chØ gâ USE FBOX thay cho toµn bé ®Þnh nghÜa. VÝ dô ®­îc chØ ra d­íi ®©y: DEF FBOX Shape { appearance Appearance { material Material { } } geometry Box { } } USE FBOX §©y kh«ng chØ lµ mét bit cña vÝ dô ®¬n gi¶n, khi t¹o hai hép chÝnh x¸c t¹i cïng mét vÞ trÝ. kh«ng chØ lµ c¸c thø mµ b¹n muèn. ThØnh tho¶ng, lµ ®Þnh nghÜa USE t¹i mét vµi n¬i bit cã ý nghÜa h¬n. §ång thêi b¹n cã thÓ DEF/USE bÊt kú lo¹i nót nµo v× vËy b¹n muèn sö dông l¹i Appearance cña mét ®èi t­îng, b¹n cã thÓ thùc hiÖn tèt ®iÒu ®ã. Shape { appearance DEF APP1 Appearance { material Material { } } geometry Box { } } Shape { appearance USE APP1 geometry Box { } } Mét lÇn n÷a b¹n kh«ng thÊy cã ®iÒu g× ng¹c nhiªn ë ®©y, nh­ hai hép ë cïng vÞ trÝ trong thÕ giíi, nh­ng b¹n nhËn ®­îc ý t­ëng. Mét c¸ch kh¸c ®Ó sö dông l¹i m· VRML lµ ®Ó sö dông c¸c nót Inline. §iÒu nµy nhËn d÷ liÖu tõ c¸c file bªn ngoµi vµ chÌn nã vµo file cña b¹n. V× vËy nÕu b¹n cã m« h×nh chiÕc ghÕ gäi lµ chair.wrl b¹n cã thÓ chÌn vµo quang c¶nh cña b¹n: Inline { url "chair.wrl" } File b¹n ®ang kÕt hîp theo c¸ch nµy ph¶i lµ VRML hîp lÖ, v× vËy nã ph¶i lµ c¸c header vµ mäi thø mµ thÕ giíi VRML ph¶i cã. NÕu b¹n kh«ng t¶i c©n b»ng vµo mét browser, b¹n kh«ng cÇn g¹ch ch©n. b,Proto ChØ cã mét thø ®­îc bao trïm lªn, ®ã lµ mÉu. §iÒu nµy lµ thùc sù liªn quan tíi c¸c sù kiÖn vµ c¸c route nh­ng chóng t«i ph¶i gi¶i thÝch c¸c tr­êng, thËt dÔ dµng ®Ó gi¶i thÝch. ViÖc lÊy mÉu ®Çu tiªn lµ mét c¸ch ®Ó sö dông l¹i m· cña b¹n. NÕu b¹n muèn mét sè c¸c ®èi t­îng cña cïng mét lo¹i, b¹n cã thÓ sö dông DEF vµ USE. tuy nhiªn, nÕu b¹n muèn sö dông mét sè ®èi t­îng gièng nhau, nh­ng víi mét chót kh¸c nhau, cã thÓ nãi c¸c chiÒu cao kh¸c nhau. Trong tr­êng hîp ®ã, b¹n cã thÓ sö dông PROTO ®Ó thay thÕ. §Ó ®Þnh nghÜa mÉu ®Çu tiªn, b¹n ®Þnh nghÜa ®èi t­îng cña b¹n vµ ®Þnh nghÜa c¸c tr­êng vµ sù kiÖn víi nã. d­íi ®©y lµ mét vÝ dô vÒ PROTO ®èi víi mét hép víi biÕn mµu s¾c: PROTO VBox [ field SFColor boxColour 1 0 0 ] { Shape { appearance Appearance { material Material { diffuseColor IS boxColour } } geometry Box { } } } Tr­êng trong c¸c ngoÆc vu«ng t¹i phÇn ®Çu cña khai b¸o lµ giao diÖn cña mét ®èi t­îng vµ c¸c con sè lµ c¸c gi¸ trÞ mÆc ®Þnh cho tr­êng. Khi mét tr­êng hîp cña VBox ®­îc khai b¸o, gi¸ trÞ ®­îc s¾p xÕp vµo tr­êng boxColour thay thÕ vµo tr­êng diffuseColor cña nót Material. Do ®ã, ®Ó khai b¸o red VBox vµ green VBox, chóng ta cã thÓ sö dông nót VBox míi t¹i bÊt kú ®©u chóng ta cã thÓ sö dông nót Shape, nót cÊp ®Ønh trong phÇn khai b¸o lµ nót Shape . VBox { } VBox { boxColour 0 1 0 } §Çu tiªn sö dông c¸c ®Þnh nghÜa red VBox mÆc ®Þnh, thø hai ®­a ra mét green VBox. B¹n cã thÓ ®Þnh nghÜa eventIns, eventOuts vµ exposedFields cho c¸c mÉu chuÈn theo cïng mét c¸ch, sö dông IS ®Ó ¸nh x¹ tr­êng PROTO thµnh mét tr­êng trong sù thùc hiÖn. Tr­êng PROTO ph¶i ®­îc ¸nh x¹ theo cïng mét kiÓu tr­êng/ sù kiÖn vµ còng lµ cïng lo¹i d÷ liÖu. ChØ mét ngo¹i lÖ lµ b¹n cã thÓ ¸nh x¹ mét tr­êng th«ng th­êng trong ®Þnh nghÜa PROTO thµnh exposedField trong sù thùc hiÖn khi tr­êng th«ng th­êng lµ tËp hîp phô c¸c exposedField, v× vËy ¸nh x¹ hai tr­êng sÏ kh«ng cã h¹i g× c¶. B¹n kh«ng thÓ ¸p dông theo c¸ch kh¸c. c,ExternProto NÕu b¹n muèn ®Þnh nghÜa PROTO ë mét n¬i nµo kh¸c h¬n lµ trong file chÝnh, b¹n cã thÓ sö dông EXTERNPROTO. §iÒu nµy nãi cho c¸c browser sè l­îng c¸c ®Þnh nghÜa ®èi t­îng trong mét file kh¸c. Trong file chÝnh cña b¹n, b¹n bao gåm ®Þnh nghÜa EXTERNPROTO vµ ph¶i cã PROTO ®Çy ®ñ trong file kh¸c. Có ph¸p EXTERNPROTO ®­îc chØ ra d­íi ®©y: EXTERNPROTO VBox [ field SFColor boxColour ] "proto.wrl File "proto.wrl" trong tr­êng hîp nµy ph¶i chøa header VRML vµ c¸c ®Þnh nghÜa mÉu chuÈn ®Çu tiªn, kh«ng ph¶i lµ mét thø g× kh¸c. NÕu b¹n cã nhiÒu h¬n mét PROTO trong file cña b¹n, b¹n ph¶i khai b¸o gièng nh­ mét thø b¹n ®ang sö dông: "proto.wrl#VBox" Chó ý r»ng b¹n kh«ng cÇn ph¶i bao gåm c¸c gi¸ trÞ mÆc ®Þnh trong c¸c ®Þnh nghÜa EXTERNPROTO, chØ lµ c¸c kiÓu tr­êng. Thay thÕ vµo mét file ®¬n lÎ, nÕu b¹n muèn bao gåm c¸c lùa chän phøc t¹p ®èi víi file ®Ó t¶i, b¹n cã thÓ ®Æt chóng vµo ngoÆc vu«ng: EXTERNPROTO VBox [ field SFColor boxColour ] [ "proto.wrl" "" ] d,L¾p r¸p VRML kh«ng cßn lµ ng«n ng÷ tÜnh n÷a. Nã lµ nh÷ng thø sèng ®éng, cã thÓ nhËn ®Çu vµo vµ ®­a ra c¸c ®Çu ra kh¸c nhau. §iÒu nµy yªu cÇu mét vµi lo¹i m« h×nh thùc hiÖn bªn trong, ®Ó th«ng b¸o nh÷ng thø ®· thay ®æi vµ trËt tù thùc hiÖn nã. §iÒu nµy ®­îc thùc hiÖn do l¾p r¸p c¸c thø víi nhau trong thÕ giíi, cung cÊp c¸c ®­êng dÉn kÌm theo c¸c th«ng ®iÖp ®i cïng víi chóng. Nh÷ng sù l¾p r¸p nµy lµ kh«ng nh×n thÊy ®­îc, chóng kh«ng cã sù hiÓn thÞ nµo trong thÕ giíi nh­ng chóng g¾n c¸c m« h×nh c¬ së víi nhau, cho phÐp c¸c hiÖu qu¶ to lín. PhÇn lín c¸c nót cã eventIn vµ eventOut vµ rÊt nhiÒu exposedField, ®ã lµ c¸ch c¸c nót nãi chuyÖn víi nhau. eventIn gièng nh­ c¸c bé nhËn nghe c¸c th«ng ®iÖp gäi c¸c events tõ bªn ngoµi vµ ®­a chóng ®Õn ®­îc xö lý. eventOut lµ c¸c bé truyÒn ph¸t, göi c¸c sù kiÖn tõ nót ra bªn ngoµi. exposedField lµ sù kÕt hîp c¶ hai. Chóng ®­îc coi nh­ c¸c file th«ng th­êng fieldname, eventIn gäi lµ set_fieldname vµ eventOut gäi lµ fieldname_changed. Nãi chung, c¸c phÇn set_ vµ _changed cña tªn lµ kh«ng cÇn thiÕt, b¹n cã thÓ sö dông fieldname cña exposedField vµ m« h×nh thùc hiÖn sÏ lµm nh÷ng thø b¹n mong muèn. II. Scripting Ở phÇn 3 tr­íc chóng ta ®· t×m hiÓu hÇu hÕt c¸c tiªu chuÈn cña VRML97. B©y giê tiÕp ®Õn chóng ta t×m hiÓu mét chñ chñ ®Ò míi. Chóng ta ®i theo h­íng m« t¶ VRML97 nh­ ng«n ng÷ lËp tr×nh tuÇn tù. Chóng ta sÏ häc c¸ch lµm thÕ nµo ®Ó sö dông ®­îc c«ng cô m¹nh nhÊt cña VRML97 : scrripting 1,Java, JavaScript, VRMLScript, hay ECMAscript? §iÒu ®Çu tiªn chóng ta cÇn gi¶i quyÕt ®ã lµ lµm râ sù mËp mê cña c¸c kh¸i niÖm trªn, ®Ó chóng ta hiÓu mét c¸ch chÝnh x¸c nh÷ng g× chóng ta ®ang ®Ò cËp tíi. HÇu hÕt chóng ta ®· mét lÇn nghe vÒ java vµ javascrip. Java lËp tr×nh mét ng«n ng÷ lËp tr×nh hoµn h¶o cña Sun, nã hoµn toµn ®éc lËp víi m¸y. B¹n dÞch ch­¬ng tr×nh cña m×nh sang d¹ng m· byte(bytecode) vµ ch­¬ng tr×nh ®Ých ®­îc t¹o ra cã thÓ ch¹y trªn bÊt kú lo¹i m¸y nµo nh­ thÓ cã mét m¸y java ¶o ®· ®­îc cµi ®Æt vµo. Java lËp tr×nh mét ng«n ng÷ lËp tr×nh cã nhiÒu ­u ®iÓm phï hîp cho viÖc ph¸t triÓn c¸c øng dông lín. JavaScript lµ mét ng«n ng÷ ®­îc Netscape ph¸t triÓn cã có ph¸p t­¬ng tù nh­ java. Tuy nhiªn, nã kh«ng ®­îc hoµn h¶o b»ng java vµ kh«ng ph¶i lµ ng«n ng÷ biªn dÞch. Nã ®­îc t¹o ra víi môc ®Ých sö dông cho c¸c script bªn trong c¸c trang web vµ th­êng kh¸ ®¬n gi¶n. Nã gåm phÇn ng«n ng÷ c¨n b¶n vµ mét sè c¸c ®èi t­îng cung cÊp thªm mét sè chøc n¨ng kh¸c ch¼ng h¹n nh­ truyÒn th«ng tin víi c¸c v¨n b¶n hiÖn t¹i. B©y giê ta xÐt ®Õn c¸c phiªn b¶n VRML. Khi VRML2.0 ®­îc chuÈn bÞ thùc hiÖn, hä cÇn mét ng«n ng÷ ®¬n gi¶n sö dông cho c¸c script cña VRML. Java ®· ®­îc ®Ó ý tíi, nh­ng hä cÇn mét ng«n ng÷ ®¬n gi¶n cho c¸c script kh«ng quan träng. V× thÕ hä kh«ng cÇn hÕt tÊt c¶ c¸c thµnh phÇn cña javascript hä t¹o ra mét phiªn b¶n gi¶n l­îc cña nã. Tr×nh duyÖt VRML cung cÊp thªm mét sè ®èi t­îng còng lµm viÖc nh­ c¸c tr×nh duyÖt th«ng th­êng. §ã lµ VRMLScript. Tuy nhiªn tr­íc khi VRML97 ®­îc coi nh­ mét tiªu chuÈn th× b¶n th©n phÇn lâi cña javascript ®· ®­îc chuÈn ho¸ cña ®­îc gäi lµ ECMAScript. Nh×n mét c¸ch c¨n b¶n nã còng gièng nh­ VRMLScript nh­ng ®· ®­îc chuÈn ho¸, VRMLScript ®· kh«ng ®­îc sö dông n÷a vµ VRML97 chØ hç trî java vµ ECMAScript trong c¸c Script. Kh«ng may , nã kh«ng chØ ®¬n gi¶n nh­ vËy. Kh«ng ph¶i tÊt c¶ c¸c tr×nh duyÖt ®Òu tÝch hîp thªm ECMAScript . NhiÒu cung cÊp më réng trong phÇn lâi cña ng«n ng÷ ®· ®­îc ®­a vµo trong javascript 1.2, trong khi ®ã chØ mét sè hç trî VRMLScript. . nã cã thÓ g©y r¾c rèi trong phÇn ch­¬ng tr×nh nguån khi lµm viÖc trªn c¸c tr×nh duyÖt kh¸c nhau trõ khi tÝch hîp ECMAScript. V× thÕ, trong lÇn t×m hiÓu ®Çu tiªn vÒ script, t«i sÏ nãi vÒ c¸ch lµm viÖc thÕ nµo víi ECMAScript. Chóng ta sÏ t×m hiÓu java ë phÇn sau. §iÓu ®ã kh«ng ph¶i vÊn ®Ò lín vµ ECMAScript h¼n sÏ phï hîp h¬n cho nh÷ng ng­êi míi b¾t ®Çu. 2,Sö dông ECMAScript trong VRML Do nh÷ng phøc t¹p cña sù ph¸t triÓn , trong khi c¸c tr×nh duyÖt hç trî ECMAScript trong c¸c script node, th× b¹n vÉn sö dông giao thøc URL “ javascript...”. B¹n còng cã thÓ sö dông VRML Script b»ng c¸ch dïng “vrlmscript..” . Tuy nhiªn b©y giê b¹n cã thÓ bá qua kh«ng sö dông VRMLScript v× tÊt c¶ c¸c script ®Òu cã thÓ thùc hiÖn b»ng ECMAScript. B¹n cã thÓ viÕt c¸c m· lÖnh ECMAScript trong c¸c file kh¸c nhau vµ tham chiÕu ®Õn c¸c file ®ã b»ng tr­êng URL trong Script node. C¸c file nguån ECMAScript source th­êng cã ®u«i lµ .js. V× thÕ, b¹n cã thÓ cã file lµ filename.js. MÆt kh¸c, nh­ t«i ®· nãi cã thÓ tham chiÕu c¸c dßng lÖnh ë file kh¸c, tuy nhiªn viÖc nµy chØ cã hiÖu qu¶ khi ta cã nhiÒu Script còng sö dông nh÷ng dßng lÖnh nµy. 3,LËp tr×nh tuÇn tù trong ECMAScript ECMAScript lµ mét ng«n ng÷ lËp tr×nh tuÇn tù. Nã kh«ng gièng víi VRML, mét ng«n ng÷ cã nhiÒu khai b¸o h¬n. VRML khai b¸o c¸c vËt thÓ víi c¸c thuéc tÝnh kh¸c nhau,vµ khi c¸c vËt thÓ nµy ®­îc l¾p r¸p víi nhau sÏ t¹o nªn thÕ giíi m« pháng Ch­¬ng tr×nh ECMAScript lµ mét d·y tuÇn tù c¸c c©u lÖnh mµ chóng ®­îc thùc thi chØ mét lÇn ®Ó t¹o ra kÕt qu¶ mong muèn. .C¸c kh¸I niÖm cña ECMAScript nh­ biÕn, biÓu thøc, vßng lÆp, hµm…rÊt gi«ng víi c¸c ng«n ng÷ kÞch b¶n kh¸c, vËy t«i kh«ng ®Ò cËp chi tiÕt ë ®©y .ChØ cÇn chó ý ë phÇn sau:C¸c ®èi t­îng trong ECMAScript . VRML Objects NÕu b¹n muèn t¹o ra scripts b»ng VRML b¹n sÏ cÇn sö dông ®èi t­îng ECMAScript. §ã lµ c¸c ®èi t­îng ®­îc g¾n liÒn bªn trong tr×nh duyÖt cña b¹n, tr×nh duyÖt cã s½n mét sè thuéc tÝnh, hµm khëi t¹o vµ ph­¬ng thøc mµ cã thÓ b¹n sÏ thÊy rÊt cã Ých. VÝ dô, ®èi t­îng SFVec3f cã mét sè phÐp xö lý h×nh häc mµ b¹n cã thÓ sö dông ch¼ng h¹n nh­ chiÒu dµi, ®iÓm, giao ®iÓm vv.. HÇu hÕt c¸c kiÓu d÷ liÖu c¬ b¶n VRML cã t­¬ng øng trong ECMAScript, v× thÕ gi¸ trÞ SFVec3f trong VRML lµ t­¬ng øng víi ®èi t­îng SFVec3f trong ECMAScript. Tuy nhiªn, nh÷ng kiÓu ®­îc ¸nh x¹ trùc tiÕp tõ c¸c kiÓu cña ECMAScript : SFFloat, SFInt32 vµ SFTime tÊt c¶ ®Òu ¸nh x¹ ®Õn d÷ liÖu kiÓu sè. SFBool ¸nh x¹ trùc tiÕp tíi kiÓu boolean. B¹n cã thÓ sö dông gi¸ trÞ true vµ false trong ECMAScript còng gièng nh­ gi¸ trÞ TRUE vµ FALSE trong VRML. TÊt c¶ c¸c kiÓu d÷ liÖu kh¸c trong VRML ®Òu ¸nh x¹ tíi c¸c ®èi t­îng cña ECMAScript, ch¼ng h¹n nh­ SFVec3f, SFColor, MFNode vv.. Còng nh­ c¸c kiÓu chuÈn, c¸c cÆp ®èi t­îng ®­îc cung cÊp trong c¸c tr×nh duyÖt. §ã lµ c¸c ®èi t­îng tr×nh duyÖt (Browser object), nã cã thÓ ®­îc sö dông ®Ó lÊy th«ng tin tõ tr×nh duyÖt, vµ ®èi t­îng VrmlMatrix lµ mét ma trËn 4x4 sö dông trong h×nh häc 3 chiÒu. NÕu b¹n cÇn sö dông ®èi t­îng nµy b¹n sÏ cÇn cã kiÕn thøc kh¸ v÷ng vÒ h×nh häc 3 chiÒu, lóc ®ã th× míi cã thÓ sö dông ®èi t­îng nµy mét c¸ch hiÖu qu¶. C¸c ®èi t­îng SFxxx th× kh¸c h¼n vµ chóng cã c¸c hµm cña chÝnh m×nh vµ c¸c chøc n¨ng t­¬ng øng víi tõng kiÓu cô thÓ. Bëi v× chóng kh¸c nhau nªn t«i sÏ kh«ng ®Ò cËp ®Õn ë ®©y. §Ó cã th«ng tin vÒ c¸ch lµm viÖc cña tõng kiÓu t«i khuyªn c¸c b¹n nªn tham kh¶o trong phô lôc C. ë ®ã cã ®Çy ®ñ , chi tiÕt vÒ c¸c kiÓu vµ h­íng dÉn c¸ch b¹n cã thÓ sö dông chóng. T«i sÏ chØ nãi vÒ c¸c kiÓu MFxxx mÆc dï chóng rÊt ®¬n gi¶n. §ã lµ c¸c m¶ng t­¬ng øng víi kiÓu SF vµ cã rÊt Ýt c¸c hµm. Chóng chØ cã mét thuéc tÝnh ®ã lµ length, ®ã lµ sè c¸c thµnh phÇn trong danh s¸ch hiÖn t¹i. Chóng cã mét ph­¬ng thøc, toString(). Chóng còng chØ cã mét hµm khëi t¹o, chóng sÏ lÊy danh s¸ch c¸c ®èi t­îng SF ®Æt vµo trong ®èi t­îng MF míi. Chóng cã thÓ kh«ng cã phÇn tö nµo nÕu b¹n muèn t¹o mét m¶ng rçng. B¹n cã thÓ truy cËp vµo c¸c ®èi t­îng SF bªn trong ®èi t­îng MF theo c¸ch gièng nh­ truy cËp vµo m¶ng bÊt kú, b»ng c¸ch sö dông chØ sè ®Æt bªn trong dÊu ngoÆc vu«ng. V× thÕ, vectors[0] ®­a ra phÇn tö ®Çu tiªn cña ®èi t­îng vector MFVec3f ,vectors[7] ®­a ra phÇn tö thø bÈy cña ®èi t­îng vector MFVec3f. NÕu b¹n muèn ghi vµo ®èi t­îng SF trong ®èi t­îng MF, b¹n cã thÓ dïng c¸ch sau : var vectors = new MFVec3f(); vectors[5] = new SFVec3f(0,1,0); g¸n mét ®èi t­îng míi SFVec3f(0,1,0) vµo thµnh phÇn tö thø 6 trong vector. NÕu b¹n ghi vµo vÞ trÝ v­ît qua vÞ trÝ cuèi cïng cña m¶ng th× ®èi t­îng sÏ më réng ra, cho phÐp b¹n cã thÓ ghi vµo ®ã. V× thÕ b¹n cã thÓ t¹o m¶ng rçng ë trªn vµ sau ®ã ghi vµo bÊt cø phÇn tö nµo cña m¶ng mµ b¹n muèn. 4,VÝ dô §©y lµ vÝ dô cho b¹n thÊy lµm thÕ nµo b¹n cã thÓ sö dông c¸c ph­¬ng thøc cña VRML97 ®Ó t¹o hiÖu qu¶ cao. §©y lµ vÝ dô ®¬n gi¶n vÒ h×nh ho¹ cho b¹n thÊy c¸ch t×m tÝch cña 2 vector khi b¹n di chuyÓn c¸c vector. #VRML V2.0 utf8 WorldInfo { title "Floppy's VRML97 Tutorial Example 4.4b" info ["(C) Copyright 2000 Vapour Technology Ltd." "guide@vapourtech.com"] } NavigationInfo { type ["EXAMINE"] } Viewpoint { description "Default View" position 0 0 3 } Shape { appearance Appearance { material Material { diffuseColor 1 1 1 } } geometry Sphere { radius 0.05 } } Group { children [ DEF SENSOR1 SphereSensor { } DEF VECTOR1 Transform { children [ Transform { translation 0 0.5 0 children [ Shape { appearance Appearance { material Material { diffuseColor 1 0 0 } } geometry Cylinder { height 1 radius 0.03 } } ] } ] } ] } Group { children [ DEF SENSOR2 SphereSensor { } DEF VECTOR2 Transform { children [ Transform { translation 0 0.5 0 children [ Shape { appearance Appearance { material Material { diffuseColor 0 1 0 } } geometry Cylinder { height 1 radius 0.03 } } ] } ] } ] } DEF CROSSVECTOR Transform { children [ Transform { translation 0 0.5 0 children [ Shape { appearance Appearance { material Material { diffuseColor 0 0 1 } } geometry Cylinder { height 1 radius 0.03 } } ] } ] } DEF CROSS Script { eventIn SFRotation vector1_rotation_changed eventIn SFRotation vector2_rotation_changed field SFVec3f vector1 0 1 0 field SFVec3f vector2 0 1 0 eventOut SFRotation crossvector_set_rotation eventOut SFVec3f crossvector_set_scale url "javascript: function calc_cross_product() { var crossVec = vector1.cross(vector2); var crossVecLength = crossVec.length(); if (crossVecLength < 0.001) crossVecLength = 0.001; crossvector_set_scale = new SFVec3f(1,crossVecLength,1); var unitVec = new SFVec3f(0,1,0); crossvector_set_rotation = new SFRotation(unitVec,crossVec); } function initialize() { calc_cross_product(); } function vector1_rotation_changed(value,time) { var unitVec = new SFVec3f(0,1,0); vector1 = value.multVec(unitVec); } function vector2_rotation_changed(value,time) { var unitVec = new SFVec3f(0,1,0); vector2 = value.multVec(unitVec); } function eventsProcessed() { calc_cross_product(); } " } ROUTE SENSOR1.rotation_changed TO VECTOR1.rotation ROUTE SENSOR1.rotation_changed TO CROSS.vector1_rotation_changed ROUTE SENSOR2.rotation_changed TO VECTOR2.rotation ROUTE SENSOR2.rotation_changed TO CROSS.vector2_rotation_changed ROUTE CROSS.crossvector_set_rotation TO CROSSVECTOR.set_rotation ROUTE CROSS.crossvector_set_scale TO CROSSVECTOR.set_scale §Çu tiªn cã 2 ®­êng trßn (mµu ®á vµ xanh) thÓ hiÖn 2 ®¬n vÞ vect¬. C¶ hai ®­îc g¾n víi Sphere Sensors, v× thÕ b¹n cã thÓ di chuyÓn chóng. §­êng trßn thø 3 (mµu xanh da trêi) thÓ hiÖn tÝch cña 2 vector. TÝch cña 2 vect¬ lµ mét vect¬ trùc giao víi c¶ 2 vect¬ vµ chiÒu dµi cña vect¬ nµy phô thuéc vµo gãc gi÷a 2 vect¬ ban ®Çu. B¹n kh«ng thÓ di chuyÓn h×nh trßn mµu xanh da trêi v× nã ®­îc t¹o ra tõ Script, phô thuéc vµo vÞ trÝ cña 2 h×nh trßn kh¸c. §Ó t¹o ra vect¬ tÝch, chóng ta cÇn 2 vect¬. Tuy nhiªn, c¸i mµ chóng ta cã tõ SphereSensors lµ sù quay trßn, v× thÕ chóng ta ph¶i biÕn ®æi chóng sang c¸c vect¬. ViÖc nµy ®­îc thùc hiÖn trong 2 bé qu¶n sù kiÖn b»ng c¸ch t¹o ra vect¬ ®¬n vÞ vµ quay chóng b»ng gi¸ trÞ quay míi cña eventIn sö dông ph­¬ng thøc multVec() cña ®èi t­îng SFRotation . KÕt qu¶ ®­îc l­u trong ®èi t­îng SFVec3f cho ng­êi dïng khi tÝnh vect¬ tÝch. V× thÕ mçi khi cã sô thay ®æi, chóng ta muèn tÝnh to¸n l¹i vect¬ tÝch vµ ®­a ra kÕt qu¶. ViÖc nµy kh¸ ®¬n gi¶n trong hµm calc_cross_product . §Çu tiªn ta tÝnh tÝch cña vector1 vµ vector2, cho kÕt qu¶ lµ crossVec. Tuy nhiªn ®Ó cã ®­îc vect¬ trong VRML , chóng ta cÇn biÕn ®æi nã sang gãc quay ban ®Çu vµ chiÒu dµi. Sù thay ®æi cã thÓ ®­îc thÊy trong h×nh trßn mµu xanh da trêi. §Çu tiªn h·y gi¶i quyÕt vÊn ®Ò tØ lÖ. Chóng ta cã thÓ cã chiÒu dµi b»ng c¸ch dïng ph­¬ng thøc length() cña kiÓu SFVec3f . Tuy nhiªn chóng ta kh«ng thÓ cã tØ lÖ 0, v× thÕ chóng ta cÇn kiÓm tra xem tØ lÖ cã kh¸c 0 hay kh«ng b»ng c¸ch dïng lÖnh if. B©y giê chóng ta muèn lÊy tû lÖ b»ng trôc Y, v× thÕ chóng ta t¹o SFVec3f míi. Chóng ta cÇn ®Æt gãc quay cho ®óng. Chóng ta sÏ dïng mét trong c¸c cÊu tróc cña kiÓu SFRotation. Nã cho phÐp b¹n t¹o ra gãc quay míi dïng 2 vect¬, mét lµ from, mét lµ to. Gãc quay ®­îc t¹o sÏ lµ gãc tõ vect¬ from ®Õn vect¬ to. V× thÕ chóng ta t¹o ra vect¬ ®¬n vÞ theo trôc Y vµ t¹o ra gãc quay sö dông vect¬ ®ã. §©y lµ gãc quay chóng ta cÇn dïng nh­ kÕt qu¶ ®­a ra. B¹n cã thÓ tõ vÝ dô nµy ®Ó x¾p xÕp c¸c ph­¬ng thøc h÷u Ých trong c¸c ®èi t­îng chuÈn VRML 97 . SÏ r©t h÷u Ých nÕu b¹n ®äc qua c¸c m« t¶ vÒ c¸c ®èi t­îng tr­íc khi b¹n b¾t tay vµo lËp tr×nh. NÕu kh«ng b¹n cã thÓ gÆp nhiÒu sai sãt mµ viÖc söa lçi sÏ tèn thêi gian gÊp nhiÒu lÇn 5,The Browser object §èi t­îng Browser lµ mét ®èi t­îng ECMAScript n»m bªn trong tr×nh dÞch ECMAScript ®­îc cung cÊp bëi tr×nh duyÖt VRML. TÊt c¶ c¸c tr×nh duyÖt cÇn ®­îc cung cÊp ®èi t­îng nµy. Kh«ng may, c¸c script hç trî trong VRML th­êng kh¸ m©u thuÉn nhau vµ nãi chung lµ th­êng hç trî kh«ng tèt. §iÒu nµy lµ rÊt ®¸ng tiÕc khi c¸c script hç trî ®ãng vai trß rÊt quan träng. Dï vËy, nh­ t«i ®· nãi, ®èi t­îng Browser vÉn ®­îc g¾n liÒn trong bé dÞch ECMAScript cña tr×nh duyÖt. §ã lµ ®èi t­îng tÜnh, nghÜa lµ b¹n kh«ng ph¶i t¹o ra c¸c biÕn kiÓu ®èi t­îng nµy tr­íc khi b¹n cã thÓ sö dông c¸c ph­¬ng thøc cña nã. §Ó sö dông ph­¬ng thøc bªn trong ®èi t­îng Browser, chØ cÇn sö dông có ph¸p sau : Browser.functionName(). Nã sÏ thùc thi c¸c ph­¬ng thøc tÜnh bªn trong ®èi t­îng Browser. §èi t­îng Browser ®èi t­îng sö dung rÊt nhiÒu. Nã lµ tµi nguyªn th«ng tin cña còng cung cÊp mét sè c¸ch thay ®æi thÕ giíi quan cña b¹n. Tr­íc hÕt, chóng ta sÏ xem viÖc lÊy th«ng tin tõ tr×nh duyÖt. B¹n h·y nhí l¹i ë Script node cã 2 tr­êng ®­îc gäi lµ directOutput vµ mustEvaluate. Chóng kh¸ lµ quan träng khi sö dông Browser, nªn t«i sÏ nh¾c l¹i cho c¸c b¹n biÕt chóng cã vai trß thÕ nµo. mustEvaluate – NÕu nã cã gi¸ trÞ lµ true, th× script sÏ ®­îc ®Þnh l­îng ngay tøc kh¾c. Tr×nh duyÖt ®­îc phÐp ng¨n l¹i qu¸ tr×nh xö lý script nÕu cã qu¸ tr×nh quan träng h¬n cÇn thùc hiÖn tr­íc. MustEvaluate nÕu b»ng true th× tr×nh duyÖt sÏ kh«ng cã kh¶ n¨ng lµm ®iÒu nµy n÷a mµ ph¶i thùc thi script ngay tøc kh¾c. directOutput – nÕu cã gi¸ trÞ true, script cã thÓ ghi trùc tiÕp tíi eventIns vµ ®äc trùc tiÕp tõ eventOuts cña nót mµ nã truy cËp tíi. B×nh th­êng, script cã thÓ chØ lµm nh­ vËy khi göi hoÆc nhËn sù kiÖn trong tËp c¸c sù kiÖn b×nh th­êng. Information Technology TËp c¸c ph­¬ng thøc ®Çu tiªn mµ chóng ta sÏ xem trong ®èi t­îng Brower lµ c¸c ph­¬ng thøc lÊy th«ng tin. T«i sÏ s¾p xÕp chóng l¹i, kÌm theo c¸c m« t¶ ng¾n gän c¸c ph­¬ng thøc : Browser.getName() §©y lµ ph­¬ng thøc chØ tr¶ l¹i mét chuçi chøa tªn cña tr×nh duyÖt, vÝ dô nh­ "Cosmo Player". Nã tr¶ vÒ mét chuçi rçng nÕu kh«ng cã th«ng tin.It returns Browser.getVersion() Ph­¬ng thøc tr¶ l¹i chuçi chøa th«ng tin vÒ phiªn b¶n cña tr×nh duyÖt. Nã còng lµ chuçi rçng nÕu kh«ng cã th«ng tin g×. Browser.getWorldURL() Ph­¬ng thøc tr¶ l¹i chuçi URL hiÖn t¹i ®ang ®­îc load. Browser.getCurrentFrameRate() Tr¶ l¹i mét gi¸ trÞ t­¬ng ®­¬ng víi tèc ®é load c¸c frame hiÖn hµnh (sè c¸c h×nh ¶nh tr×nh duyÖt thÓ hiÖn ®­îc trªn mét gi©y). Browser.getCurrentSpeed() §©y còng lµ ph­¬ng thøc tr¶ vÒ mét gi¸ trÞ sè, lµ thêi gian b»ng tèc ®é chuyÓn ®éng cña ng­êi dïng, liªn quan ®Õn hÖ thèng to¹ ®é Viewpoint's. Browser.setDescription(string description) – cÇn mustEvaluate cã gi¸ trÞ TRUE . ®©y lµ ph­¬ng thøc thay ®æi m« t¶ hiÖn t¹i cña trang Web b»ng mét chuçi, t­¬ng ®­¬ng mét tham sè. Browser.loadURL(MFString url, MFString parameter)-cÇn mustEvaluate cã gi¸ b»ng TRUE . Nã load c¸c th«ng tin míi vÒ tõ c¸c file kh¸c. §èi sè ®Çu tiªn lµ danh s¸ch MFString ®Ó thö. The chuÈn cña VRML, c¸c phÇn tö cña danh s¸ch ®­îc thö cho ®Õn khi thµnh c«ng. §èi sè thø 2, parameter, cung cÊp thªm c¸c th«ng sè, ch¼ng h¹n cöa sæ TARGET vv..Nh÷ng tham sè b¹n hoµn toµn cã thÓ sö dông cho node Anchor. Thùc tÕ cã nhiÒu c«ng viÖc lµm gièng nh­ Anchor. NÕu trang Web míi ®­îc load xuèng cïng lóc th× trang hiÖn t¹i sÏ bÞ ®ãng xuèng vµ ®­îc thay thÕ b»ng néi dung míi. Browser.replaceWorld(MFNode nodes) - cÇn mustEvaluate cã gi¸ trÞ b»ng TRUE Nã thay thÕ toµn bé c¸c trang ®ang load hiÖn t¹i b»ng c¸c node trong ®èi t­îng MFNode. Ph­¬ng thøc nµy sÏ kh«ng bµo giê quay lui l¹i ®­îc, còng gièng nh­ c¸c script ®ang vËn hµnh còng sÏ ®­îc thay thÕ. Cã 2 ph­¬ng thøc cho phÐp b¹n t¹o ra c¸c phÇn míi cña VRML , chóng ®­îc biÕt tíi nh­ c¸c ph­¬ng thøc createVrmlFromX. Chóng lµ : Browser.createVrmlFromString(String string) Browser.createVrmlFromURL(MFString url, SFNode node, String eventIn) C¸c ph­¬ng thøc cho phÐp ta t¹o ra c¸c phÇn míi cña VRML tõ c¸c chuçi hoÆc c¸c file. C¶ 2 ph­¬ng thøc t¹o ra ®èi t­îng MFNode míi, do ®ã b¹n cã thÓ sö dông ®Ó thªm vµo nhãm c¸c node th«ng qua addChildren eventIn.TÊt c¶ c¸c node ®Òu cã sù kiÖn eventIn nµy, v× thÕ b¹n cã thÓ thªm c¸c node con t¹i bÊt kú n¬i nµo b¹n muèn. Hai ph­¬ng thøc lµm viÖc theo c¸c c¸ch kh«ng kh¸c nhau lµ mÊy, nh­ b¹n cã thÓ thÊy ë ®Þnh nghÜa cña c¸c ph­¬ng thøc. T¹i sao cã ®iÒu nµy th× t«i kh«ng râ. B¹n còng cã thÓ nghÜ chóng lµm viÖc nh­ nhau, nh­ng thùc tÕ kh«ng ph¶i thÕ. createVrmlFromString lÊy chuçi lµm tham sè vµ tr¶ l¹i ®èi t­îng MFNode chøa VRML tõ chuçi. Chuçi ph¶i lµ VRML cã gi¸ trÞ vµ ph¶i ®éc lËp hoµn toµn. Cã nghÜa lµ nã kh«ng thÓ sö dông DEFed ngoµi chuçi vµ còng nh­ vËy cho ®Þnh nghÜa PROTO. B¹n còng cã thÓ tÝnh ®Õn c¶ ROUTEs trong chuçi. VÒ c¬ b¶n, chuçi còng gièng nh­ file VRML vµ cã thÓ sö dông c¸c quy ®Þnh vÒ file cho chuçi. VÝ dô, nÕu chóng ta bªn trong mét script mµ cã sù kiÖn eventOut cña MFNode gäi lµ newChildren, nã sÏ dÉn ®Õn sù kiÖn addChildren ë mét nhãm c¸c node, chóng ta cã thÓ lµm mét sè viÖc nh­ sau newVRML = 'Shape {'; newVRML += ' appearance Appearance {'; newVRML += ' material Material {'; newVRML += ' diffuseColor 1 0 0'; newVRML += ' }'; newVRML += ' }'; newVRML += ' geometry Box {'; newVRML += ' }'; newVRML += '}'; newChildren = Browser.createVrmlFromString(newVRML); Chóng sÏ kÕt hîp thµnh mét chuçi mµ chóng ta cÇn vµ sau ®ã t¹o thµnh MFNode míi tõ chuçi ®ã. MFNode nµy ngay lËp tøc ®­îc g¸n cho sù kiÖn eventOut newChildren, vµ nã ®­îc göi tíi nhãm c¸c node. Nót con hiÖn thêi cña nhãm ®­îc thay thÕ, chØ mét node míi ®­îc thªm vµo. Cßn mét ph­¬ng thøc kh¸c Ýt phøc t¹p h¬n. createVrmlFromString() lµm viÖc rÊt ®¬n gi¶n vµ linh ho¹t. Ng­îc l¹i, , createVrmlFromURL() phøc t¹p h¬n vµ kh«ng linh ho¹t b»ng. Víi ph­¬ng thøc nµy, b¹n ph¶i cung cÊp MFString chøa danh s¸ch c¸c URL ®Ó thö thay thÕ vµo tham sè ®Çu tiªn trong ph­¬ng thøc. C¸c file hoµn toµn ph¶i cã gi¸ trÞ VRML vµ tu©n theo c¸c luËt b×nh th­êng. C¸c node bªn trong file sÏ ®­îc ®äc vµ biÕn ®æi sang node míi cho b¹n sö dông. Sù lóng tóng sÏ ®Õn khi b¹n thö vµ göi MFNode míi tíi nhãm c¸c node ë bªn ngoµi. Ph­¬ng thøc createVrmlFromString cho b¹n ®èi t­îng MFNode ®¬n gi¶n mµ b¹n cã thÓ vËn dông mét c¸ch linh ho¹t vµ lµm nh÷ng g× b¹n muèn. Ph­¬ng thøc createVrmlFromURL kh«ng tr¶ l¹i bÊt cø gi¸ trÞ nµo. Thay vµo ®ã, nã göi MFNode b»ng chÝnh nã, tõ bªn trong ph­¬ng thøc. §ã lµ vai trß cña c¸c tham sè. §Çu tiªn lµ tham chiÕu ®Õn nót b¹n muèn thªm c¸c phÇn míi vµ thø hai lµ tªn cña MFNode eventIn mµ sÏ nhËn nót míi. T«i nghÜ vÝ dô sau sÏ nãi râ h¬n DEF GROUP Group { } Script { field SFNode group USE GROUP url "javascript: function initialize() { urlString = new MFString('cone.wrl'); Browser.createVrmlFromURL(urlString,group,'addChildren'); } " } Nh­ b¹n thÊy, c¸c tham sè lµ tªn c¸c file ®­îc dïng, SFNode tham chiÕu, tªn cña c¸c sù kiÖn eventIn. Ph­¬ng thøc qu¶n lý mäi thø kh¸c cho b¹n, göi nót míi vµo addChildren eventIn cña nhãm. T«i kh«ng ch¾c ch¾n t¹i sao nã l¹i lµm nh­ vËy, nh­ng biÕt ch¾c cã lý do nµo ®ã. T«i sÏ nãi cho c¸c b¹n khi nµo t«i biÕt lý do nµy. Khi lùa chän b¹n cã thÓ bá qua ph­¬ng thøc createVrmlFromURL() vµ sö dông ph­¬ng thøc createVrmlFromString() víi nót Inline chøa tªn c¸c file b¹n muèn thay thÕ, nh­ : newVRML = 'Inline { url "cone.wrl" }'; newChildren = Browser.createVrmlFromString(newVRML); Nã ®­a ra chøc n¨ng gièng nh­ ph­¬ng thøc createVrmlFromURL() víi viÖc sö dông c¸ch cña createVrmlFromString(). C¸m ¬n Eyal Teler cho ®Ò xuÊt nµy. Trë l¹i c«ng viÖc hay xem vÝ dô sau : #VRML V2.0 utf8 WorldInfo { title "Floppy's VRML97 Tutorial Example 4.5b" info ["(C) Copyright 2000 Vapour Technology Ltd." "guide@vapourtech.com"] } NavigationInfo { type ["NONE"] } Viewpoint { description "Default View" position 0 0.5 2 } Transform { translation -0.25 -0.15 0 children [ DEF CUBESENSOR TouchSensor { } Shape { appearance Appearance { material Material { diffuseColor 1 0 0 } } geometry Box { size 0.1 0.1 0.17 } } ] } Transform { translation 0 -0.15 0 children [ DEF SPHERESENSOR TouchSensor { } Shape { appearance Appearance { material Material { diffuseColor 0 1 0 } } geometry Sphere { radius 0.05 } } ] } Transform { translation 0.25 -0.15 0 children [ DEF CONESENSOR TouchSensor { } Shape { appearance Appearance { material Material { diffuseColor 0 0 1 } } geometry Cone { bottomRadius 0.05 height 0.1 } } ] } DEF TOP Transform { translation 0 0.5 0 children [ Transform { rotation 1 0 0 1.57 children [ Shape { appearance Appearance { material Material { diffuseColor 0.4 0.4 0.4 } } geometry Box { size 1 1e-8 1 } } ] } ] } DEF CREATOR Script { eventIn SFTime cube_touchTime eventIn SFTime sphere_touchTime eventIn SFTime cone_touchTime field SFNode parentNode USE TOP eventOut MFNode newChildren mustEvaluate TRUE url "javascript: function cube_touchTime(value,time) { newVRML = 'Group {'; newVRML += ' children ['; newVRML += ' DEF SENSOR PlaneSensor {'; newVRML += ' maxPosition 0.45 0.45'; newVRML += ' minPosition -0.45 -0.45'; newVRML += ' }'; newVRML += ' DEF OBJECT Transform {'; newVRML += ' children ['; newVRML += ' Shape {'; newVRML += ' appearance Appearance {'; newVRML += ' material Material {'; newVRML += ' diffuseColor 1 0 0'; newVRML += ' }'; newVRML += ' }'; newVRML += ' geometry Box {'; newVRML += ' size 0.1 0.1 0.1'; newVRML += ' }'; newVRML += ' }'; newVRML += ' ]'; newVRML += ' }'; newVRML += ' ]'; newVRML += '}'; newVRML += 'ROUTE SENSOR.translation_changed TO OBJECT.set_translation'; newChildren = Browser.createVrmlFromString(newVRML); } function sphere_touchTime(value,time) { newVRML = 'Group {'; newVRML += ' children ['; newVRML += ' DEF SENSOR PlaneSensor {'; newVRML += ' maxPosition 0.45 0.45'; newVRML += ' minPosition -0.45 -0.45'; newVRML += ' }'; newVRML += ' DEF OBJECT Transform {'; newVRML += ' children ['; newVRML += ' Shape {'; newVRML += ' appearance Appearance {'; newVRML += ' material Material {'; newVRML += ' diffuseColor 0 1 0'; newVRML += ' }'; newVRML += ' }'; newVRML += ' geometry Sphere {'; newVRML += ' radius 0.05'; newVRML += ' }'; newVRML += ' }'; newVRML += ' ]'; newVRML += ' }'; newVRML += ' ]'; newVRML += '}'; newVRML += 'ROUTE SENSOR.translation_changed TO OBJECT.set_translation'; newChildren = Browser.createVrmlFromString(newVRML); } function cone_touchTime(value,time) { urlString = new MFString('cone.wrl'); Browser.createVrmlFromURL(urlString, parentNode, 'addChildren'); } " } ROUTE CUBESENSOR.touchTime TO CREATOR.cube_touchTime ROUTE SPHERESENSOR.touchTime TO CREATOR.sphere_touchTime ROUTE CONESENSOR.touchTime TO CREATOR.cone_touchTime ROUTE CREATOR.newChildren TO TOP.addChildren TÊt c¶ c¸c ph­¬ng thøc ®Òu ®¬n gi¶n, t«i sÏ ®­a ra ®©y mét vÝ dô, qua ®ã b¹n cã thÓ thÊy ho¹t ®éng cña chóng. Trong ®ã sÏ kh«ng cã c¸i g× lµ b¹n kh«ng hiÓu v× tÊt c¶ mäi thø b©y giê ®Òu ®· kh¸ quen thuéc. TimeSensor trong vÝ dô cã vai trß cËp nhËt b×nh th­êng c¸c v¨n b¶n hiÖn ra mµn h×nh. #VRML V2.0 utf8 WorldInfo { title "Floppy's VRML97 Tutorial Example 4.5a" info ["(C) Copyright 2000 Vapour Technology Ltd." "guide@vapourtech.com"] } NavigationInfo { } Viewpoint { description "Default View" } Shape { appearance Appearance { material Material { diffuseColor 1 1 1 } } geometry DEF TEXT Text { fontStyle FontStyle { size 0.5 justify "MIDDLE" } } } DEF TIMER TimeSensor { loop TRUE startTime 0 stopTime -1 cycleInterval 0.1 } DEF TEXTCREATOR Script { eventIn SFTime ping eventOut MFString string url "javascript: function ping(value,time) { browserString = 'Browser: ' + Browser.getName(); versionString = 'Version: ' + Browser.getVersion(); urlString = 'URL: ' + Browser.getWorldURL(); speedString = 'Speed: ' + Browser.getCurrentSpeed(); frameString = 'Frame Rate: ' + Browser.getCurrentFrameRate() + ' fps'; string = new MFString(browserString, versionString, urlString, speedString, frameString); } " } ROUTE TIMER.cycleTime TO TEXTCREATOR.ping ROUTE TEXTCREATOR.string TO TEXT.string III.Nội dung của bài tập lớn Trong bài tập lớn này chúng tôi sẽ tập trung mô phỏng một toà nhà (lấy mô hình từ nhà C14_15 DHBKHN) sử dụng ngôn ngữ VRML kèm theo JavaScript.Chương trình này cho phép người dùng quan sát căn nhà từ xa hay ở gần,có thể tham quan các phòng học(giống như trong thực tế, bao gồm bàn ghế,cửa ra vào,cửa sổ,quạt trần...) IV.Các đối tượng cơ bản trong bài tập lớn 1,Cửa ra vào Mã VRML có dạng như sau: SENSOR CylinderSensor { diskAngle 0.78 maxAngle 3 minAngle 0 } DEF OBJECT Transform { children [ canhcua{ pos 0 0 0} ] } ROUTE SENSOR.rotation_changed TO OBJECT.rotation Như vậy là để xây dựng cánh cửa quay ,ta xây dựng một cánh cửa tĩnh sau đó đưa vào Cylindersensor với điều kiện là tâm của hệ toạ độ di chuyển về cạnh bên của cánh cửa. 2,Cửa kéo Mã VRML có dạng như sau: Group { children [ Transform { translation 0.4 2.39 0 scale 0.6 1.52 1 children [ DEF SENSOR PlaneSensor { maxPosition 1 0 minPosition 0.05 0 } DEF SLIDER Transform { rotation 0 1 0 1.57 children [ cuaso{pos 0 0 0} ] } 3,Quạt trần Quạt trần có thể quay được nhờ trong quạt có định nghĩa một nút nội suy về hướng, hoạt động theo một TimerSensor Mã VRML có dạng như sau: DEF fan Transform { translation 0 290 200 scale 1.5 1.5 1.5 children [ Inline {url "Fan.wrl"} DEF gocquay OrientationInterpolator { key[0 0.25 0 5 0.75 1.0] keyValue [0 1 0 0, 0 1 0 1.57, 0 1 0 3.14 , 0 1 0 4.17 0 1 0 6.28] } ] } DEF ts1 TimeSensor { cycleInterval 1.3 loop TRUE } ROUTE fanon.isActive TO scr.turnin ROUTE scr.turnchange TO time.enabled ROUTE time.fraction_changed TO gocquay.set_fraction ROUTE gocquay.value_changed TO q1.rotation Quạt còn được định nghĩa TouchSensor để có thể bật tắt.Một nút định nghĩa TouchSensor để khi ấn vào thì nó sẽ bật hay tắt Timer để quay quạt. Ngoài ra còn dùng các hàm javasciript để xác định trạng thái của quạt đang hay đang tắt ,từ đó sẽ xác định quạt quay hay dừng. 4,Bảng kéo Bảng kéo giảng đường gồm 4 tấm có thể kéo lên hay xuống tuỳ theo người sử dụng.Nguyên tắc xây dựng bảng tương tự như là cửa kéo.Ta dùng planesensor để cho các tấm bảng dịch chuyển. 5,Ánh sáng Đầu tiên ta xây dựng các ánh sáng điểm có dạng như sau: DEF light PointLight { radius 100 location 0 0 0 color 0 0 0} Lúc này ánh sáng chưa có tác động.Sau đó ,ta xây dựng các hàm để khi tác động vào một nút gắn với thì nguồn sáng sẽ được kích hoạt.Hàm đó có dạng như sau: DEF scr Script { eventIn SFBool set_light eventOut SFColor light_change field SFBool IsOpen FALSE url "javascript: function set_light(val) { if(IsOpen) { light_change[0] = 0; light_change[1] = 0; light_change[2] = 0; } else { light_change[0] = 1; light_change[1] = 1; light_change[2] = 1; } IsOpen = !IsOpen; } } Ngoài ra ta còn xây dựng một hàm java khác để xác định trạng thái của nguồn sáng để từ đó ta có thể xác định được là khi ấn công tắc nguồn sáng được tắt hay là bật. 6, GhÕ ChiÕc ghÕ ®­îc x©y dùng tõ c¸c ®èi t­îng h×nh häc c¬ b¶n : hép, trô, cÇu. DEF chair Transform { rotation 0 1 0 -1.57 children [ DEF ps1 PlaneSensor { autoOffset TRUE offset 0 0 0 maxPosition 0 0 minPosition -40 0 } DEF Trenghe Transform { } DEF Trenghe Transform { children [ DEF Quay CylinderSensor { autoOffset TRUE maxAngle 0 minAngle 1 diskAngle 0.2 enabled TRUE } ] ROUTE Quay.rotation_changed TO Trenghe.rotation } ] ROUTE ps1.translation_changed TO chair.translation } ghÕ ®­îc ®Þnh nghÜa lµm hai phÇn : trªn ghÕ vµ ch©n ghÕ. PhÇn trªn ghÕ cã thÓ quay quanh trôc, c¶ chiÕc ghÕ cã thÓ di ®­îc trªn mét trôc n»m ngang. 7,Bµn häc: DEF banhoc Transform { } DEF ngankeo Transform { rotation 0 1 0 -1.57 translation -2 0 -25 children [ Inline { url "ngankeo.wrl" } ] } Bµn cã c¸c ng¨n kÐo cã thÓ kÐo ra vµo. Trên đây là một số đối tượng cơ bản trong VRML, ngoài ra khi xây dựng nhà C14-15 thì em xây dựng theo nguyên tắc cơ bản sau đây :Đầu tiên xác định toa độ cần đặt tâm để cho việc đặt các phòng vào được một cách dễ dàng. Ở đây ta đặt tâm tại góc ngoài cùng bên trái của phòng 102. Nguyên tắc xâydựng cơ bản là : Đầu tiên ta xây dựng bộ khung của nó. Sau đó mới xây dựng các phòng và đặt cá phòng vào vị trí chính xác. Khi xây dựng một phòng dầu tiên ta xác định các đối tượng cơ bản trong phòng là của sổ, cửa chính và bức tường. Như vậy ta phải xây dựng 3 đối tượng cơ bản đó, sau đó nhân bản và đặt chúng vào các vị trí chính xác. MỤC LỤC Lời nói đầu……………………………………………………….……..1 MỤC LỤC……………………………………………………….2 Gíới thiệu về VRML…………………………………...4 1.Về ngôn ngữ VML.................................................................4 a,Về trình duyệt………………………………..…………...4 b,Soạn thảo VRML……………………………………..…..4 c,Kü thuËt nÐn, MIME vµ xuÊt b¶n………………………….4 d,Headers vµ chó thÝch………………………….………….5 e,C¸c nót trong VRML………………………………….….5 e1.C¸c nót appearrance …………………………….....7 e2.C¸c nót Material ……………..………………………7 e3.KÕt cÊu h×nh ¶nh( image texture)…….…………….8 e4.Movie Texture………………………….…………….9 e5.Pixel Texture………………………………………….9 e6.V¨n b¶n vµ kiÓu font( text vµ fontstyle)………..….10 e7.Các đối tượng cơ bản……………………………….11 2.Các kiểu dữ liệu trong VRML…………………..…………13 3.Hệ toạ độ trongVRML………………….…………….…….14 4.Các phép biến đổi trong VRML……………..……………..15 a,Translation and Scale ( PhÐp biÕn ®æi vµ tÝnh tØ lÖ)……………16 b,Rotation ( phÐp quay)…………………………………16 5.C¸c sù kiÖn …………………………………………………..16 6.C¸c router…………………………………………….……...17 7.Camera, ©m thanh, ¸nh s¸ng ……………………..……..…18 a,Camera……………………………………………….……………………18 b,©m thanh………………………………………….………………19 c,,¸nh s¸ng vµ mµu s¾c……………………………….……………21 8.Một số vấn đề về lập trình VRML…………………..……..23 a,Tái sử dụng các đối tượng……………………….………………23 b,Proto………………………………..……….…………………….24 c,ExternProto…………………………………….…………………25 d,L¾p r¸p …………………………………………………………..26 II.Scripting………………………………………….……………26 1.Java, JavaScript, VRMLScript, hay ECMAscript?.........27 2.Sö dông ECMAScript trong VRML…………………….27 3.LËp tr×nh tuÇn tù trong ECMAScript………….28 4.VÝ dô…………………………….………………………….29 5.The Browser object ………………………………………..33 III.Nội dung của bài tập lớn…………………………………………….42 IV.Các đối tượng cơ bản trong bài tập lớn………………….…………42 1.Cửa ra vào…………………………………………………………43 2.Cửa kéo……………………………………………………………43 3.Quạt trần……………………………….…….……………………44 4.Bảng kéo ………………………………..…………………………47 5.Ánh sáng………………………………..………………………….47 6.GhÕ………………………………….….…..………………………47 7.Bµn häc……………………………........……………………….…48

Các file đính kèm theo tài liệu này:

  • doc77857.DOC
Tài liệu liên quan