判定使用姿式模型的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創造的如時空門的效果。接下來我們將與大家討論訪問權限設置,多線程的運用以及拓展結構等問題。進入討論組討論。