Bài giảng Đồ họa hiện thực ảo - Bài 8: Ngôn ngữ mô hình hóa thực tại ảo VRML - Lê Tấn Hùng

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

File đính kèm:

  • pdfbai_giang_do_hoa_hien_thuc_ao_bai_8_ngon_ngu_mo_hinh_hoa_thu.pdf