java 3d 碰撞_JAVA3D在虚拟切削和碰撞检测中的应用

作为一种虚拟建模语言,JAVA3D是一个应用程序接口(API),用来书写带有三维图形的应用程序和Applet。它将JAVA“一次书写,随处运行”的优点带给了三维图形程序,使得JAVA3D能运行于多种平台。另外,采用JAVA3D编写的应用程序和Applet可以访问所有的JAVA类,使它易于与Internet集成。综合以上的优点,JAVA3D在虚拟制造中得到广泛的应用。但是在基于JAVA3D的仿真系统中对运动的物体进行碰撞检测时,视角对检测的结果影响很大,如果视角不合适会产生误判;此外误差很大,当被检测物体之间还有很大距离时系统就会认为发生了碰撞,不能满足系统精确碰撞检测的要求。精确的碰撞检测对于提高虚拟仿真系统的拟真度、增强虚拟环境的沉浸感有着至关重要的作用,而虚拟环境自身的复杂性和实时性也对碰撞检测提出了更高的要求,因此,碰撞检测成为虚拟仿真研究中的一个热点问题。针对JAVA3D碰撞检测算法的不足,本文在它的两个碰撞检测类WakeupOnCollisionEntry和WakeupOnCollisionExit[1,2]的基础上,提出了基于多视角的动态八叉树碰撞检测算法,消除了视角对碰撞检测的影响,避免误判,减小了误差,实现了精确的碰撞检测。1JAVA3D的碰撞检测算法及其存在的误差碰撞检测问题是确定不同的物体在空间是否占有相同区域的问题。同时碰撞检测问题不应仅归结为一般的求交问题,针对不同的应用对象,碰撞检测问题涉及到检测方法的复杂性、检测算法的可靠性和效率等,不同的检测算法具有不同的特点和面向不同的应用对象[3]。下面介绍JAVA3D的碰撞检测算法及其存在的误差。JAVA3D提供了两个碰撞检测类WakeupOnCollisionEntry和WakeupOnCollisionExit,这两个类在构造的时候要求提供被检测的范围(类Bounds的子类)或三维对象(类Node的子类)。当场景图中的任何对象与被检测的对象(或范围)发生碰撞时,Wake-upOnCollisionEntry就会被唤醒(Wakeup),当碰撞解除时WakeupOnCollisionExit就会被唤醒。所以把它们作为唤醒条件加入到Behavior类中,就可以在Be-havior类的processStimulus过程中处理碰撞发生后或解除后要做的控制。据此,设计了一个碰撞检测的试验,使用时将检测对象传给构造函数,但是试验结果不理想,当两个物体之间还有一定距离实际上并没有发生碰撞时,JAVA3D的碰撞检测算法认为已经发生碰撞。经过研究发现,JAVA3D为了简化碰撞检测的计算量,在默认的情况下用简单的几何形体(如球或立方体)来代替被检测对象,这样就会将被检测物体的检测范围放大,出现检测范围已经发生碰撞,但被检测物体并没有碰撞的情况。通过试验发现,JAVA3D在进行碰撞检测时视角的选取对检测结果有很大的影响。对于运动的物体,如果视角选择不当,尽管实际上没有发生碰撞,可是从视点看过去如果被检测物体重叠在一起系统也会误认为发生了碰撞,从而产生误判。此外,从不同视角对相同的物体进行碰撞检测时产生的误差值相差也很大。表1列出了JAVA3D的碰撞检测算法分别从45等轴测、11.5等轴测和正前方三个视角检测立方体和刀具碰撞时的误差情况,被检测立方体的边长从200mm减小到5mm,试验中刀具立方体的边长为10mm。表中a表示被检测立方体的边长,单位为mm;p表示误差,即算法认为发生碰撞时两个立方体之间的实际距离,单位为mm;v表示相对误差,即误差与被检测立方体边长的比值。从此表可以看出,在JAVA3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值