国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

X3D實(shí)戰(zhàn)基礎(chǔ)講座之十二

2019-11-18 15:45:40
字體:
供稿:網(wǎng)友

  在X3D中,通過使用程序化的節(jié)點(diǎn)Script來嵌入腳本程序。它支持ECMAScript/javascript 或 Java語言。這里解釋一下什么是ECMAScript,ECMAScript也是一種腳本語言,由Netscape和Microsoft使用開發(fā),它是一種面向?qū)ο笳Z言,ECMAScript和DOM一起十分接近于現(xiàn)在對Javascript和JScript的實(shí)現(xiàn),雖然說是用于網(wǎng)絡(luò)環(huán)境,但它可以用于任何腳本環(huán)境中,并且其語法與JavaScript基本相同。



  在本講中,我們先來看一個實(shí)例過程,然后說明其簡單編程方法。

  一、 一個嵌入腳本程序的實(shí)例過程

  這個示例是當(dāng)鼠標(biāo)點(diǎn)擊圓柱體時,圓柱體移出和它相連的球,再單擊圓柱體,圓柱體回到原來的位置。示例過程如下:


(圖片較大,請拉動滾動條觀看)

  (1) 創(chuàng)建一個12..x3d新文檔,其初始化程序如下:

X3D實(shí)戰(zhàn)基礎(chǔ)講座之十二(圖二)

  (2) 由于球不需要移動,因此,我們先構(gòu)造一個球,顏色為黃色。如下面的代碼:

X3D實(shí)戰(zhàn)基礎(chǔ)講座之十二(圖三)

  (3) 對于圓柱體的鼠標(biāo)事件映射,我們使用觸摸傳感器,見下面的代碼:

X3D實(shí)戰(zhàn)基礎(chǔ)講座之十二(圖四)

  (4) 在Group后面添加Script節(jié)點(diǎn)。

  (5) 為Script節(jié)點(diǎn)添加Field子節(jié)點(diǎn),如下所示:

X3D實(shí)戰(zhàn)基礎(chǔ)講座之十二(圖五)

  (6) 選中Field子節(jié)點(diǎn),在其屬性窗口中設(shè)置相關(guān)屬性,結(jié)果如下所示:

X3D實(shí)戰(zhàn)基礎(chǔ)講座之十二(圖六)

  說明:name是用來指定域名,accessType是用來設(shè)置域的訪問類型,通常可以是inputOnly(輸入)、outputOnly(輸出)和inputOutput(輸入輸出)。Type指定域變量的數(shù)據(jù)類型,類型中前綴是SF表示單值,MF表示多值。Value為域變量提供缺省的初始值。

  (7) 再為Script節(jié)點(diǎn)添加兩個Field子節(jié)點(diǎn),用于輸出程序中指定的坐標(biāo)值和記錄是否移出。結(jié)果如下面的代碼:


(圖片較大,請拉動滾動條觀看)

  其中,SFBool為單值的布爾型,SFVec3F為單值的三維坐標(biāo)的實(shí)數(shù)型。

  (8) 為Script節(jié)點(diǎn)CDATA用于添加嵌入腳本程序,然后在CDATA的屬性窗口中輸入如下的腳本程序:

ecmascript:
function set_translation( isActive ) {
 if (isActive == true) {
  if (isTrans == false) {
   value_changed[0] = 5;
  } else {
   value_changed[0] = 0;
  }
  value_changed[1] = 0;
  value_changed[2] = 0;
  isTrans = ! isTrans;
 }
}
  (9) 單擊CDATA的屬性窗口中的Apply按鈕,程序代碼輸入有效。此時節(jié)點(diǎn)CDATA變成了ecmascript節(jié)點(diǎn)。

  (10) 將Script節(jié)點(diǎn)命名為USESCRIPT,然后添加ROUTE語句。整個代碼如下所示:

X3D實(shí)戰(zhàn)基礎(chǔ)講座之十二(圖八)X3D實(shí)戰(zhàn)基礎(chǔ)講座之十二(圖九)

  編譯并預(yù)覽,結(jié)果正如我們一開始設(shè)定那樣,單擊圓柱體,移出,再單擊圓柱體,圓柱體回到原來的位置。如下所示:

X3D實(shí)戰(zhàn)基礎(chǔ)講座之十二(圖十)

  二、 分析

  我們來看看代碼的運(yùn)行過程。首先第一條ROUTE語句將ToUChSensor傳感器的isActive事件傳遞給函數(shù)set_translation。該函數(shù)只有一個形參isActive,這個形參名可以是其他名稱,形參的數(shù)據(jù)類型取決于該函數(shù)的類型。當(dāng)鼠標(biāo)單擊圓柱體時,isActive事件為True,該值傳到set_translation,并執(zhí)行函數(shù)代碼。由于第一次單擊,IsTrans為False,這樣該函數(shù)運(yùn)行后,value_changed的值就變?yōu)閇5,0,0],IsTrans為True。

  value_changed的值改變后,通過第二條ROUTE語句,將其傳遞給圓柱體所在的父節(jié)點(diǎn)Transform的translation域,從而使圓柱體位置發(fā)生改變。

  若再單擊圓柱體,則仍然會沿著剛才的路由進(jìn)行數(shù)值的傳遞,從而圓柱體又回到了原來的位置。
從上述示例可以看出,實(shí)際上這種嵌入式腳本程序其目的是答應(yīng)用戶自己定義帶有輸入輸出事件的節(jié)點(diǎn)。

  三、 多傳感器和多個嵌入腳本

  上述示例中,圓柱體位置是直接變化的,能否使圓柱體的位置慢慢變化到指定的位置。也就是說,當(dāng)單擊圓柱體,圓柱體慢慢地移動到[5,0,0]位置,而再單擊圓柱體,圓柱體又慢慢回到原來的位置。為了不使程序代碼過于復(fù)雜,我們只實(shí)現(xiàn)前一個動作,即當(dāng)單擊圓柱體,圓柱體慢慢地移動到[5,0,0]位置。

  首先我們構(gòu)思一下其路由:單擊鼠標(biāo),激活時間觸發(fā)器,繼而通過位置插補(bǔ)器,使圓柱體慢慢移出。然后根據(jù)移出的結(jié)果,再通過程序設(shè)置時間觸發(fā)器停止。

  具體程序如下:

X3D實(shí)戰(zhàn)基礎(chǔ)講座之十二(圖十)

  上述代碼,讀者完全可以自己分析,這里不再贅述。

  總之,通過對X3D的節(jié)點(diǎn),我們可以構(gòu)造出不一般的場景,這樣就可以用于基于WEB的產(chǎn)品展示、網(wǎng)絡(luò)教學(xué)、仿真等一系列領(lǐng)域。本講座僅僅是一個入門的基礎(chǔ)教程,更深層次的探索還需要我們慢慢去體驗(yàn)。進(jìn)入討論組討論。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 丰台区| 左贡县| 玉门市| 子长县| 新龙县| 普宁市| 清水县| 江城| 东宁县| 杭锦后旗| 高要市| 从化市| 石林| 扎鲁特旗| 渝北区| 琼结县| 镇康县| 淮北市| 化州市| 牡丹江市| 宣化县| 沂水县| 通辽市| 上栗县| 龙州县| 廉江市| 清镇市| 古蔺县| 宁南县| 马山县| 新干县| 奈曼旗| 屯门区| 会同县| 桂林市| 吴旗县| 舞钢市| 镇康县| 开江县| 靖江市| 扎鲁特旗|