事件與路由是實現(xiàn)虛擬場景中動畫和交互必不可少的手段。當發(fā)生某個事件時,比如時間的增加、鼠標點擊對象、瀏覽者靠近對象等,場景中節(jié)點對象的域值會隨之發(fā)生變化。造型的變化(如狀態(tài)、外觀、位置等)是指描述節(jié)點中的域值的變化,瀏覽器在處理場景對象域值變化的時候,是根據(jù)時間檢測傳感器以及內(nèi)插節(jié)點在某一時刻對應的域值去代替場景對象原來的域值,它并沒有改變VRML文件本身。
例如,要設(shè)計這樣一個場景:當用戶的鼠標指針移動到某個對象上時,造型的顏色發(fā)生變化。可使用檢測器節(jié)點檢測到用戶的動作,然后輸出事件給相應的節(jié)點中描述顏色的域,當該域接收了這個事件后,改變顏色,可以表示為set tcolor。當節(jié)點的相應的域被改變了,會對改變的狀態(tài)有所反應,送出一些事件,比如發(fā)出信號,顏色改變了,可以表示為 Colorchanged。
由此可知,VRML定義了兩種事件:一種是輸入事件(EventIn),表示接收事件;另一種是輸出事件(Event Out),表示發(fā)送事件。域又分為兩種類型:一種是可見域(exposed field),另一種是不可見域。這里所說的事件,都是發(fā)生在可見域類型之中。輸入事件通常對應的是“set_域值”,輸出事件通常對應的是“域值changed”。要想使得可見域變化,可經(jīng)過設(shè)定好的途徑將事件傳遞給“set域值”,當域值改變了,可由“域值_changed”經(jīng)過一定的途徑通知其他節(jié)點。
所謂“一定的途徑”即路由,表明了事件傳送的方式與渠道。路由的功能是連接一個節(jié)點的接收事件 eventIns和另外一個節(jié)點的發(fā)送事件 eventouts通過簡單的語法結(jié)構(gòu),建立兩個節(jié)點之間事件傳送的通道。當有事件發(fā)生時,沿著這條通道傳送事件。借助于事件和路由,可以創(chuàng)建動畫效果以及覽者和場景的交互,使得所建立的虛擬場景更接近于現(xiàn)實。
內(nèi)容來源:李新暉《虛擬現(xiàn)實技術(shù)與應用》