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

首頁 > 學院 > 開發設計 > 正文

虛擬現實之高級技巧(五)

2019-11-18 15:39:48
字體:
來源:轉載
供稿:網友

  witch結點將使場景具有更多的靈活性和真實感,它的目的在于容許附加多個子結點,并容許同時運行這些結點。當然也可以使用ToUChScense結點同時定義多條路線,但是這樣會使程序非常繁雜,在多個外形變化時,幾乎沒有人使用這種方法。

  在場景中有一個waiter,當用戶接近點擊他,waiter做出一個向用戶問候的姿式。完成場景中這樣一個設計,首先在三維軟件中做出waiter的兩個姿式,一個是用戶沒有點擊時的姿式Detail保存為Detail.wrl,和一個waiter問候的姿式Hello保存為Hello.wrl。當然理論上Switch結點是支持無限任意姿式的,只需要你預先定義幾種模型,讓Switch結點選擇在什么時候使用什么樣的姿式就行了,只是在這個例子中,我們使用了兩個姿式罷了。我們將兩個姿式模型定義在一個Switch結點中,在用戶點擊之后,通過Script結點的setAgentImage字段傳遞給java程序,再由Java程序決定用什么姿式模型,然后再將選擇的結果返回到Script結點的WhichChioce中,告之Switch結點要使用的模型顯示出來。

#VRML V2.0 utf8
Transform{
children[
DEF AGENT_SWITCH Switch{
whichChoice 0
choice[
# normal posture
Inline{url "Detailed.wrl"},
# hello posture
Inline{url "Hello.wrl"}
]
},
DEF AGENT_TOUCH TouchSensor{}
]
}
DEF AGENT_SCRIPT Script{
url "SwitchAgent.class"
eventIn SFTime touchTime
eventOut SFInt32 setAgentImage
}
ROUTE AGENT_TOUCH.touchTime TO AGENT_SCRIPT.touchTime
ROUTE AGENT_SCRIPT.setAgentImage TO AGENT_SWITCH.set_whichChoice進入討論組討論。

  判定使用姿式模型的Java程序:
import vrml.*;
import vrml.node.*;
import vrml.field.*;
public class SwitchAgent extends Script{
SFInt32 setAgentImage;
boolean normalPosture = true;
public void initialize(){
// get the reference of the event out "setAgentImage".
setAgentImage = (SFInt32)getEventOut("setAgentImage");
}
public void PRocessEvent(Event e){
if(e.getName().equals("touchTime") == true){
// toggle the state.
normalPosture = !normalPosture;
if(true == normalPosture){
// make the agent in normal posture.
setAgentImage.setV e(0);
}else{
// make the agent in hello posture.
setAgentImage.setValue(1);
}
}
}
}

  接下來我們再和大家談談碰撞的問題,在VRML的場景中實體是默認為實心的,也就是說場景中的實體在默認狀態下是需要進行碰撞檢測不能被穿透的。在結點指南中我們和大家談過是由Collision結點控制的,但是實際的情況中,并不是所有的實體都需要進行碰撞檢測的,就需要對Children字段進行設置,它決定了碰撞檢測的開關,具體的設置請大家看看結點指南,這里只和大家將一個方法。假如說場景中有一棵樹,或者是更為復雜的幾何圖形,假如它的某一部分需要進行碰撞檢測,那么瀏覽器進行非常復雜的碰撞檢測將會大大的降低速度,同時設置也會很復雜。我們用一個簡單的方法,將需要進行碰撞檢測的部分通過Collision結點的Proxy字段與一個簡單的幾何圖形聯系起來,一旦用戶與簡單圖形發生碰撞,那么原來需要進行碰撞檢測的部分也跟著進行了碰撞檢測,用簡單圖形替代了復雜圖形的碰撞檢測。同時還需要注重一點,當發生碰撞時,Collision結點產生一個CollisionTime事件,通過這個事件觸發程序可以調用其它的事件。比如說場景中有一堵墻上面有"危房"二字,當用戶與墻發生碰撞后,調用墻倒下的事件。談到這里碰撞的檢測設定已經非常簡單了,大家可以先設置兩堵墻一堵可以穿過,另一堵需要進行碰撞檢測試試,至于復雜的場景這些都在于用戶個自的設計了。

  在下一篇中,我們將和大家討論最后一個構造場景的問題,當場景很大時,設置幾個點讓用戶可以在場景中進行跳越,用Viewpoint創造的如時空門的效果。接下來我們將與大家討論訪問權限設置,多線程的運用以及拓展結構等問題。進入討論組討論。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 彭泽县| 延长县| 于田县| 龙陵县| 安岳县| 苏州市| 兴山县| 陵水| 禹州市| 阿瓦提县| 桦南县| 当阳市| 鹰潭市| 阳原县| 历史| 夹江县| 宁乡县| 南靖县| 惠州市| 长治市| 清镇市| 张家川| 突泉县| 荣成市| 普定县| 纳雍县| 广水市| 景洪市| 南江县| 上饶市| 昆山市| 桐庐县| 石嘴山市| 曲阳县| 庄河市| 宜黄县| 宣恩县| 云安县| 读书| 商水县| 桓台县|