网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.在Spring程序中使用资源文件.
.J2ME综合:如何在MIDP中实现图片放.
.什么是Servlet以及Servlet的优越.
.SubFolders 属性.
.Java曝漏洞 应立即打补丁防被黑客.
.Ant+Junit+Log4J+CVS进行XP模式开.
.JavaApplet编程之实现显示图像.
.面向对象思想之 -- 限制对象属性.
.JAVA的XML编程.
.WebLogic6.0使用经验.
.Java语言编程中更新XML文档的常用.
.高手为你解读J2EE开发过程中的异.
.Java Socket编程之四.
.在solairs上运行linux上的二进制.
.Java的“对象思想”学习笔记[二].
.JAVA几个常见错误简析(下).
.Java访问Access的一般方法介绍.
.怎样学好JAVA的一些总结.
.Jakarta Struts学习之应用实践.
.在RCP中实现用托拽打开Editor.

虚拟现实之高级技巧(五)

发表日期:2008-1-5



  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创造的如时空门的效果。接下来我们将与大家讨论访问权限设置,多线程的运用以及拓展结构等问题。进入讨论组讨论。
上一篇:java api之算法 人气:902
下一篇:J2SE中的序列化的认识 人气:599
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐