OSG 碰撞检测 五个面的盒子_osg 多边体碰撞检测-程序员宅基地

技术标签: OSG  java  碰撞检测  三维可视化  开发语言  

一,需求

机器人仿真运动时,将物体放到盒子里,需要对盒子的面 进行检测。

二,效果

 三,实现

机器人整体与盒子的五个面求交集,盒子以一个Group 存在与场景中,这样便于移动。碰撞检测时,先获取盒子的包围盒,然后将包围盒裁剪成五个小包围盒 分别于机器人进行检测。

bool RobotWidgget::detectPlane(Model *model,osg::Node* node)
{
    bool collision=false;
    osg::ComputeBoundsVisitor boundvisitorBox ;
    node->accept(boundvisitorBox);
    for(int i=1;i<=5;i++){
        osg::BoundingBox bb2 =  boundvisitorBox.getBoundingBox();
        switch (i)
        {
        case 1:{
            bb2.set (bb2.xMin(), bb2.yMax()-2, bb2.zMin(),
                     bb2.xMax(), bb2.yMax(), bb2.zMax());
            break;
        }
        case 2:{
            bb2.set (bb2.xMin(), bb2.yMin(), bb2.zMin(),
                     bb2.xMax(), bb2.yMin()+2, bb2.zMax());
            break;
        }
        case 3:
        {
            bb2.set (bb2.xMax()-2, bb2.yMin(), bb2.zMin(),
                     bb2.xMax(), bb2.yMax(), bb2.zMax());
            break;
        }
        case 4:{
            bb2.set (bb2.xMin(), bb2.yMin(), bb2.zMin(),
                     bb2.xMin()+2, bb2.yMax(), bb2.zMax());
            break;
        }
        case 5:{
            bb2.set (bb2.xMin(), bb2.yMin(), bb2.zMin(),
                     bb2.xMax(), bb2.yMax(), bb2.zMin()+2);
            break;
        }
        default:{
        }
        }

        osg::Polytope poly;
        poly.setToBoundingBox(bb2);
        osgUtil::PolytopeIntersector* pI =new osgUtil::PolytopeIntersector(poly);
        osgUtil::IntersectionVisitor iv(pI);
        robotGroup->accept(iv);
        if (pI->containsIntersections())
        {
            model->setCollision(true);
            qWarning()<<QStringLiteral("检测到发生碰撞");
            collision=true;
            break;
        }else{
            model->setCollision(false);
            collision=false;
        }
    }
    return collision;
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_38416696/article/details/126645988

智能推荐

java后台利用POI将excle转换成html实现在线预览_javaexcel转html-程序员宅基地

文章浏览阅读6.6k次。 前一阵项目有office系列文件在线预览需求,所以查询了一些资料,参考其他一些博客,实现了通过POI将excle转化为html,后来需求被砍掉,没有继续深入研究,这里将查询到的一些资料做一个记录. 首先实现office系列文件在线预览主要查到有如下解决方案:1.flash 的flexpaper 将文档转换为swf格式,然后使用flash在网页中浏览 2.使用开源的软件openoffice+p..._javaexcel转html

html热点 位置不低,热点图 页面缩放不改变位置-程序员宅基地

文章浏览阅读281次。文章时间:2019年5月29日 23:42:02解决问题:热点图 随着页面的缩放比例而不改变其所在的位置推荐画图工具:Adobe Dreamweaver CC头部我们需要3个东西,请直接复制即可直接复制这段代码然后用设计模式画图就行了。任意地方加这段js代码。$("img[usemap]").each(function () {var img = $(this);var newImg = new ..._h5地图热点放大缩小如何不跑偏

maven打包报错_error locating assembly descriptor: src/main/assem-程序员宅基地

文章浏览阅读2k次。项目场景:maven打包报错:Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.4:single (make-assembly) on project hiveudf2: Error reading assemblies: Error locating assembly descriptor: assembly.xml问题描述:项目上执行目标org.apache.maven.plugins:maven-as_error locating assembly descriptor: src/main/assembly/assembly.xml

Chrome开发者工具使用教程-主要功能简介(一)_谷歌后台调测执行sql-程序员宅基地

文章浏览阅读1.4k次。Chrome开发者工具是谷歌浏览器自带的一款开发者工具,它可以给开发者带来很大的便利。主要作用有:快速定位问题查看站点页面加载信息在线页面样式调整前端代码调试前端日志分析浏览器存储查看在线性能分析等…1.如何调出开发者工具按F12键CTRL+SHIFT+I 或在页面上右键,点击“检查”按钮,如下图:2.面板功能简介元素(Elements):用于查看或修改H..._谷歌后台调测执行sql

C语言文件指针偏移的使用(点阵字库txt文件取字)_c语言指针偏移-程序员宅基地

文章浏览阅读3.5k次。从点阵字库txt取字,指向文件内容位置的文件指针是唯一的,无法多个副本分别定位(无法一个文件使用多个指针),这与传统上内存中的指针不同。_c语言指针偏移

Oracle Partition 分区详细总结_partition by range-程序员宅基地

文章浏览阅读651次。此文从以下几个方面来整理关于分区表的概念及操作: 1.表空间及分区表的概念 2.表分区的具体作用 3.表分区的优缺点 4.表分区的几种类型及操作方法 5.对表分区的维护性操作.(1.) 表空间及分区表的概念表空间: 是一个或多个数据文件的集合,所有的数据对象都存放在指定的表_partition by range

随便推点

transform,translation和animation-程序员宅基地

文章浏览阅读587次。css3在原来的基础上增加了变形和动画相关的属性,动画三兄弟:transform、transition和animation,通过使用这三个属性可以达到很炫酷的效果。需要注意的是这三个属性都是css3新增的属性,各大浏览器支持方面还不是特别好,使用时要特别注意浏览器的兼容性。Transform浏览器支持情况:Internet Explorer 10、Firefox、Opera_translation和animation

[redis] SpringBoot整合SpringDataRedis配置文件_spring boot 192.168.110.130-程序员宅基地

文章浏览阅读1.7k次。SpringBoot整合SpringDataRedis pom文件添加依赖 全局配置文件 配置类pom文件添加依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis<..._spring boot 192.168.110.130

JAVA安卓4.4.4,Could not find support-v4.jar (com.android.support:support-v4:24.0.0)-程序员宅基地

文章浏览阅读318次。Error:A problem occurred configuring project ':app'.Could not find support-v4.jar (com.android.support:support-v4:24.0.0). Searched in the following locations: https://jcenter.bintray.com/com/android/..._supportv4.jar

OpenLayers Map理解-程序员宅基地

文章浏览阅读165次。OpenLayers Map理解 1,视口坐标的原点在左上角,水平向右为x轴正向,垂直向下为y 轴正向;2,地图坐标原点为初始图层的中心点,水平向右为x轴正向,垂直向上为y轴正向;3,视口中心点永远与地图中心点重合,不一定与瓦片中心点重合;4,拖动图层的逻辑描述:地..._openlayer this.map.getsize()

vue运用 vue-qr 生成二维码-程序员宅基地

文章浏览阅读5.4k次,点赞4次,收藏18次。第一步,先安装 vue-qr 插件npm install vue-qr --save第二步,在想要生成vueQr 的Vue页面引入组件import vueQr from 'vue-qr'第三步,在components中引入VueQr组件components: { VueQr }最后就在在html上引用<VueQr :margin='8' :size='280' :whiteMargin="true" :logoMargin="3" :logoCornerRadius_vue-qr

各品牌电脑PE中找不到硬盘的解决方法/bios设置_联想ideapad710s进pe找不到硬盘-程序员宅基地

文章浏览阅读1.3w次。  大部分小伙伴遇到系统坏了之后,都会自己用U盘装系统,但是在u盘装系统过程中却容易遇到问题,特别是PE中找不到硬盘的情况,大家遇到这种情况该怎么解决呢,所以今天跟着快启动小编的脚步一起来详细了解一二吧。  首先,我们要了解硬盘的两种模式,一种是比较新的SATA模式,现在的新电脑大多采用此模式,而另一种则是比较旧的PATA模式,而这两种模式都需要配置驱动程序,但它们的驱动程序是不一样的。  然而,..._联想ideapad710s进pe找不到硬盘

推荐文章

热门文章

相关标签