freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

虛擬現(xiàn)實技術(shù)——vrml篇(編輯修改稿)

2024-08-10 01:56 本頁面
 

【文章內(nèi)容簡介】 bind,view2收到“TRUE”后成為當(dāng)前視點,所以在我們眼前場景發(fā)生了變化。 當(dāng)松開鼠標(biāo)左鍵,又回到原來的視點,稱為視點回跳。因為松開鼠標(biāo)左鍵后,接觸傳感器向view2發(fā)送了“FALSE”事件,這樣view2的當(dāng)前地位被解除。若不想回跳,則要自己來定義。在VRML中,利用Script節(jié)點(腳本節(jié)點)定義用戶自定義行為,所謂定義即用腳本描述語言(Scripting Language)編寫腳本的過程。VRML97支持的腳本描述語言目前有兩種:Java和EMCAScript(這是JavaScript標(biāo)準(zhǔn)化后的名稱),關(guān)于這兩種語言本身,請參考相應(yīng)參考書,VRML97標(biāo)準(zhǔn)中定義了它們和VRML的接口方法。應(yīng)提請注意的是:VRML是基于節(jié)點的語言,所以腳本也是封裝在Script這個特殊節(jié)點中的。這里我們不過多討論腳本描述語言的細(xì)節(jié),主要討論把腳本集成到VRML文件中的方法。   上面我們曾把接觸檢測器touchBox 和視點view2直接通過路徑連接起來,現(xiàn)在要定義我們指定的行為,就需要在二者之間插入一個腳本節(jié)點,也就是讓路徑繞個彎:   ROUTE TO   ROUTE TO   其中的腳本節(jié)點touchScript有一個事件人口touchBoxIsActive和一個事件出口bind_View2,前者接收來自接觸檢測器touchBox的事件,然后經(jīng)自己的腳本處理后,把結(jié)果發(fā)送給視點節(jié)點view2:   DEF touchScript Script {    eventIn SFBool touchBoxIsActive ?。H肟凇  ventOut SFBool bindView2    ?。3隹凇  rljavescript:          #腳本    function touchBoxIsActive(active) {  ?。Ec入口同名的函數(shù)被調(diào)用     bindView2= TRUE。           ?。7祷氐匠隹凇        }關(guān)于這個Script節(jié)點,請注意一下幾點:  (1)它的事件入口touchBoxIsActive和事件出口bindView2是自定義的,其它VRML節(jié)點的域和事件都是固定的?! 。?)這里定義的事件入口touchBoxIsActive(即入事件)和事件出口bindView2(即出事件)的類型都是SFBool(單值布爾型),它們與touchBox的事件出口isActive和view2的事件入口set_bind的類型保持一致?! 。?)“url”是腳本節(jié)點的一個域,可以直接包含腳本,也可以包含一個或多個用URL地址指示的腳本,若有多個地址,則按照先后次序獲取第一個可得到的腳本?! 。?)腳本是以函數(shù)(function)的形式給出的,函數(shù)名touchBoxIsActive 與事件入口的名稱相同,這是和ECMAScript語言的接口約定,表示相應(yīng)事件入口收到事件后調(diào)用此函數(shù)進(jìn)行處理。   下面我們整理一下事件流程:  ?。?)用戶在方塊上按下鼠標(biāo)左鍵。  ?。?)接觸檢測器發(fā)出一個“TRUE”事件。  ?。?)此事件進(jìn)入腳本節(jié)點touchScript的事件入口touchBoxIsActive.  ?。?)調(diào)用腳本函數(shù)touchBoxIsActive(注意函數(shù)并沒有判斷入事件的值)。  ?。?)函數(shù)向touchScript的事件出口bindView2發(fā)送一個“TRUE”事件(還可以進(jìn)行其它判斷或執(zhí)行其它事件)。  ?。?)view2節(jié)點收到“TRUE”事件,成為當(dāng)前視點。按照VRML約定,“認(rèn)為”上述事件是同時發(fā)生的,也就是這些事件的時間戳相同。   (7)若用戶松開鼠標(biāo)左鍵,則接觸檢測器發(fā)出一個“FALSE”事件,此事件同樣引起腳本函數(shù)調(diào)用并發(fā)送“TRUE”事件,所以view2仍然保持為當(dāng)前視點。 本節(jié)的完整代碼是:   VRML utf8    DEF view1 Viewpoint {     position 0 0 20     description view1     }    DEF view2 Viewpoint {     position 5 0 20     description view2     }    Group {     children [      DEF box Transform {       translation 5 0 0       children [        Shape {         appearance Appearance {          material Material {           diffuseColor 1 0 0           }          }         geometry Box {}         }        DEF touchBox TouchSensor {}        ]       }      DEF sphere Transform {       translation 0 0 0       children [        Shape {         appearance Appearance {          material Material {           diffuseColor 0 1 0          }          }         geometry Sphere {}         }        ]       }       DEF cone Tranform {        transaltion 5 0 0        children [         Shape {          appearance Appearance {           material Material {            diffuseColor 0 0 1            }           }          geometry Cone {}          }         ]        }       ] end of Group children      }     DEF touchScript Script {      eventIn SFBool touchBoxIsActive      eventOut SFBool bindView2      url javascript :       function touchBoxIsActive (active) {        bindView2 = TRUE。        }      }     ROUTE TO     ROUTE TO  這里所建立的虛擬境界并不復(fù)雜,:利用檢測器產(chǎn)生事件、利用路由傳遞事件以及利用腳本編寫自定義行為。在后面的幾節(jié)中,我們將探索一些專題性的有趣功能,而本節(jié)是基礎(chǔ),因而必須透徹理解。 (六)進(jìn)一步的完善與修飾當(dāng)用戶進(jìn)入或離開鄰近檢測器所劃定的區(qū)域時就會觸發(fā)它。正如你在標(biāo)準(zhǔn)中可以查到的那樣,ProximitySensor節(jié)點定義為:ProximitySensor {    exposedField SFVec3f center 0 0 0    exposedField SFVec3f size 0 0 0    exposedField SFBool enabled TRUE    eventOut SFBool isActive    eventOut SFVec3f position_changed    eventOut SFRotation orientation_changed    eventOut SFTime enterTime    eventOut SFTime exitTime    }ProximitySensor節(jié)點共有三個外露域(exposedField)和五個出事件(eventOut).出事件我們已經(jīng)熟悉,是節(jié)點狀態(tài)發(fā)生改變時用來通知其它節(jié)點的,這里的出事件isActive 用于ProximitySensor通報自己已被激活。enterTime和exitTime通報用戶(代表用戶的用戶化身或指示器)進(jìn)入和退出ProximitySensor檢測區(qū)的時刻。若用戶已在檢測器之內(nèi),則當(dāng)用戶的位置或方位發(fā)生變化時,送出position_changed和orientation_changed出事件。這五個出事件聯(lián)合起來,就定義了鄰近檢測器的功能。外露域則集域(Field)、入事件(eventIn)和出事件(eventOut)三者的功能于一身,也就是說,它既象域一樣描述了節(jié)點的當(dāng)前狀態(tài),又可以作為入事件由其它節(jié)點修改這種狀態(tài),并作為出事件把這種改變通知其它節(jié)點。這里的enabled外露域是布爾型的,用于ProximitySensor的啟用和停用,center和size定義形為長方體的鄰近檢測區(qū)?! ∥覀円诜綁K、球體和圓柱這三個物體構(gòu)成的靜態(tài)世界,現(xiàn)在在球體周圍增加一個鄰近檢測區(qū):DEF sphere Transform {    translation 0 0 0     children [      Shape {....}      DEF eClose ProximitySensor {       center 0 0 0       size 4 4 4       }      ]     }ProximitySensor的名字為eCloser,鄰近區(qū)的中心和球體的球心重合,形狀為正方體,邊長為4米,是球體直徑的兩倍。當(dāng)用戶走進(jìn)球體時就會觸發(fā)這個鄰近檢測器,檢測器發(fā)出isActive事件,我們把這個事件出口通過路由指向Script節(jié)點(用來綁定視點2):DEF eCloserScript Script {    eventIn SFBool enterProximitySensorIsActive    eventOut SFBool bindView2    url javascript :     function enterProximitySensorIsActive (active) {      bindView2=TRUE。      }    }隨后,我們在鄰近檢測器的出事件isActive和腳本節(jié)點eCloserScript的入事件enterProximitySensorIsActive之間建立路由,后者收到事件后執(zhí)行函數(shù)enterProximitySensroIsActive,函數(shù)發(fā)出bindView2出事件,這個出事件通過路由連接到視點節(jié)點View2:ROUTE TO   ROUTE TO 也就是說,一旦用戶進(jìn)入鄰近區(qū),、三個物體、一個鄰近檢測器和一個腳本節(jié)點組成的境界的完整代碼如下:VRML utf8   DEF view1 Viewpoint {    position 0 0 20    description view1    }   DEF view2 Viewpoint {    position 0 0 20    description view2    }   Group {    children [     DEF box Transform {      translation 5 0 0      children [       S
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1