VRML语法基础跟简介
VRML簡(jiǎn)介和基礎(chǔ)語(yǔ)法
--------------------------------------------?
一、VRML是什么?
VRML是虛擬現(xiàn)實(shí)造型語(yǔ)言 (Virtual Reality Modeling Language) 的簡(jiǎn)稱。
二、VRML文件的組成部分和文件頭?
VRML文本的文件名后綴是 .wrl,這是一種ASCII文本文件。VRML文件可以包括四個(gè)主要成分:?
VRML文件頭?
原型?
造型和腳本?
路由?
每個(gè)文件都有一個(gè)文 件頭,VRML1.0的文件頭和2.0的文件頭是不一樣的。VRML 1.0的文件頭是#VRML V1.0 asciiVRML 2.0的文件頭是,我們這里只討論VRML 2.0#VRML V2.0 utf8 在VRML文件中可以加入注解,只要在注解前加入#即可。下面是一個(gè)簡(jiǎn)單的VRML文件,它在三維空間中建立一個(gè)立方體。#VRML V2.0 utf8?
Shape {?
appearance Appearance { }?
material Material { }?
}?
geometry Box { }?
}?
三、幾個(gè)基本造型?
所有VRML造型都使用Shape節(jié)點(diǎn)創(chuàng)建。?
Shape節(jié)點(diǎn)的語(yǔ)法是Shape {?
appearance NULL?
geometry NULL?
}其中appearance域的值定義一個(gè)節(jié)點(diǎn),該節(jié)點(diǎn)定義造型的外觀,包括顏色和表面紋理等。當(dāng)它為NULL值時(shí)建立的造型是無(wú)紋理的白色有陰影物體。它將在后面介紹。geometry域的值定義一個(gè)節(jié)點(diǎn),該節(jié)點(diǎn)定義造型的3D構(gòu)造及幾何結(jié)構(gòu)。典型的幾何結(jié)構(gòu)有Box,Cone,Cylinder和Sphere,它們都可以作為geometry的值。?
Box節(jié)點(diǎn)的語(yǔ)法是Box {?
size 2.0 2.0 2.0 #長(zhǎng) 高 寬(x y z 三個(gè)方向,注:2.0 2.0 2.0是缺省值,下同)?
}?
Cone節(jié)點(diǎn)的語(yǔ)法是Cone {?
bottomRadius 1.0 # 圓錐底部半徑?
height 2.0 # 圓錐的高?
side TRUE # 是否創(chuàng)建圓錐的錐面?
bottom TRUE # 是否創(chuàng)建圓錐的底?
}?
Cylinder節(jié)點(diǎn)語(yǔ)法Cylinder {?
radius 1.0 # 園柱底的半徑?
height 2.0 # 園柱高?
side TRUE # 是否創(chuàng)建園柱曲面?
top TRUE # 是否創(chuàng)建園柱頂?
bottom TRUE # 是否創(chuàng)建園柱底?
}?
Sphere節(jié)點(diǎn)語(yǔ)法Sphere {?
radius 1.0 # 球體的半徑?
}以上語(yǔ)法中的值,是缺省值,下同。下面是一個(gè)簡(jiǎn)單的VRML文件,它創(chuàng)建一個(gè)白色的,無(wú)紋理的長(zhǎng)、高、寬分別為2.2,1.0和1.5的長(zhǎng)方體。#VRML V2.0 utf8?
Shape {?
appearance Appearance {?
material Material { } # 白色無(wú)紋理的物體(material是appearance中的一個(gè)屬性,我們以后接觸)?
}?
geometry Box { size 2.2 3.0 1.5 } # 長(zhǎng)方體?
}
四、文本造型?
Text節(jié)點(diǎn)語(yǔ)法(作為geometry的值)Text {?
string [] #文本內(nèi)容?
length 0.0 #文本長(zhǎng)度?
maxExtent 0.0 #文本的最大長(zhǎng)度?
fontStyle NULL #文本外觀特性?
}?
FontStyle節(jié)點(diǎn)語(yǔ)法FontStyle {?
family "SERIF" #指定字符集?
style "PLAIN" #文本風(fēng)格?
size 1.0 #字符高度?
spacing 1.0 #指定VRML單位的水平文本的垂直間距和垂直文本的水平間距?
justify "BEGIN" #相對(duì)于X、Y來(lái)說(shuō),文本造型放置的位置?
horizontal TRUE #水平文本還是垂直文本?
leftToRight TRUE #水平文本是從左到右還是從右往左(X方向)?
topToBottom TRUE #垂直文本是從上到下還是下到上?
language "" #指定TEXT節(jié)點(diǎn)中string所用語(yǔ)言的前后文?
} 文本風(fēng)格style的值包括“PLAIN(常用文本)”、“BOLD(黑體文本)”、“ITALIC (傾斜文本)”和“BOLDITALIC(黑體且傾斜的文本)”。?
justify的值有四個(gè)“FIRST”、“BEGIN”、“MIDDLE”和“END”,justify可以取一個(gè)值,也可以取兩個(gè)值。當(dāng)取兩個(gè)值時(shí),兩個(gè)值應(yīng)放在方括號(hào)中,用逗號(hào)隔開(kāi)。其中第一個(gè)為主對(duì)齊,第二個(gè)為次對(duì)齊。需要說(shuō)明的是對(duì)齊的具體含義和lefttorigh和toptobottom的取值有關(guān)。具體見(jiàn)下面的表:表5.1水平文本主對(duì)齊的justify域值?
justify域的主對(duì)齊值 leftToRight域值 描 述?
“FIRST” TRUE 將文本塊的左邊放在Y軸上?
FALSE 將文本塊的右邊放在Y軸上?
“BEGIN” TRUE 將文本塊的左邊放在Y軸上?
FALSE 將文本塊的右邊放在Y軸上?
“MIDDLE” TRUE 將文本塊的中邊放在Y軸上?
FALSE 將文本塊的中邊放在Y軸上?
“END” TRUE 將文本塊的右邊放在Y軸上?
FALSE 將文本塊的左邊放在Y軸上?
表5.2垂直文本主對(duì)齊的justify域值 justify域的主對(duì)齊值 topToBottom域值 描 述?
“FIRST” TRUE 將文本塊的上邊放在X軸上?
FALSE 將文本塊的下邊放在X軸上?
“BEGIN” TRUE 將文本塊的上邊放在X軸上?
FALSE 將文本塊的下邊放在X軸上?
“MIDDLE” TRUE 將文本塊的中邊放在X軸上?
FALSE 將文本塊的中邊放在X軸上?
“END” TRUE 將文本塊的下邊放在X軸上?
FALSE 將文本塊的上邊放在X軸上?
表5.3水平文本次對(duì)齊的justify域值 justify域的主對(duì)齊值 topToBottom域值 描 述?
“FIRST” TRUE 將第一行文本的基線放在X軸?
FALSE 將第一行文本的基線放在X軸?
“BEGIN” TRUE 將第一行文本的上邊放在X軸?
FALSE 將第一行文本的下邊放在X軸?
“MIDDLE” TRUE 將文本塊的中點(diǎn)放在X軸?
FALSE 將文本塊的中點(diǎn)放在X軸?
“END” TRUE 將最后一行文本的下邊放在X軸?
FALSE 將最后一行文本的上邊放在X軸?
表5.4垂直文本次對(duì)齊的justify域值 justify域的主對(duì)齊值 leftToRight域值 描 述?
“FIRST” TRUE 將第一列文本的基線放在Y軸?
FALSE 將第一列文本的基線放在Y軸?
“BEGIN” TRUE 將第一列文本的左邊放在Y軸?
FALSE 將第一列文本的右邊放在Y軸?
“MIDDLE” TRUE 將文本塊的中點(diǎn)放在Y軸?
FALSE 將文本塊的中點(diǎn)放在Y軸?
“END” TRUE 將最后一列文本的右邊放在Y軸?
FALSE 將最后一列文本的左邊放在Y軸?
例子:#VRML V2.0 utf8?
Shape {?
appearance Appearance {?
material Material { } # 白色無(wú)紋理的物體(material是appearance中的一個(gè)屬性,我們以后接觸)?
}?
geometry Text {?
string ["Hello","Let's go!"]?
fontStyle FontStyle {?
spacing 1.1?
}?
}?
}
五、造型定位(平移、旋轉(zhuǎn)和縮放)?
Transform節(jié)點(diǎn)語(yǔ)法Transform {?
children [] # 所包含的子節(jié)點(diǎn)列表?
translation 0.0 0.0 0.0 # x,y,z方向上平移的值?
ro tation 0.0 0.0 1.0 0.0 # x,y,z方向旋轉(zhuǎn)軸標(biāo)識(shí),旋轉(zhuǎn)角度(用弧度表示)?
scale 1.0 1.0 1.0 # x,y,z方向的縮放因子?
scaleOrientation 0.0 0.0 1.0 0.0 # 在x,y,z方向軸上旋轉(zhuǎn)一定弧度后,在按scale因子縮放?
Center 0.0 0.0 0.0 # 新的旋轉(zhuǎn)或縮放中心點(diǎn)的x,y,z坐標(biāo)?
} children域中的值可以是Shape節(jié)點(diǎn),Group節(jié)點(diǎn)(后面講)或另一個(gè)Transform節(jié)點(diǎn)(即可嵌套)。還有些域我們放到后面講。?
物體的平移?
translation的三個(gè)值分別表示x,y,z方向上的平移。?
例子:?
#VRML V2.0 utf8?
Transform {?
translation 2.0 3.0 -5.0 # x方向平移2個(gè)單位,y方向平移3個(gè)方向,z的反方向平移5個(gè)單位?
children [?
Shape {?
appearance Appearance {?
material Material{}?
}?
geometry Cylinder {}?
}?
]?
}?
請(qǐng)看效果(紅的為x方向平移2個(gè)單位,y方向平移3個(gè)方向,z的反方向平移5個(gè)單位的圓柱體)?
物體的旋轉(zhuǎn) ?
旋轉(zhuǎn)采用右手法則,rotation域的前三個(gè)值的取值為繞X軸旋轉(zhuǎn)(1.0 0.0 0.0);繞Y軸旋轉(zhuǎn)(0.0 1.0 0.0);繞Z軸旋轉(zhuǎn)(0.0 0.0 1.0);第四個(gè)數(shù)是旋轉(zhuǎn)的角度,用弧度來(lái)表示,正數(shù)為逆時(shí)針旋轉(zhuǎn),負(fù)數(shù)為順時(shí)針旋轉(zhuǎn)。?
通常情況下,旋轉(zhuǎn)中心是原點(diǎn),但可以用Center的值來(lái)重定義旋轉(zhuǎn)中心點(diǎn)。?
例子:?
#VRML V2.0 utf8?
Transform {?
rotation 1.0 0.0 0.0 0.785 # 繞X軸順時(shí)針旋轉(zhuǎn)45度?
children [?
Shape {?
appearance Appearance {?
material Material{}?
}?
geometry Cylinder {}?
}?
]?
}?
請(qǐng)看效果,紅色的為旋轉(zhuǎn)后的圓柱體,白色的為Y軸?
物體的縮放?
scale的三個(gè)值分別是x,y,z方向的縮放因子.scaleOrientation的值指定一條旋轉(zhuǎn)軸和旋轉(zhuǎn)角度,在縮放前先做旋轉(zhuǎn),縮放后再轉(zhuǎn)回來(lái),所以它只是使縮放方向旋轉(zhuǎn)而不會(huì)旋轉(zhuǎn)物體.?
例子:?
#VRML V2.0 utf8?
Transform {?
scale 3.0 0.0 0.5 # 沿X軸放大兩倍,Z軸方向縮小0.5倍?
children [?
Shape {?
appearance Appearance {?
material Material{}?
}?
geometry Cylinder {}?
}?
]?
}?
六、使用材料控制外觀?
RGB顏色?
RGB顏色包含三個(gè)浮點(diǎn)值,每一個(gè)都在0.0到1.0之間。第一個(gè)RGB顏色值代表紅色的使用量值,第二個(gè)代表綠色的量值,第三個(gè)代表蘭色量值。0.0表示該種顏色被關(guān)閉,1.0表示該種顏色全部打開(kāi)。?
明暗法?
當(dāng)光線照在造型上,造型對(duì)光的一面亮,背光的一面暗,而側(cè)面就是中等亮度。明暗的對(duì)比使你感覺(jué)到造型是三維立體的。你可以使用VRML中的照明節(jié)點(diǎn)在你所處的環(huán)境中增加一些光源,這些節(jié)點(diǎn) 將在中級(jí)教程中介紹。你可以通過(guò)使用Material節(jié)點(diǎn)來(lái)控制表面的明暗度。?
發(fā)光效果?
發(fā)光造型包括電燈泡、計(jì)算機(jī)屏幕和霓虹燈等。發(fā)光造型都發(fā)出自己本身的光。使用Material節(jié)點(diǎn)你可以指定一個(gè)發(fā)光顏色。?
透明度?
不透明的造型擋住了光線,而透明的造型可以讓光線通過(guò),半透明的造型擋住了部分光線。你可以用Material節(jié)點(diǎn)來(lái)指定一個(gè)造型創(chuàng)建時(shí)的透明狀態(tài)。?
Shape節(jié)點(diǎn)中的Appearance節(jié)點(diǎn)?
在基本造型中我們?cè)敿?xì)介紹了Shape節(jié)點(diǎn)的geometry域,提到了“其中appearance域的值定義一個(gè)節(jié)點(diǎn),該節(jié)點(diǎn)定義造型的外觀,包括顏色和表面紋理等”。?
Appearance節(jié)點(diǎn)語(yǔ)法是?
Appearance {?
material NULL #定義造型材料屬性的節(jié)點(diǎn)?
texture NULL #(后面介紹)?
textureTransform NULL #(后面介紹)?
}其中?
Material的節(jié)點(diǎn)語(yǔ)法是?
Material {?
diffuseColor 0.8 0.8 0.8 #表示一種材料的RGB顏色?
emmissiveColor 0.0 0.0 0.0 #表示RGB發(fā)光色?
transparency 0.0 #表示一個(gè)在0.0到1.0之間的透明度因數(shù)?
ambientintensity 0.2 #(后面介紹)?
specularColor 0.0 0.0 0.0 #(后面介紹)?
shininess 0.2 #(后面介紹)?
}?
例1一個(gè)旋轉(zhuǎn)了的紅色立方體?
#VRML V2.0 utf8?
Transform{?
rotation 1.0 1.0 0.0 0.635 #繞X軸和Y軸旋轉(zhuǎn)?
children [?
Shape {?
appearance Appearance {?
material Material {?
diffuseColor 1.0 0.0 0.0?
} # 紅色無(wú)紋理的物體?
}?
geometry Box { size 2.2 3.0 1.5 } # 長(zhǎng)方體?
}?
]?
}?
例2 是多個(gè)不同顏色外觀的造型?
#VRML V2.0 utf8?
Group {?
children [?
#Station Shapes?
Shape {?
appearance Appearance {?
material Material {?
diffuseColor 1.0 0.0 0.0?
}?
}?
geometry Sphere {}?
},?
Shape {?
appearance Appearance {?
material Material {?
diffuseColor 0.5 0.25 1.0?
}?
}?
geometry Cylinder {?
radius 2.0?
height 0.05?
}?
},?
Shape {?
appearance Appearance {?
material Material {?
diffuseColor 0.75 0.0 1.0?
}?
}?
geometry Cylinder {?
radius 0.15?
height 5.0?
}?
}?
]?
}?
例3 本例子共有三個(gè)白色質(zhì)地的燈泡,左邊的關(guān)閉,中間的發(fā)白光,右邊的發(fā)黃光。?
八、Group節(jié)點(diǎn)和DEF、USE語(yǔ)法?
Group節(jié)點(diǎn)?
Group {?
children [ ] #指定包含在組中的字節(jié)點(diǎn)列表,典型的子節(jié)點(diǎn)是Shape或其他的Group節(jié)點(diǎn)?
bboxCenter 0.0 0.0 0.0 #(以后講)?
bboxSize -1.0 -1.0 -1.0 #(以后講)?
addChildren #(以后講)?
removeChildren #(以后講)?
}?
DEF語(yǔ)法?
DEF 節(jié)點(diǎn)名 節(jié)點(diǎn)類型 {……} #定義節(jié)點(diǎn)的名稱?
節(jié)點(diǎn)名可以是任何字母序列,他們是區(qū)分大小寫的。但注意不要和VRML關(guān)鍵字重復(fù)。?
節(jié)點(diǎn)類型是一種特殊 類型的節(jié)點(diǎn),比如Box節(jié)點(diǎn)。?
例如:DEF MY_BOX Box {}?
USE語(yǔ)法?
USE 節(jié)點(diǎn)名 #使用已經(jīng)定義的節(jié)點(diǎn)名?
在同一文件中你可以使用USE來(lái)引用原始節(jié)點(diǎn)任意次。?
例如:USE MY_BOX?
例子:?
#VRML V2.0 utf8?
Group {?
children [?
#Wing?
DEF Wing Transform {?
scale 0.5 1.0 1.5?
children Shape {?
appearance DEF White Appearance {?
material Material { }?
}?
geometry Cylinder {?
radius 1.0?
height 0.025?
}?
}?
},?
# Fuselage?
DEF Fuselage Transform {?
scale 2.0 0.2 0.5?
children Shape{?
appearance USE White?
geometry Sphere { }?
}?
},?
# Wing detal and fuselage dome?
Transform {?
scale 0.3 2.0 0.75?
children [?
USE Wing?
USE Fuselage?
]?
}?
]?
}?
RML中的節(jié)點(diǎn)有以下幾種類型:?
造型尺寸、外觀節(jié)點(diǎn):Shape、Appearance、Material?
原始幾何造型節(jié)點(diǎn):Box、Cone、Cylinder、Sphere?
造型編組節(jié)點(diǎn):Group、Switch、Billboard?
文本造型節(jié)點(diǎn):Text、FrontStyle?
造型定位、旋轉(zhuǎn)、縮放節(jié)點(diǎn):Transform?
內(nèi)插器節(jié)點(diǎn):TimeSensor、PositionInterpolater、OrientationInterpolater、ColorInterpolator、 ScalarInterpolator、CoordinateInterpolator、?
感知節(jié)點(diǎn):TouchSensor、CylinderSensor、PlaneSensor、SphereSensor、VisibilitySensor、ProximitySensor、Collision?
點(diǎn)、線、面集節(jié)點(diǎn):ointSet、IndexedLineSet、IndexedFaceSet、Coordinate?
海拔節(jié)點(diǎn):ElevationGrid?
擠出節(jié)點(diǎn):Extrusion?
顏色、紋理、明暗節(jié)點(diǎn):Color、ImageTexture、PixelTexture、MovieTexture、Normal?
控制光源的節(jié)點(diǎn):ointLight、DirectionalLight、SpotLight?
背景節(jié)點(diǎn):Background?
聲音節(jié)點(diǎn):AudioClip、MovieTexture、Sound?
細(xì)節(jié)控制節(jié)點(diǎn):OD?
霧節(jié)點(diǎn):Fog?
空間信息節(jié)點(diǎn):WorldInfo?
錨點(diǎn)節(jié)點(diǎn):Anchor?
腳本節(jié)點(diǎn):Script?
控制視點(diǎn)的節(jié)點(diǎn):Viewpoint、NavigationInfo?
用于創(chuàng)建新節(jié)點(diǎn)類型的節(jié)點(diǎn):ROTO、EXTERNPROTO、IS?
ScalarInterpolator節(jié)點(diǎn)?
ScalarInterpolator { ?
key [ ] # exposed field MFFloat?
keyValue [ ] # exposed field MFFloat?
} ?
域?
key 關(guān)鍵幀時(shí)間比率列表。通常介于0.0和1.0之間的浮點(diǎn)數(shù),包括0.0和1.0。?
keyValue 浮點(diǎn)數(shù)值的列表,對(duì)應(yīng)于上面的列表。?
事件 ?
set_fraction eventIn SFFloat?
動(dòng)畫的完成比率。?
value_changed eventOut MFFloat?
與比率相對(duì)應(yīng)的浮點(diǎn)數(shù)值。?
說(shuō)明?
ScalarInterpolator節(jié)點(diǎn)允許對(duì)單精度浮點(diǎn)數(shù)進(jìn)行動(dòng)畫關(guān)鍵幀的插值操作。建立插值器時(shí),為動(dòng)畫的不同完成比率設(shè)置相應(yīng)的〉閌ㄗ詈冒 賈島徒崾擔(dān) br> 通常坐標(biāo)插值器從時(shí)間傳感器接收set_fraction事件,經(jīng)處理后,將輸出值發(fā)送給類型為單精度浮點(diǎn)數(shù)的域。如intensity和radius。?
s cript節(jié)點(diǎn)?
s cript {?
?
url [ ] # exposed field MFString?
mustuate FALSE # SFBool?
directOutpur FLASE # SFBool?
以下 域可由用戶定義任意多個(gè):?
eventIn eventTypeName eventName?
field?
fieldTypeName?
fieldName initialValue?
eventOut?
eventTypeName?
eventName?
域?
url 腳本的URL或腳本。可能有多個(gè)值,瀏覽器執(zhí)行第一個(gè)它 理解的腳本。?
mustuate?
指出當(dāng)瀏覽器不再需要腳本的輸出時(shí)是否還要給腳本發(fā)輸人事件。若為FALSE,瀏覽器有時(shí)可以提高其性能,因?yàn)楫?dāng)沒(méi)有其它節(jié)點(diǎn)需要腳本的輸出事件時(shí),瀏覽器可以不發(fā)事件給腳本。除非腳本做了諸如訪問(wèn)網(wǎng)絡(luò)這樣一些瀏覽器無(wú)法識(shí)別的事,否則應(yīng)該保留FALSE。?
directOutpur?
指出是否允許腳本直接改變場(chǎng)景節(jié)點(diǎn)和動(dòng)態(tài)地建立或刪除通路。換句話說(shuō),就是指出腳本是否只能通過(guò)事件的方法來(lái)與世界聯(lián)系。如果不是十分必要的話,應(yīng)設(shè)為FALSE,可便于瀏覽器對(duì)場(chǎng)景進(jìn)行優(yōu)化。?
事件?
s cript 節(jié)點(diǎn)不能包含內(nèi)置事件,但對(duì)于整個(gè)s cript節(jié)點(diǎn)的輸入輸出事件可定義任意多個(gè)事件。?
說(shuō)明?
一個(gè)s cript節(jié)點(diǎn)包含一個(gè)叫作s cript的程序。這個(gè)程序是以javas cript或Java寫的。腳本可以接受事件,處理事件中的信息,還可以產(chǎn)生基于處理結(jié)果的輸出事件。?
當(dāng)一個(gè)s cript節(jié)點(diǎn)接受一個(gè)輸入事件時(shí),它將事件的值和時(shí)間戳傳給與輸人事件同名的函數(shù)或方法。函數(shù)可以通過(guò)賦值給與事件同名的變量發(fā)送事件。一個(gè)輸出事件與調(diào)用發(fā)出輸出事件函數(shù)的輸入事件有相同的時(shí)間戳。?
當(dāng)一個(gè)腳本給另一個(gè)節(jié)點(diǎn)發(fā)出多個(gè)具有相同時(shí)間戳的事件時(shí),另一個(gè)節(jié)點(diǎn)的類型將決定處理事件的順序。總而言之,這個(gè)處理過(guò)程最接近用戶期望的順序。例如,如果用戶的腳本向某個(gè)ViewPoint節(jié)點(diǎn)發(fā)出有相同時(shí)間戳的set_position和set_bind事件,瀏覽器在激活該視點(diǎn)之前會(huì)重新設(shè)置觀點(diǎn)的位置。大多數(shù)情況下,用戶最好忽略時(shí)間戳。?
一些腳本語(yǔ)言(包括Java,javas cript)定義了有特殊意義的函數(shù)和方法。例如,如果用戶提供了一個(gè)叫initialize()的函數(shù),則當(dāng)世界被裝入時(shí),首先調(diào)用這個(gè)函數(shù)。另外,如有shutdown()函數(shù),則在刪除世界時(shí)調(diào)用(例如當(dāng)用戶用Anchor選擇了另一個(gè)世界時(shí))。eventsProcessed()函數(shù)在一個(gè)或多個(gè)eventIn函數(shù)完成后被調(diào)用(由瀏覽器決定是完成每個(gè)eventIn函數(shù)后調(diào)用還是等所有輸人事件都處理完了再調(diào)用)。?
Shape節(jié)點(diǎn)?
Shape { ?
appearance NULL # exposed field SFNode?
geometry NULL # exposed field SFNode?
} ?
域?
appearance 包含一個(gè)Appearance節(jié)點(diǎn)。?
geometry 包含一個(gè)幾何節(jié)點(diǎn)(如:Box、Cone、IndexedFaceSet、PointSet)。?
說(shuō)明?
將Appearance指定的材質(zhì)和質(zhì)感應(yīng)用到geometry域的幾何節(jié)點(diǎn)?
Sound節(jié)點(diǎn)?
Sound { ?
source NULL # exposed field SFNode?
intensity 1 # exposed field SFFloat?
priority 0 # exposed field SFFloat?
location 0 0 0 # exposed field SFVec3f?
direction 0 0 1 # exposed field SFVec3f?
minFront 1 # exposed field SFFloat?
maxFront 10 # exposed field SFFloat?
minBack 1 # exposed field SFFloat?
maxBack 10 # exposed field SFFloat?
spatialize TRUE # SFBool?
} ?
域?
source 包含一個(gè)AudioClip或MovieTexture節(jié)點(diǎn)。若沒(méi)有指定,將不發(fā)出聲音。?
intensity 聲源的強(qiáng)度,0為最小值,1為最大值。在有些瀏覽器中最大值可以超過(guò)1。?
priority 指出聲音的優(yōu)先級(jí)。若為背景音樂(lè),則設(shè)為0。?
location 聲源的坐標(biāo)。?
direction 指定橢球的長(zhǎng)軸方向。?
minFront 聲源坐標(biāo)點(diǎn)至內(nèi)橢圓球前部端點(diǎn)的距離。?
maxFront 聲源坐標(biāo)點(diǎn)至外橢圓球前部端點(diǎn)的距離。?
minBack 聲源坐標(biāo)點(diǎn)至內(nèi)橢圓球后部端點(diǎn)的距離。。?
maxBack 聲源坐標(biāo)點(diǎn)至外橢圓球后部端點(diǎn)的距離。?
spatialize 指出聲音是作為空間點(diǎn)播放(TRUE),還是作為環(huán)境聲播放(FALSE)。?
說(shuō)明?
minBack和minFront域定義一個(gè)內(nèi)橢圓;maxBack和maxFront域定義一個(gè)外橢圓。?
在內(nèi)橢圓區(qū)域內(nèi)聲音為最大值;在外橢圓區(qū)域外沒(méi)有聲音;在內(nèi)外橢圓之間的區(qū)域內(nèi),其聲音按距離衰減。?
聲音能否同時(shí)播放,由瀏覽器決定。?
Sphere節(jié)點(diǎn)?
Sphere {?
?
radius?
1?
# SFFloat?
}?
?
域?
radius 球的半徑。?
說(shuō)明?
Sphere是一個(gè)代表球的幾何節(jié)點(diǎn)。缺省時(shí),球以原點(diǎn)為圓心,以1為半徑。?
當(dāng)一個(gè)紋理圖應(yīng)用到一個(gè)球上時(shí),缺省的紋理將覆蓋整個(gè)表面,從球體后面逆時(shí)針鋪開(kāi)。紋理在yz平面的后面縫合。由于瀏覽器功能的不同,在使用某些瀏覽器時(shí),從內(nèi)部觀察球體是不可見(jiàn)的。不要把觀察點(diǎn)放到球體內(nèi)。如果希望看到幾何體的內(nèi)部,使用IndexedFaceSet,將其中solid設(shè)為FLASE。?
SphereSensor節(jié)點(diǎn)?
SphereSensor { ?
enabled TRUE # exposed field SFBool?
offset 0 1 0 0 # exposed field SFRotation?
autoOffset TRUE # exposed field SFBool?
} ?
域?
enabled 表示傳感器當(dāng)前是否檢測(cè)定點(diǎn)設(shè)備的事件。可向該傳感器發(fā)送一個(gè)值為FALSE的set_enabled時(shí)間來(lái)關(guān)閉它。?
offset 在一次拖動(dòng)后,相關(guān)幾何體相對(duì)于初始位置的旋轉(zhuǎn)角度。?
autoOffset 設(shè)置為TRUE,表示在拖動(dòng)結(jié)束時(shí),將當(dāng)前的方位值存儲(chǔ)到offset中,若autoOffset設(shè)置為FALSE,在用戶每次開(kāi)始一個(gè)新的托動(dòng)時(shí),幾何體復(fù)位到初始值。?
事件?
inActive eventOut SFBool?
指出用戶是否在拖動(dòng)與傳感器相關(guān)的幾何體。?
trackPoint_changed eventOut SFVec3f?
用戶在拖動(dòng)過(guò)程中任意時(shí)刻定點(diǎn)設(shè)備在假想的球體表面上的實(shí)際位置。?
rotation_changed eventOut SFRotation?
用戶在拖動(dòng)過(guò)程中任意時(shí)刻假想球體的當(dāng)前朝向。?
說(shuō)明?
SphereSensor節(jié)點(diǎn)將二維的拖 動(dòng)解釋為三維空間中繞局部原點(diǎn)的旋轉(zhuǎn)。若在該節(jié)點(diǎn)的兄弟幾何體處按下鼠標(biāo),瀏覽器會(huì)以點(diǎn)擊鼠標(biāo)的點(diǎn)到原點(diǎn)的距離為半徑作一個(gè)想象中的球。隨后的拖動(dòng)將解釋為旋轉(zhuǎn)球體。?
SpotLight節(jié)點(diǎn)?
SpotLight { ?
on TRUE # exposed field SFBool?
intensity 1 # exposed field SFFloat?
ambientIntensity 0 # exposed field SFFloat?
color 1 1 1 # exposed field SFColor?
location 0 0 0 # exposed field SFVec3f?
direction 0 0 -1 # exposed field SFVec3f?
beamWidth 1.570796 # exposed field SFFloat?
cutOffAngle 0.785398 # exposed field SFFloat?
radius 100 # exposed field SFFloat?
attenuation 1 0 0 # exposed field SFVec3f?
}?
?
域?
on 指出燈是否打開(kāi)。?
intensity 光源的強(qiáng)度。?
ambientIntensity 光源對(duì)環(huán)境光的貢獻(xiàn)。?
color 光源的顏色。?
location 光源的位置。?
direction 光圓錐軸的方向。?
beamWidth 光圓錐對(duì)應(yīng)的角度(以弧度為單位)。該角度外,光的強(qiáng)度減弱。?
cutOffAngle 光源的遮擋角。?
radius 光源的射程。?
attenuation 光源的衰減度。域中的第一個(gè)數(shù)表示常數(shù)衰減;第二個(gè)數(shù)表示對(duì)距離線性衰減;第三個(gè)數(shù)表示對(duì)距離平方衰減。對(duì)距離平方衰減是三種衰減中最接近現(xiàn)實(shí)的,但也是計(jì)算最慢的。?
說(shuō)明?
一個(gè)SpotLight節(jié)點(diǎn)定義兩個(gè)光圓錐:一個(gè)光圓錐的頂角等于beamWidth、高等于radius,在其內(nèi)部光強(qiáng)最大;另一個(gè)光圓錐與前一個(gè)共軸,頂角等于cutOffAngle,光強(qiáng)從內(nèi)圓錐表面到外圓錐表面逐漸衰減,直至為零。?
Switch節(jié)點(diǎn)?
Switch {?
?
whichChoice -1 # exposed field SFInt32?
choice [ ] # exposed field MFNode?
} ?
域?
whichChoice 活動(dòng)子項(xiàng)的標(biāo)號(hào)。choice域中的第一個(gè)活動(dòng)子項(xiàng)的標(biāo)號(hào)是0。如果whichChoice的值小于0或者大于choice域中的項(xiàng)目數(shù),那么不選中任何子項(xiàng)。?
choice 包含該組節(jié)點(diǎn)的各個(gè)子項(xiàng)。每個(gè)子項(xiàng)有一個(gè)隱含的序號(hào)。第一個(gè)子項(xiàng)的隱含序號(hào)為0。?
說(shuō)明?
Switch組節(jié)點(diǎn)激活choice域中指定的零個(gè)或一個(gè)子項(xiàng)。非活動(dòng)子項(xiàng)被忽略。但是,無(wú)論是否被激活,Switch節(jié)點(diǎn)的所有子項(xiàng)都對(duì)事件作出反應(yīng)。?
Text節(jié)點(diǎn)?
Text {?
?
string [] # exposed field MFString?
fontStyle NULL # exposed field SFNode?
maxExtent 0.0 # exposed field SFFloat?
length [] # exposed field MFFloat?
} ?
域 ?
string 要顯示的文本串,用UTF-8編碼。?
fontStyle 包括說(shuō)明如何繪制文本的FontStyle節(jié)點(diǎn)。?
maxExtent 在該節(jié)點(diǎn)文本的任意一行的主要方向上的最大范圍,必須大于等于0。如果FontStyle節(jié)點(diǎn)的horizonal域是TRUE,則主要方向是水平方向,否則是垂直方向。取值0表示字符串可為任意長(zhǎng)度。?
length 單個(gè)文本串的預(yù)期長(zhǎng)度。0表示可謂任意長(zhǎng)取
說(shuō)明?
Text節(jié)點(diǎn)繪出特殊風(fēng)格的一個(gè)或多個(gè)字符串。如果給出多于一個(gè)的字符串 ,則每個(gè)串單獨(dú)占一行,行距由FontStyle節(jié)點(diǎn)決定。?
瀏覽器決定局部坐標(biāo)系主要方向上字符串的范圍。如果最長(zhǎng)的字符串超過(guò)maxExtent的范圍,它將被縮小到maxExtent的長(zhǎng)度范圍內(nèi);其它的字符串相應(yīng)縮小同樣的程度。?
每一個(gè)字符串有一個(gè)相應(yīng)的length值,表明設(shè)定的字符串長(zhǎng)度。瀏覽器將字符串拉長(zhǎng)或壓縮到所需長(zhǎng)度。缺省值被當(dāng)作0。?
對(duì)Text節(jié)點(diǎn)不執(zhí)行碰撞檢查。?
TextureCoordinate節(jié)點(diǎn)?
TextureCoordinate { ?
point []?
# exposed field MFVec2f?
} ?
?
域?
point 以二維(s,t)形式給出的一組紋理坐標(biāo)點(diǎn),它們一般與IndexedFaceSet或ElevationGrid中的頂點(diǎn)構(gòu)成對(duì)應(yīng)關(guān)系。?
?
說(shuō)明?
這個(gè)節(jié)點(diǎn)定義了一組二維坐標(biāo),用于完成紋理和幾何表面頂點(diǎn)間的映射。它通常用在IndexedFaceSet和ElevationGrid節(jié)點(diǎn)的texCoord域中。?
紋理圖參數(shù)值沿紋理圖像從0到1變化。先確定水平坐標(biāo)s,然后確定垂直坐標(biāo)t。?
在point域定義的TextureCoordinate值可以在-infinity和+infinity之間變化。如果紋理在某一方向上重復(fù)(s或t),那么紋理坐標(biāo)c映射到沿指定方向有n個(gè)像素的紋理圖上;?
location=(c - floor(c))*n?
如果紋理沒(méi)有重復(fù),c被剪裁到0--1的范圍內(nèi):?
location=max(0,min(1,c))*n?
TextureTransform節(jié)點(diǎn)?
TextureTransform { ?
translation 0 0 # exposed field SFVec2f?
rotation 0 # exposed field SFFloat?
rcale 1 1 # exposed field SFVec2f?
center 0 0 # exposed field SFVec2f?
} ?
域 ?
translation?
指定一個(gè)平移。?
rotation 指定一個(gè)以center域中定義的物體中心為原點(diǎn)的旋轉(zhuǎn)(弧度)。?
scale 指定一個(gè)以center域中定義的物體中心為原點(diǎn)的縮放。兩個(gè)軸向的縮放程度可以不同。?
center 指定一個(gè)縮放和旋轉(zhuǎn)的中心。?
說(shuō)明?
TextureTransform 節(jié)點(diǎn)定義了對(duì)紋理坐標(biāo)的二維變換。這個(gè)節(jié)點(diǎn)只在Appearance節(jié)點(diǎn)的textureTransf orm域使用,它影響紋理映射到相關(guān)幾何體節(jié)點(diǎn)表面的方式。這個(gè)節(jié)點(diǎn)中的操作的順序是縮放、旋轉(zhuǎn)、平移 。?
TimeSensor節(jié)點(diǎn)?
TimeSensor { ?
cycleInterval 1 # exposed field SFTime?
enabled TRUE # exposed field SFBool?
loop FALSE # exposed field SFBool?
stsrtTime 0 # exposed field SFTime?
stopTime 0 # exposed field SFTime?
}?
?
域?
cycleInterval 每個(gè)周期的長(zhǎng)度,以秒為單位,取值大于0。?
enabled 若為TRUE,當(dāng)條件成立時(shí)產(chǎn)生時(shí)間相關(guān)事件;若為FALSE,在任何條件下都不會(huì)產(chǎn)生時(shí)間相關(guān)事件。無(wú)論enabled為TRUE或FALSE,通域的 set_事件都被處理并產(chǎn)生_changed事件。?
loop 表明時(shí)間傳感器是無(wú)限循環(huán),還是在一個(gè)周期后被終止。?
stsrtTime 開(kāi)始產(chǎn)生事件的時(shí)間。?
stopTime 終止產(chǎn)生事件的時(shí)間。其值若小于等于起始時(shí)間,則被忽略。?
事件?
isActive eventOut SFBool?
表明時(shí)間傳感器 當(dāng)前是否在運(yùn)行。若在運(yùn)行,則返回TRUE;若處于停止?fàn)顟B(tài),則返回FALSE。?
cycleTime eventOut SFTime?
在每個(gè)周期開(kāi)始時(shí),返回當(dāng)前時(shí)間。?
fraction_changed eventOut SFloat?
當(dāng)前周期的完成比。從0(周期開(kāi)始)到1(周期結(jié)束)。?
time eventOut SFTime?
從格林威治時(shí)間1970年1月1日子時(shí)(午夜12點(diǎn))至今所經(jīng)過(guò)的秒數(shù)。?
說(shuō)明?
隨著時(shí)間的推移,TimeSensor節(jié)點(diǎn)產(chǎn)生事件。它能被用來(lái)生成動(dòng)畫(通常與插值器一起),能在一個(gè)指定時(shí)間引發(fā)一個(gè)動(dòng)作或者以固定時(shí)間間隔產(chǎn)生事件。?
通常情況下,時(shí)間傳感器的starTime被另一個(gè)對(duì)用戶動(dòng)作作串反應(yīng)的傳感器或腳本傳來(lái)的時(shí)間事件設(shè)置。在startTime設(shè)定的時(shí)刻以前,時(shí)間傳感器不做任何工作。在該時(shí)刻到來(lái)時(shí),它產(chǎn)生值為 TRUE的 isActive事件,并開(kāi)始產(chǎn)生 time、fraction_ changed和cycleTime事件。?
time事件是總保持有一個(gè)當(dāng)前時(shí)刻值的連續(xù)發(fā)生的事件。而產(chǎn)生的其它與時(shí)間相關(guān)的事件是周期性發(fā)生的事件。當(dāng)loop為FALSE時(shí),時(shí)間傳感器僅僅運(yùn)行cycleInterval中設(shè)置的一個(gè)時(shí)間周期(或在第一個(gè)周期完成前到達(dá)stopTime中設(shè)定的時(shí)間);而當(dāng)loop為TRUE時(shí),時(shí)間傳感器不斷地運(yùn)行,直到到達(dá)stopTime中設(shè)定的時(shí)間或 enabled被設(shè)置為FALSE。在每個(gè)周期的開(kāi)始,時(shí)間傳感器發(fā)出fractdri_changed事件(值為0)和cycleTime事件(值為當(dāng)前時(shí)間)。在每一個(gè)周期中,當(dāng)瀏覽器允許傳感器產(chǎn)生一個(gè)事件時(shí)(通常每幀一次),fraction_?
changed的值從0增加到1,表明當(dāng)前周期已完成多少。在fraction_changed值為1時(shí),當(dāng)前周期結(jié)束,新的周期開(kāi)始。?
cycleTime事件僅僅在周期開(kāi)始時(shí)產(chǎn)生。若要生成一個(gè)~次性事件如鬧鐘,則應(yīng)把start_Time設(shè)置為期望時(shí)間,把loop設(shè)置為FALSE。這樣在startTime到來(lái)時(shí),該時(shí)間傳感器只運(yùn)行一個(gè)周期。?
在產(chǎn)生時(shí)間相關(guān)事件時(shí),時(shí)間傳感器忽略set_cycleInterval和set_startTime事件。cycleInterval和startTime域的值將不會(huì)發(fā)生變化,而且不會(huì)產(chǎn)生 cycleInterval_changed和startTime_changed事件。若想要重啟一個(gè)時(shí)間傳感器,應(yīng)該首先發(fā)送一個(gè)與當(dāng)前時(shí)間值相同的set_stopTime事件來(lái)停止當(dāng)前的時(shí)間傳感器,再發(fā)送一個(gè)set_startTime事件。?
當(dāng)一個(gè)活動(dòng)的時(shí)間傳感器收到一個(gè)set_stopTime事件時(shí),若值大于startTime的值但小于當(dāng)前的時(shí)間值,則它將把stopTime設(shè)定為指定值。但像stopTime中設(shè)置的時(shí)間是當(dāng)前時(shí)間那樣,發(fā)出結(jié)束事件。若set_stopTime事件值小于等于startTime的值,則這一事件將被忽略。?
設(shè)置loop為TRUE時(shí),時(shí)間傳感器在startTime到來(lái)時(shí)開(kāi)始產(chǎn)生事件,事件將不斷地產(chǎn)生或在stopTime到來(lái)時(shí)停止(如果stopTime大于startTime)。如果希望當(dāng)瀏覽器加載一個(gè)環(huán)境時(shí)時(shí)間傳感器立刻被激活,應(yīng)將loop設(shè)置 為TRUE,讓startTime和stopTime保持缺省值(或?qū)⑺鼈冊(cè)O(shè)置成stopTime小于等于startTime的任何值)。?
當(dāng)時(shí)間傳感器運(yùn)行時(shí)將loop從TRUE改變?yōu)镕ALSE,傳感器將在當(dāng)前周期結(jié)束時(shí)或者stopTime到來(lái)時(shí)停止運(yùn)行(取決于這兩個(gè)事件誰(shuí)先發(fā)生)。?
時(shí)間傳感器不保證以某種頻率產(chǎn)生時(shí)間相關(guān)事件,但是大多數(shù)瀏覽器在繪制動(dòng)畫的每一幀時(shí),產(chǎn)生這些事件。?
TouchSensor節(jié)點(diǎn)?
TouchSensor {?
?
enabled?
TRUE?
# exposed field SFBool?
}?
?
域?
enabled 表明此傳感器是否對(duì)定點(diǎn)輸入設(shè)備做出反應(yīng)。?
事件?
isOver eventOut SFBool?
表明定點(diǎn)設(shè)備當(dāng)前是否正指向傳感器的兄弟幾何體(無(wú)論是否有鍵被按下)。?
isActive eventOut SFBool?
表明是否定點(diǎn)設(shè)備的鍵正在被按下。?
hitPoint_changed eventOut SFVec3f?
最近在兄弟幾何體表面釋放鍵的位置。?
hitNormal_changed eventOut SFVec3f?
hitPoint_changed所指定點(diǎn)的法向量。?
hitTexCoord_changed eventOut SFVec2f?
hitPoing_changed所指定點(diǎn)的紋理坐標(biāo)。?
touchTime eventOut SFTime?
定點(diǎn)設(shè)備的鍵完成一次點(diǎn)動(dòng)的時(shí)間。?
說(shuō)明?
TouchSensor(觸動(dòng)傳感器)節(jié)點(diǎn)產(chǎn)生基于定點(diǎn)輸入設(shè)備(通常是鼠標(biāo))的事件。這些事件表明用戶是否正在點(diǎn)選某個(gè)幾何體和用戶在什么地方,以及在什么時(shí)候按了定點(diǎn)設(shè)備的鍵。?
觸動(dòng)傳感器監(jiān)視的幾何體是傳感器的兄弟幾何體傳感器父組節(jié)點(diǎn)的所有子節(jié)點(diǎn)。?
若定點(diǎn)設(shè)備未指向傳感器的兄弟幾何體,而用戶開(kāi)始將定點(diǎn)設(shè)備移到傳感器的兄弟幾何體時(shí),傳感器將產(chǎn)生一個(gè)isOver事件,并將其值設(shè)置為TRUE;相反,若定點(diǎn)設(shè)備已經(jīng)指向傳感器的兄弟幾何體,此時(shí)用戶將定點(diǎn)設(shè)備移出傳感器的兄弟幾何體,傳感器將產(chǎn)生一個(gè)isOver事件,并將其值設(shè)置為FALSE。?
當(dāng)用戶將定點(diǎn)設(shè)備從幾何體的一點(diǎn)移動(dòng)到另一點(diǎn)時(shí),傳感器將發(fā)送一系列事件: hitPoint_changed、hitNormal_changed、hitTexCoord_changed,分別表明用戶所指的位置、該點(diǎn)的法向量和紋理坐標(biāo)。?
當(dāng)用戶點(diǎn)擊被TouchSensor監(jiān)視的對(duì)象時(shí),傳感器將產(chǎn)生值為TRUE的isActive事件;而當(dāng)用戶釋放定點(diǎn)設(shè)備的鍵時(shí),傳感器將產(chǎn)生isActive為FALSE的事件。?
若用戶在指向幾何體時(shí)按下鼠標(biāo)鍵,然后在仍然指向這個(gè)幾何體(或又回到這個(gè)幾何體)時(shí)釋放鼠標(biāo)鍵,傳感器將要發(fā)送一個(gè)touchTime事件,表明鍵被釋放的時(shí)間。可以使用這一事件來(lái)模擬許多常用的用戶接口(如只有在用戶點(diǎn)擊和釋放定點(diǎn)設(shè)備按鍵時(shí)才產(chǎn)生的動(dòng)作)。?
當(dāng)一個(gè)觸動(dòng)傳感器正處理事件時(shí),其它定點(diǎn)設(shè)備傳感器不會(huì)產(chǎn)生事件。?
Transform節(jié)點(diǎn)?
Transform {?
?
bboxCenter 0 0 0 # SFVec3f?
bboxSize -1 -1 -1 # SFVec3f?
translation 0 0 0 # exposed field SFVec3f?
rotation 0 0 1 0 # exposed field SFRotation?
scale 1 1 1 # exposed field SFVec3f?
scaleOrientation 0 0 1 0 # exposed field SFRotation?
center 0 0 0 # exposed field SFVec3f?
children [ ] # exposed field MFNode?
}?
?
域?
bboxCenter 圍繞該變換子項(xiàng)的包圍盒的中心。?
bboxSize 包圍盒在x、y、z方向的值,缺省值是無(wú)包圍盒。?
translation 指定變換量。?
rotation 給定旋轉(zhuǎn)的軸和角度(以弧度為單位)。?
scale 指定縮放比例,各軸向縮放比值可以不相等。?
scaleOrientation 指定縮放和旋轉(zhuǎn)操作的軸向。?
center 指定縮放和旋轉(zhuǎn)操作的原點(diǎn)。?
children 受該節(jié)點(diǎn)指定的變換影響的子節(jié)點(diǎn)。?
事件?
addChildren eventIn MFNode?
將指定節(jié)點(diǎn)加入該組的子項(xiàng)列表中。?
removeChildren eventIn MFNode?
將指定節(jié)點(diǎn)從該組子項(xiàng)列表中刪除。?
說(shuō)明?
Transform是為其子項(xiàng)定義坐標(biāo)系統(tǒng)的組節(jié)點(diǎn)。?
Transform定義的三維變換按如下步驟執(zhí)行:?
1、對(duì)任意一點(diǎn)的縮放,各軸向縮放比值可以不相等;?
2、對(duì)任意一點(diǎn)和任意軸的旋轉(zhuǎn);?
3、平移。?
Viewpoint節(jié)點(diǎn)?
Viewpoint { ?
position 0 0 10 # exposed field SFVec3f?
orientation 0 0 0 1 # exposed field SFRotation?
fieldOfView 0.785398 # exposed field SFFloat?
des cription " " # SFStreing?
jump TRUE # exposed field SFBool?
}?
?
域?
position 在局域坐標(biāo)系中,指定Viewpoint節(jié)點(diǎn)的相對(duì)位置。?
orientation 指定一個(gè)相對(duì)于缺省方向旋轉(zhuǎn)的視點(diǎn)方向。缺省方向是沿z軸負(fù)方向、x軸正向指向右和y軸正向指向正上方。視點(diǎn)的位置和方向受上層變換的影響。?
fieldOfView 以弧度為單位指定一個(gè)視圖域。小的角度嗨圃督咕低返男Ч淮蟮慕嵌炔嗨乒憬薔低返男Ч皇油加蠐Ω么笥 ,小于丌;缺省值相當(dāng)于45度。?
des cription 標(biāo)識(shí)一個(gè)可以通過(guò)視點(diǎn)菜單或其它設(shè)備被公開(kāi)訪問(wèn)的視點(diǎn)。若沒(méi)有des cription,該視點(diǎn)不會(huì)出現(xiàn)在流覽器的GUI中。當(dāng)用戶在GUI中選擇一個(gè)視點(diǎn)時(shí),瀏覽器或者逐漸移動(dòng)到新位置,或者直接跳到這個(gè)新位置。一旦到達(dá)該位置,將發(fā)出isBound和bindTime。事件。?
jump 表明在視點(diǎn)位置變化時(shí),例覽器是否立刻將觀察者移動(dòng)到新位置。若為TRUE的話,將立刻跳到新位置,不經(jīng)過(guò)前后兩個(gè)位置之間的任何空間。?
事件?
set_bind eventln SFBool?
發(fā)出一個(gè)值為TRUE的該事件將該Viewpoint節(jié)點(diǎn)激活,使之成為場(chǎng)景當(dāng)前的Viewpoint節(jié)點(diǎn)。?
bindTime eventOut SFTime?
視點(diǎn)被激活的時(shí)間。該輸出事件用來(lái)在一個(gè)給定視點(diǎn)被激活時(shí)開(kāi)始運(yùn)行一個(gè)動(dòng)畫或腳本。?
isBound eventOut SFBool?
當(dāng)瀏覽器到達(dá)一個(gè)指定的視點(diǎn)并被激活時(shí),該事件值為TRUE。?
說(shuō)明?
視點(diǎn)定義了處于局部坐標(biāo)系中的一個(gè)指定位置,用戶可以從該點(diǎn)來(lái)觀察場(chǎng)景。?
視點(diǎn)可以被放置在VRML世界中來(lái)指定在剛剛進(jìn)入場(chǎng)景 中的觀察者的初始位置。例如:URL語(yǔ)法“…/scene.wrl#EastGate”指出當(dāng)用戶進(jìn)入scene.wrl世界時(shí)的初始位置是scene.wrl文件中 DEF EastGate Viewpoint {…}定義的地方。
瀏覽器保存一個(gè)Viewpoint節(jié)點(diǎn)的堆棧。誰(shuí)棧的頂部的Viewpoint節(jié)點(diǎn)是當(dāng)前激活視點(diǎn)。如果要將一個(gè)視點(diǎn)壓到Viewpoint節(jié)點(diǎn)堆棧的頂部,就要送一個(gè)TRUE給該節(jié)點(diǎn)的set_bind輸入事件。該視點(diǎn)一旦被激活,瀏覽器窗口中的景物也做相應(yīng)變化。給set_bind事件發(fā)送FALSE值將會(huì)從堆棧中彈出Viewpoint節(jié)點(diǎn),激活棧中的下一個(gè)視點(diǎn)或默認(rèn)視點(diǎn)。?
可以先激活一個(gè)觀點(diǎn),再移動(dòng)這個(gè)視點(diǎn)使用戶視圖不斷變化。?
VisibilitySensor節(jié)點(diǎn)?
VisibilitySensor { ?
center 0 0 0 # exposed field SFVec3f?
size 0 0 0 # exposed field SFVec3f?
enabled TRUE # exposed field SFBool?
}?
?
?
域?
center 該傳感器的包圍盒中心。?
size 該傳感器的包圍盒在x、y、z方向的大小。?
enabled 指出VisibilitySensor是否處于激活狀態(tài)。若為FALSE,則傳感器不送出輸出時(shí)間;若為TRUE,則傳感器檢測(cè)用戶是否進(jìn)入指定的包圍盒,并通過(guò)isActive事件來(lái)發(fā)送輸出事件。?
事件?
isActive eventOut SFBool?
TRUE表明用戶已進(jìn)入包圍盒;FALSE表明用戶不再包圍盒內(nèi)。?
enterTime eventOut SFTime?
進(jìn)入包圍盒的時(shí)間。?
exitTime eventOut SFTime?
走出包圍盒的時(shí)間。?
說(shuō)明?
當(dāng)用戶瀏覽時(shí),VisibilitySensor檢查用戶是否進(jìn)入包圍盒。當(dāng)用戶進(jìn)入包圍盒的任意一部分時(shí),他輸出一個(gè)值為TURE的isActive事件;當(dāng)用戶退出包圍盒時(shí),他輸出一個(gè)值為FALSE的isActive事件。?
VisibilitySensor節(jié)點(diǎn)?
VisibilitySensor { ?
center 0 0 0 # exposed field SFVec3f?
size 0 0 0 # exposed field SFVec3f?
enabled TRUE # exposed field SFBool?
}?
?
?
域?
center 該傳感器的包圍盒中心。?
size 該傳感器的包圍盒在x、y、z方向的大小。?
enabled 指出VisibilitySensor是否處于激活狀態(tài)。若為FALSE,則傳感器不送出輸出時(shí)間;若為TRUE,則傳感器檢測(cè)用戶是否進(jìn)入指定的包圍盒,并通過(guò)isActive事件來(lái)發(fā)送輸出事件。?
事件?
isActive eventOut SFBool?
TRUE表明用戶已進(jìn)入包圍盒;FALSE表明用戶不再包圍盒內(nèi)。?
enterTime eventOut SFTime?
進(jìn)入包圍盒的時(shí)間。?
exitTime eventOut SFTime?
走出包圍盒的時(shí)間。?
說(shuō)明?
當(dāng)用戶瀏覽時(shí),VisibilitySensor檢查用戶是否進(jìn)入包圍盒。當(dāng)用戶進(jìn)入包圍盒的任意一部分時(shí),他輸出一個(gè)值為TURE的isActive事件;當(dāng)用戶退出包圍盒時(shí),他輸出一個(gè)值為FALSE的isActive事件。?
WorldInfo節(jié)點(diǎn)?
WorldInfo { ?
title " " # SFString?
info [] # MFString?
} ?
域?
title 瀏覽器在窗口的標(biāo)題欄上顯示的當(dāng)前世界的標(biāo)題。?
info 關(guān)于世界的其它信息,如作者、版權(quán)等。?
說(shuō)明?
WorldInfo節(jié)點(diǎn)含有世界的有關(guān)信息。它對(duì)該世界的視覺(jué)效果和動(dòng)作沒(méi)有任何影響,僅僅作為文檔
總結(jié)
以上是生活随笔為你收集整理的VRML语法基础跟简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 结构之美——优先队列基本结构(四)——二
- 下一篇: SDN你必须知道的十大问题——SDN有哪