亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        VRML中交互功能的研究與實(shí)現(xiàn)

        2010-04-12 14:35:59楊安祺喬海超張杜娟賈偉光
        陜西科技大學(xué)學(xué)報 2010年3期
        關(guān)鍵詞:轉(zhuǎn)椅腳本編程

        楊安祺, 喬海超, 張杜娟, 賈偉光, 唐 軍

        (1.陜西科技大學(xué)電氣與信息工程學(xué)院, 陜西 西安 710021; 2.西安醫(yī)學(xué)院公共課部, 陜西 西安 710021)

        0 引言

        隨著計算機(jī)技術(shù)的不斷發(fā)展,網(wǎng)頁上一些文本、圖片等二維展示途徑已經(jīng)滿足不了人們的需要,三維建模語言的出現(xiàn)則滿足了人們的這一要求.目前,在房地產(chǎn)開發(fā)等諸多領(lǐng)域,國內(nèi)外不少公司都已經(jīng)開始了三維展示的應(yīng)用,通過三維實(shí)體構(gòu)建模型,將產(chǎn)品的特點(diǎn)生動直觀地展現(xiàn)給用戶,獲得了巨大的成功.以三維建模技術(shù)構(gòu)建的虛擬展廳、虛擬社區(qū),不僅能給出模型的色彩、外觀、結(jié)構(gòu)、紋理等靜態(tài)信息,還能給出模型在運(yùn)動狀態(tài)所擁有的一些特性,而且用戶可以在其中進(jìn)行交互式操作,了解到更多的模型在真實(shí)世界中的信息[1].

        VRML(Virtual Reality Modeling Language,虛擬現(xiàn)實(shí)建模語言)是一種開發(fā)于上世紀(jì)90年代的三維建模語言,起初只能創(chuàng)建靜態(tài)的三維模型,但隨著計算機(jī)圖形學(xué)技術(shù)和用戶要求的不斷發(fā)展,VRML從2.0版本起支持動態(tài)模型的建立,并且可以添加聲音、腳本,使得它所建立的模型更加生動形象.由于VRML是一種面向WEB、面向?qū)ο蟮娜S建模語言,再加上它具有平臺無關(guān)性,用戶可以在任意操作系統(tǒng)上瀏覽,所以飛速成為了目前因特網(wǎng)上三維網(wǎng)站制作的主流語言.

        1 VRML在交互方面的特點(diǎn)

        在現(xiàn)在的三維圖形建模體系中,存在不少的佼佼者,比如以文件小、交互功能強(qiáng)而著稱的VRML建模,有著高畫質(zhì)、生動的模型形態(tài)的3D MAX建模,以及純C++或者其他支持圖形繪制的計算機(jī)語言建模方式.其中VRML和3D MAX建模比較簡單易學(xué),而純計算機(jī)語言比如C++等的建模方式復(fù)雜程度較高,掌握起來困難度比較大.3D MAX渲染出來的動畫效果很絢麗,可是僅僅能讓模型按照事先設(shè)置的路徑和方式運(yùn)動起來,雖然也自帶有MAX Script腳本,但不能很好地支持多用戶交互操作.

        相對而言,VRML不僅從語言結(jié)構(gòu)上來說比較簡單,而且支持多種不同種類的交互,能夠充分滿足編寫者的設(shè)計需要.VRML97標(biāo)準(zhǔn)的建立,使得VRML可以使用諸多的內(nèi)建傳感器節(jié)點(diǎn),而且支持VRML Script腳本編程,更令人欣喜的是,VRML還支持引入JAVA、JAVA Script等語言編制的腳本,這些腳本編程交互的加入,將會發(fā)揮編程靈活、控制手段多樣、實(shí)現(xiàn)范圍更廣泛的特點(diǎn),設(shè)計出更生動、復(fù)雜的場景[2].

        2 VRML的交互種類及其實(shí)現(xiàn)

        從編程的復(fù)雜程度上來說,大致可以分為兩類:一類是需要復(fù)雜編程的,比如利用VRML Script等腳本語言編寫交互程序;另一類是不需要復(fù)雜編程的,比如利用VRML自帶的各種傳感器節(jié)點(diǎn)進(jìn)行交互.從交互對象上看,又可以分為VRML內(nèi)部模型編程交互(如上面舉到的兩個例子)和VRML引入對象自帶交互功能,也就是在VRML引入的對象里自己帶有一定的交互功能.

        根據(jù)以上區(qū)別,我們把VRML內(nèi)支持的交互功能分為3類:基于VRML內(nèi)建傳感器的交互、基于腳本語言的交互、引入可交互對象[3,4].

        2.1 傳感器交互技術(shù)

        VRML內(nèi)建了時間傳感器(TimeSensor)、觸摸傳感器(TouchSensor)、接近傳感器(ProximitySensor)、碰撞傳感器(Collision)等多種傳感器節(jié)點(diǎn).這些傳感器節(jié)點(diǎn)功能不同,分工明確,可以完成最基本的交互功能,滿足用戶最基本的交互需要.VRML當(dāng)中還內(nèi)建有多種插值器,這些插值器主要用于實(shí)現(xiàn)動畫效果.綜合運(yùn)用傳感器節(jié)點(diǎn)和插值器節(jié)點(diǎn),可以使用戶在執(zhí)行某一操作時觸發(fā)某個量變或者形變的動畫,使場景更加生動.

        舉個例子,假如我們目前想要設(shè)置一個這樣的功能:當(dāng)用戶走近某個對象時,就可以聽到這個對象的相關(guān)介紹,當(dāng)離開一段距離后聲音就會漸漸減弱到消失.這個功能可以通過接近傳感器(ProximitySensor)節(jié)點(diǎn)去實(shí)現(xiàn).ProximitySensor節(jié)點(diǎn)用來感知某一個坐標(biāo)區(qū)域內(nèi)是否有用戶進(jìn)入和離開,并對用戶的進(jìn)入和離開還有在該區(qū)域內(nèi)的停留事件做出響應(yīng),其節(jié)點(diǎn)語法如下 :

        ProximitySensor {

        Enabled TRUE

        Center x,y,z

        Size a,b,c

        isActive

        enterTime

        exitTime

        Position_changed

        Orientation_changed

        }

        其中,Enable域用來控制傳感器的開關(guān),是一個布爾型變量,當(dāng)它的值為TURE時,傳感器處于打開狀態(tài),才能感知用戶的行為;center域用來設(shè)定用于感應(yīng)的長方體區(qū)域中心點(diǎn)的坐標(biāo)值;size用來設(shè)定用于感應(yīng)的長方體區(qū)域的大小,a、b、c分別為該區(qū)域在X軸、Y軸、Z軸方向的長度;isActive域是一個布爾型變量,用于標(biāo)記感應(yīng)區(qū)域內(nèi)有沒有用戶存在,如果有,那么它的值為TURE;enterTime域和exitTime域分別用于記錄用戶進(jìn)入和離開感應(yīng)區(qū)域的時間;Position_changed域用來記錄用戶在感應(yīng)區(qū)域內(nèi)的位置;Orientation_changed域用于記錄用戶在感應(yīng)區(qū)域內(nèi)的空間坐標(biāo)方向.

        由于我們需要觸發(fā)的事件是音頻的播放,所以完成該感應(yīng)機(jī)制,還需要設(shè)置音響剪輯(AudioClip)節(jié)點(diǎn).音響剪輯節(jié)點(diǎn)主要用于引入音源信息,它的域值url可以鏈接到網(wǎng)上任意一段音頻,但是僅限于WAV和MIDI格式的文件.該節(jié)點(diǎn)中還包含有startTime域和stopTime域,分別用于設(shè)置聲音文件的播放和停止時間.

        首先設(shè)置接近傳感器節(jié)點(diǎn)的感知區(qū)域,當(dāng)用戶進(jìn)入虛擬展廳當(dāng)中設(shè)定好的感知區(qū)域后,接近傳感器的isActive域?qū)敵霾紶栔礣RUE,同時接近傳感器enterTime域會把用戶進(jìn)入感應(yīng)區(qū)域的事件記錄下來,把接近傳感器enterTime域的時間值傳送到音響剪輯節(jié)點(diǎn)的startTime域,將其激活,這樣在用戶進(jìn)入感知區(qū)域時,音響剪輯節(jié)點(diǎn)就開始播放聲音;當(dāng)用戶退出感知區(qū)域時,接近傳感器的isActive域輸出FALSE,關(guān)閉該傳感器,同時接近傳感器的exitTime域記錄用戶退出感知區(qū)域的時間,把exitTime域記錄的時間值送到音響剪輯節(jié)點(diǎn)內(nèi)stopTime域,在這一時刻關(guān)閉聲音.這樣,一個感應(yīng)用戶是否接近對象的交互功能就完成了.

        從以上例子可以看出,用戶的一般交互行為,用VRML的內(nèi)建傳感器節(jié)點(diǎn)綜合其他常用節(jié)點(diǎn)是很容易實(shí)現(xiàn)的.由于VRML內(nèi)建傳感器僅支持一些簡單的交互行為響應(yīng),所以基于傳感器節(jié)點(diǎn)的交互技術(shù)適用于處理一般情況下常用的用戶交互行為.

        2.2 腳本編程交互技術(shù)

        用戶在進(jìn)入虛擬場景之后,有時往往想要進(jìn)行一些比較復(fù)雜的交互,這些交互僅僅利用VRML內(nèi)建的傳感器節(jié)點(diǎn)是無法滿足的,這時候我們就需要使用腳本編程方式來解決.

        腳本編程交互技術(shù)是指引入用其他腳本語言比如Java Script或者VRML Script等編寫的程序腳本去執(zhí)行某一項(xiàng)交互操作.由于VRML允許引用的腳本語言種類繁多,而且功能強(qiáng)大,所以利用這一機(jī)制基本上可以完成用戶所需要的所有交互行為.

        在VRML當(dāng)中,需要使用腳本節(jié)點(diǎn)(Script)來引入其他語言編寫的腳本.腳本節(jié)點(diǎn)的語法格式如下:

        DEF <節(jié)點(diǎn)名稱> Script{

        field <域類型> <域名>

        eventIn <入事件類型> <入事件名>

        eventOut <出事件類型> <出事件名>

        url ”<腳本語言聲明>:

        腳本語言程序” }

        這里的域、入事件、出事件是為了后面腳本語言程序的運(yùn)行做準(zhǔn)備工作的,用于建立腳本程序和VRML場景之間的聯(lián)系,沒有個數(shù)的限制,也就是說同一事件可以產(chǎn)生多個結(jié)果.

        下面我們通過一段程序來介紹腳本編程與傳感器節(jié)點(diǎn)相結(jié)合使用完成的一項(xiàng)交互功能.在這里,我們制作了一個轉(zhuǎn)椅,當(dāng)人們用鼠標(biāo)點(diǎn)住轉(zhuǎn)椅的上部時,可以拖動轉(zhuǎn)椅轉(zhuǎn)向任意方向.為了實(shí)現(xiàn)交互,在轉(zhuǎn)椅的椅墊以上部分定義了一個繞軸旋轉(zhuǎn)的圓柱體傳感器(CylinderSensor)節(jié)點(diǎn),通過將傳感器節(jié)點(diǎn)的輸出路由到Script節(jié)點(diǎn)來引起轉(zhuǎn)椅的旋轉(zhuǎn).當(dāng)鼠標(biāo)停在轉(zhuǎn)椅上就會變成手的形狀可以隨鼠標(biāo)的轉(zhuǎn)動而使轉(zhuǎn)椅繞Y軸進(jìn)行旋轉(zhuǎn).以下是實(shí)現(xiàn)該功能的代碼:

        DEF SCR Script #定義Script節(jié)點(diǎn)

        {

        url ”javascript:

        function initialize () {

        ps = sp.site._parent_site_;

        if (ps) {

        geom = tr.children [1].children [0];

        geom.children = ps.children;

        ps.children = new MFNode (tr);

        setAxis (axis);

        center = ps.center;

        tr.translation = center;

        geom.translation = geom.rotation.multVec (center.negate ( ));

        cortona = Browser.getName ().indexOf (‘Cortona’)! = -1;

        }

        }

        function setAxis (val) {

        geom = tr.children [1].children [0];

        v = geom.rotation.multVec (axisVectors [val]);

        tr.rotation = new SFRotation (axisVectors [1], v);

        tr.children [1].rotation = tr.rotation.inverse ();

        tr.children [0].offset = 0;

        offset = geom.rotation;

        }

        function rotation (value) {

        geom = tr.children [1].children [0];

        v = tr.rotation.multVec (axisVectors [1]);

        r = new SFRotation (v, value [3]);

        geom.rotation = cortona? r.multiply (offset): offset.multiply(r);

        geom.translation = geom.rotation.multVec (center.negate ( ));

        }

        function enable (val) {

        tr.children [0].enabled = val;

        }”

        directOutput TRUE # Script節(jié)點(diǎn)可以將事件出直接傳給它能聯(lián)系上的任意節(jié)點(diǎn)

        field SFNode tr Transform

        {

        children

        [

        DEF CS CylinderSensor #定義接觸型傳感器(轉(zhuǎn)椅繞下面軸旋轉(zhuǎn))

        {

        enabled IS Enabled

        maxAngle IS $MaxAngle

        minAngle IS $MinAngle

        isActive IS isActive

        }

        Transform

        {

        children

        [

        Transform

        {

        rotation IS rotation_changed

        }]}]}

        field SFNode sp SiteProvider

        {

        site IS _object_site_}

        eventIn SFBool enable IS enable

        field SFInt32 axis IS $Axis

        eventIn SFInt32 setAxis IS setAxis

        eventIn SFRotation rotation

        field SFRotation offset 0 1 0 0

        field MFVec3f axisVectors [1 0 0, 0 1 0, 0 0 1]

        field SFVec3f center 0 0 0

        field SFBool cortona TRUE}

        ROUTE CS.rotation_changed TO SCR.rotation

        }

        2.3 引入可交互對象

        引入可交互對象的機(jī)制,是綜合運(yùn)用其他外部對象的交互資源完成VRML場景內(nèi)交互功能的方法.從VRML2.0版本開始,有兩種方法可以引用外部的.wrl或者其他格式的文件,其中內(nèi)建(InLine)節(jié)點(diǎn)允許包含存儲在網(wǎng)頁上的任何VRML文件,外部原型(EXTERNPROTO)節(jié)點(diǎn)允許調(diào)用來自互聯(lián)網(wǎng)任意地方的資源來定義新節(jié)點(diǎn).更一般的情況是,EXTERNPROTO語句使節(jié)點(diǎn)在VRML文件之外定義,這也是VRML最基本的可擴(kuò)展機(jī)制.

        目前,基于以上兩種機(jī)制,已經(jīng)有很多種類的的對象可以插入到VRML場景中,而且其中一些對象本身就具有一定的交互性,部分對象還支持腳本編程.在使用VRML構(gòu)建的虛擬場景中引入這些對象,不僅可以使虛擬場景更加豐富多彩,而且能夠在一定程度上增強(qiáng)虛擬場景的交互性.

        以Flash為例,在三維建模語言出現(xiàn)之前,F(xiàn)lash就曾經(jīng)一度被用于網(wǎng)頁仿三維展示.Flash本身具有強(qiáng)大的動畫功能,而且支持Action Script腳本編輯語言,這些使得Flash在平面表示和交互上具有很大的優(yōu)勢.現(xiàn)在雖然有三維建模語言的支持,但是Flash文件體積小、表現(xiàn)方式多種多樣、交互功能強(qiáng)大的優(yōu)勢依然可以發(fā)揮在目前的三維建模領(lǐng)域.如果我們想在制作的VRML虛擬場景中加入Flash文件,那么在VRML文件的頭文件之后,加入如下代碼就可以支持對Flash文件的調(diào)用:

        EXTERNPROTO FlashMovie [...]

        中間被省略的部分用于設(shè)置外部節(jié)點(diǎn)的域和事件,其中域、事件的類型和名稱必須與引用的外部節(jié)點(diǎn)中的定義一樣.

        使用外部原型節(jié)點(diǎn)引用的外部對象,其外部節(jié)點(diǎn)的資源定位格式為:

        "URL/URN"或["URL/URN","URL/URN",…]

        資源定位可以為URL或URN格式,當(dāng)使用"URL/URN"或["URL/URN","URL/URN",…]的數(shù)組形式時,瀏覽器使用數(shù)組中第一個正確尋獲的資源.資源的形式也可以寫為:

        URL/URN # externProtytypeName

        externProtytypeName為引用的外部節(jié)點(diǎn)的名稱,這時候,可以使用與外部節(jié)點(diǎn)定義的名稱不同的節(jié)點(diǎn)名稱.

        3 結(jié)束語

        VRML支持的多種交互技術(shù)各有千秋,傳感器交互適用于處理簡單的用戶交互,腳本編程交互適用于處理復(fù)雜的用戶交互行為,在VRML中引入具有交互功能的對象更可以為虛擬場景增色不少.如果能在VRML構(gòu)建的場景中綜合運(yùn)用這些交互功能,則可以把VRML的交互能力發(fā)揮到極致.

        [1] 劉 怡,張洪定,崔 欣.虛擬現(xiàn)實(shí)VRML程序設(shè)計[M]. 天津:南開大學(xué)出版社,2007:1-3.

        [2] 翁 蓉,廖小平. 基于VRML和Java的交互式虛擬產(chǎn)品設(shè)計[J].計算機(jī)工程與設(shè)計,2007,12:59-60.

        [3] 李曉玲,陸長德,李小莉. 基于網(wǎng)絡(luò)的交互式虛擬展示技術(shù)研究[J]. 計算機(jī)工程與應(yīng)用, 2007,43(3):90-92.

        [4] 汪 華,李 瑩. VRML與JavaScript結(jié)合實(shí)現(xiàn)交互式動畫[J].福建電腦,2008(3):187.

        猜你喜歡
        轉(zhuǎn)椅腳本編程
        我家有只編程貓
        我家有只編程貓
        我家有只編程貓
        我家有只編程貓
        酒駕
        計數(shù):飛翔的轉(zhuǎn)椅
        孩子(2021年5期)2021-05-23 13:51:55
        安奇奇與小cool 龍(第二回)
        數(shù)據(jù)庫系統(tǒng)shell腳本應(yīng)用
        電子測試(2018年14期)2018-09-26 06:04:24
        快樂假期
        困了
        詩林(2016年5期)2016-10-25 00:13:09
        亚洲一区二区三区四区五区黄| 最新亚洲精品国偷自产在线 | 日韩精品免费一区二区三区观看 | 亚洲熟妇大图综合色区| 亚洲高清国产品国语在线观看| 日本老熟女一区二区三区| av手机免费在线观看高潮| 美女mm131爽爽爽| 女人色毛片女人色毛片18| 中文精品久久久久中文| 日本午夜理伦三级好看| 手机在线看片国产人妻| 亚洲av无码乱码国产精品| 色狠狠色狠狠综合一区| 亚洲最大av免费观看| 精彩亚洲一区二区三区| 日本一本之道高清不卡免费| 精品丝袜人妻久久久久久| 久久久AV无码精品免费| 丝袜美腿亚洲综合久久| 亚洲大尺度无码无码专区| 熟女少妇精品一区二区| 狠狠人妻久久久久久综合| 97久久成人国产精品免费| 日韩激情av不卡在线| 极品人妻被黑人中出种子| 精品人妻人人做人人爽| 亚洲欧美国产日韩制服bt| 老熟女熟妇嗷嗷叫91| 国产美女高潮流的白浆久久| 视频国产自拍在线观看| 精品人妻一区二区三区久久| 国产精品无码专区av在线播放| 加勒比无码专区中文字幕| 亚洲天堂一区二区三区视频| 中文字幕亚洲无线码在线一区| 无码一区二区三区亚洲人妻| 精品视频入口| 少妇呻吟一区二区三区| 午夜精品久久久久久久| 精品国产乱码久久久软件下载|