Graphics 版 (精华区)

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

由于没有使用Java前,场景中的运动是已经预定好了的,这里我们就举一个问题随机运
动的例子。
VRML V2.0 utf8
DEF AGENT_TIME TimeSensor {
loop TRUE
cycleInterval 0.1
}
DEF AGENT_Transform {
children [
Inline{url"移动物体.wrl"}
]
}
DEF AGENT_SCRIPT script{
url"FloatingAgent.class"
eventIn SFTime interval
eventOut SFVec3f setAgentPosition
}
ROUTE AGENT_TIME.cycleTime TO AGENT_SCRIPT.interval
ROUTE AGENT_SCRIPT.setAgentPosition TO AGENT.set_translation
Java程序代码如下:
import java.util.*;
import vrml.*;
import vrml.node.*;
import vrml.filed.*;
pubilc class FloatingAgent extends Script{
SFVec3f setAgentPosition;
float agentPosition[]=new Random();
public void initialize(){
setAgentPoisition=(SFVec3f)getEventOut("setAgentPosition");
AgentPosition[0]=0.0f;
AgentPosition[1]=0.0f;
AgentPosition[2]=0.0f;
}
public void processEvent(Event e){
if(e.getName().equals("interval")==true){
moveAgent();
}
}
float generateRadomFloat(){
return(randomNumGenerator.nextFloat()*0.2f-0.1f);
}
void moveAgent(){
agentPosition[0]+=generateRandomFloat();
agentPosition[1]+=generateRandomFloat();
agentPosition[2]+=generateRandomFloat();
setAgentPosition.setValue(agentPosition);
}
}
  现在我们来分析一下这个场景,我们首先有一个随机运动的物体,包括在移动物体
.wrl文件中,我们在场景中从这个文件中调用物体,这样运动就与物体无关。在场景的
VRML文件中,一个TimeSensor每隔0.1秒就收发可以agent_script的Script结点,由于开
始和结束的时间都默认为0,且循环为真,所以计数器就可以不间断的运行,每隔一秒就
产生一个包括当前时间的cycleTime值,被发送到Script结点中,相关的Java程序使用这
一事件去随机移动包括代表物体几何图形的Transform结点,使物体最终产生随机的运动
。接下来我们在看看Java程序是怎样工作的。在event-handler类,我们使用了intiali
ze()方法,产生一个Script结点的setAgentPosition字段,我们通过计算这个字段,用
来接收代理的新位置。在ProcessEvent()方法中,调用了moveAgent(),它产生-0.1到0
.1随机数的generateRandomFloat。这个随机数用Java.util包括的RandomNumGenerator
类产生。
  在这个例子中,使用Java程序实现了用VRML描述无法实现的功能,其实我们只是给
出了Java与TimeSensor的一个很简单的例子,其实还有旋转,我们也是在event-handle
r类中实现,使用SetRouingParameters的方法,决定旋转轴同时可以建立定向注释。非
连续一次性动作,比如说我们可以定义TimeSensor的loop字段为假,CycleInterval字段
为5秒,这样传感器被激活时只在一个周期有效,如此等等。请大家注意的一个地方,在
实际场景的设计中,往往许多可以通过使用VRML描述的变化行为,我们却往往使用Java
程序,有人认为这时却用程序的方法是画蛇添足,其实道理行简单,Java程序是独立于
物体存在的,编写一次可以被不同的物体运用。
  这一篇中,我们主要讨论了TimeSensor结点的情况,如果说TouchSensor与Java程序
结合产生了互动,那么TimeSensor与Java程序结合就产生了互动的结果。在下一篇中,
我们将和大家讨论通过Sound和AudioClip结点产生随机点唱,以及如何确定用户在场景
中的位置等。
7上一页  1 2  8

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

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