Graphics 版 (精华区)

发信人: leonado (##小:妖:发:呆:勒##), 信区: Graphics
标  题: 虚拟现实之高级技巧(十二)
发信站: 哈工大紫丁香 (2001年01月07日19:28:39 星期天), 转信

判断使用姿式模型的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.setValue(0);
}else{
// make the agent in hello posture.
setAgentImage.setValue(1);
}
}
}
}
  接下来我们再和大家谈谈碰撞的问题,在VRML的场景中实体是默认为实心的,也就
是说场景中的实体在默认状态下是需要进行碰撞检测不能被穿透的。在结点指南中我们
和大家谈过是由Collision结点控制的,但是实际的情况中,并不是所有的实体都需要进
行碰撞检测的,就需要对Children字段进行设置,它决定了碰撞检测的开关,具体的设
置请大家看看结点指南,这里只和大家将一个方法。如果说场景中有一棵树,或者是更
为复杂的几何图形,如果它的某一部分需要进行碰撞检测,那么浏览器进行非常复杂的
碰撞检测将会大大的降低速度,同时设置也会很复杂。我们用一个简单的方法,将需要
进行碰撞检测的部分通过Collision结点的Proxy字段与一个简单的几何图形联系起来,
一旦用户与简单图形发生碰撞,那么原来需要进行碰撞检测的部分也跟着进行了碰撞检
测,用简单图形替代了复杂图形的碰撞检测。同时还需要注意一点,当发生碰撞时,Co
llision结点产生一个CollisionTime事件,通过这个事件触发程序可以调用其它的事件
。比如说场景中有一堵墙上面有"危房"二字,当用户与墙发生碰撞后,调用墙倒下的事
件。谈到这里碰撞的检测设定已经非常简单了,大家可以先设置两堵墙一堵可以穿过,
另一堵需要进行碰撞检测试试,至于复杂的场景这些都在于用户个自的设计了。
  在下一篇中,我们将和大家讨论最后一个构造场景的问题,当场景很大时,设置几
个点让用户可以在场景中进行跳越,用Viewpoint创造的如时空门的效果。接下来我们将
与大家讨论访问权限设置,多线程的运用以及拓展结构等问题。

--
美女说:“小妖,你很可爱丫...”
小妖刚要把那段“我已经尽可能的掩饰我的锋芒,奈何还是被慧眼人看出”云云背出来...
美女却扬长而去...>Q<

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.230.141]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.375毫秒