OBB包围盒及其碰撞检测算法(一)

点云库PCL学习:提取最小包围盒(AABB、OBB) 提取最小包围盒(AABB、OBB)最小包围盒介绍AABB、OBB包围盒的提取提取结果 最小包围盒介绍 包围盒也叫外接最小矩形,是一种求解离散点集最优包围空间的算法,基本思想是用体积稍大且特性简单的几何体(称为包围盒)来近似地代替复杂的几何对象。 常见的包围盒算法有AABB包围盒、包围球、方向包围盒OBB以及固定方向凸包FDH。碰撞检测问题在虚拟现实、计算机辅助设计与制造、游戏及机器人等领域有着广泛... 阅读详情
AI摘要

本文介绍了游戏开发中用于碰撞检测的OBB包围盒生成原理及步骤,对比AABB包围盒,详细解释了如何利用点集的协方差矩阵求解特征向量,进而确定OBB坐标轴方向。

之前对于游戏的物理 引擎挺感兴趣,但是碰撞算法得学习一下,AABB就不说了,给点思路基本都能做出来,但是OBB就不一样了,涉及到了一些数学知识,其实涉及到图形方面的时候,线性代数就会常用一些,虽然这个OBB病没有涉及到图形的变换,但是也用到了线性代数的东西。

如果不懂AABB和OBB是什么的话我在这里简单说一下,玩游戏的时候,游戏中的元素会发生碰撞,有的时候元素的形状不是很规则,如果直接对不规则元素进行彭专检测更麻烦并且效率低下,所以就有了一个近似的算法,就是在物体外侧加上包围盒,什么叫包围盒,如图。


蓝色部分是不规则物体,外面的一圈方框就是包围盒,将整个物体近似看成一个矩形,这样虽然不精确,但是计算速度快,游戏基本都会用这样检测的办法,这样能让游戏运行的快,我们并不希望一个很小的游戏也要很高的配置来运行。包围盒也分好多种,这里主要介绍OBB,但是为了知道什么OBB,我要用AABB来对比一下

这个是OBB包围盒


这个是AABB包围盒


我们不难发现这两种包围盒的区别AABB的包围盒不会旋转,当物体旋转的时候,空白空间被纳入包围盒的面积更大了,这样就导致不准了。

AABB包围盒的生成也 比较容易,下面我们来看一下OBB包围盒是如何生成的,

先弄一些点,生成包围盒也就是将一些点都圈在一个方框内,有这个几个点

A(2,6) B(3,2) C(4,4) D(6,3) E(7,5);
根据这几个点做包围盒,原则就是包围盒尽可能的贴近所有点,要是AABB就好做了,去上下左右最大最小的坐标生成一个矩形就可以。但是OBB就不一样了,这里涉及到了一个叫做协方差矩阵的东西。
协方差这个词我的印象是在概率论里面听过的,协方差是什么,我说不太准确,我理解大概意思就是,有两组或者多组数据,当要比较这些数据的相关性时,发现数据的维数过多(维数就是数据项),导致比较起来困难,这时有了协方差,通过计算每组之间的协方差,这就有了一个比较参数,如果协方差是0,那就说明数据之间无关,如果不为0就是相关。大概就是这个意思,而我们计算OBB包围盒,就是要先求出这些点组成矩形的中心点,利用协方差矩阵来求,协方差矩阵大概就是这些点在一起组成相关性后的一个相关性的矩阵,个人这么理解的。这些点会有个共同的趋向。协方差矩阵就是来度量各个维度偏离其均值的程度.比如计算一个人的食量和性格开朗之间有什么关系。

这个公式来计算协方差。

这是成立 关系
协方差矩阵如下。

计算协方差矩阵不是什么问题,重要的是,我们要对角化矩阵,求出特征向量和特征值,利用特征向量来得出OBB的坐标轴

求出了坐标轴,根据已知点就可以求出OBB坐标轴中心坐标,和矩形的长宽,之后就可以确定OBB包围盒了。

这个是之前那几个点在坐标系里的分布,我们要在这里根据这些点画出OBB包围盒。这些点就相当于一个不规则形状内所包含所有的点。
先求出这些点的协方差矩阵


就是这个矩阵。这只是一个协方差矩阵,我们还要得到它的特征值和特征向量。如果手工算的话,比较好说了,要用电脑程序算,你可以用MATLAB来算,我用MATLAB得出的结果

但是我们也不能就这么直接拿MATLAB算,本着造轮子的想法就需要我们动手自己写一个函数在算。计算用的算法就是雅克比计算矩阵特征向量算法,先贴一个运行效果图,下一篇讲一下这个算法。

上面的矩阵是特征,下面的是特征向量,matlab的d是特征向量,v是特征值
OBB-最小外接矩形包围框-原理-代码实现 定义:OBB是相对于物体方向对齐的包围盒,不再局限于坐标轴对齐,因此包围点云时更加紧密。优点:能够更好地贴合物体形状,减少空白区域。缺点:计算较为复杂,需要计算物体的主方向,进行旋转和缩放变换。 阅读详情

相关推荐

Cocos2d-x 3.x 图形学渲染系列四

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,优快云社区专家,特邀编辑,畅销书作者,国家专利发明人,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社 和《Unity3D实战核心技术详解》电子工业出版社等书籍 包围盒是一个简单的立体几何空间,它里面可包含着复杂形状的物体。给物体添加包围体的目的是快速的进行碰撞检测,如果读者使用过Unity3D引擎,该引擎一共分为以下几种碰撞体:

海洋个人博客 3436

OBB盒构建方法

OBB包围盒生成与碰撞检测

weixin_61464913的博客 2634

OSG创建并显示模型的OBB包围盒和AABB包围盒

包围盒在碰撞检测等方面有着非常重要的应用,网上关于OBB包围盒的介绍很多,介绍的很好的一篇文章为https://blog.youkuaiyun.com/qing101hua/article/details/53100112这篇,想了解原理的话可以仔细看一看这篇文章。 最近在科研的过程中,碰到了求解模型的OOB包围盒的问题,因为自己使用的是OSG平台,所以就去网上找,发现基本没有能用的,就自己在GitHub上...

MeteorChenBo的博客 5667

OBB碰撞检测算法

1 OBB包围盒 OBB(Oriented Bounding Box)包围盒也被称作有向包围盒或定向包围盒,它会随着物体的移动、缩放、旋转。简单来说,它就是一个能够旋转的AABB包围盒。在Cocos2d-x中使用过物理引擎的开发者一定见过当我们在物理世界中创建一个物体并开启调试模式时,这个物体会被红色的矩形包围,当物体做平移或旋转时,这个红色矩形也会做同样的操作,这个红色矩形正是该物体的OBB包

计算机技术交流 1万+

点云包围盒AABB/OBB的生成

本篇文章主要讲pcl中如何生成点云AABB包围盒, 参考的文章pcl官网教程:http://pointclouds.org/documentation/tutorials/moment_of_inertia.php#moment-of-inertia 教程中提供了两种包围盒的生成方法: 一种是直接利用addcube进行生成立方体; 另外一种是获取每个角点的坐标,利用addLine进行划线。...

qq_42570058的博客 8517

算法与游戏之OBB碰撞算法

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,优快云社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。 包围盒是一个简单的立体几何空间,它里面可包含着复杂形状的物体。给物体添加包围体的目的是快速的进行碰撞检测,如果读者使用过Unity3D引擎,该引擎一共分为以下几种碰撞体:球状碰撞体

海洋个人博客 1万+

Bounds(包围盒)详解-【AABB包围盒、Sphere包围球、OBB方向包围盒、FDH固定方向凸包】

====================================================|| 欢迎讨论技术的可以相互加微信:windgs (请备注csdn+xx职业) ====================================================|| 目录 目录 欢迎讨论技术的可以相互加微信:windgs (请备注csdn...

随意的风的专栏 3万+

三维包围盒碰撞检测算法-Python(OBB-SAT)

想实现一个检测三维包围盒是否发生碰撞的功能,因为目标是任意方向的三维包围盒,即没有和坐标轴对齐的旋转包围盒,所以考虑采用检测OBB碰撞的SAT算法,但找了很久没找到现成的python代码,就比着别人写的C++版的自己写了python的版本。 1.原理 参考该博客 2.代码实现 import numpy as np class OBB: def __init__(self,point_set:np.ndarray): self.pos=(point_set[0]+point_set[

王小石的博客 3566

碰撞检测之 AABB 包围盒

1.包围盒描述 包围盒算法是一种求解离散点集最优包围空间的方法。 基本思想是用体积稍大且特性简单的几何体(称为包围盒)来近似地代替复杂的几何对象。 最常见的包围盒算法有AABB包围盒(Axis-aligned bounding box),包围球(Sphere),方向包围盒OBB(Oriented bounding box) 以及固定方向凸包FDH(Fixed directions hulls或k-DOP)。 2、AABB包围盒 AABB 包围盒就是采用一个长方体将物体包裹起来,进行两个物体的相交性检测时仅检

weixin_43022263的博客 2万+

基于Open3D的点云处理9-包围盒AABB、OBB

基于Open3D的点云处理-包围盒AABB、OBB

zfjBIT的专栏 2384

【ros】ROS1的安装和相关使用方法

主要学习ros相关内容

Greary的博客 2379

OBB方向包围盒算法实现

如何进行2D旋转矩形的碰撞检测,可以使用一种叫OBB的检测算法(Oriented bounding box)方向包围盒。这个算法是基于SAT(Separating Axis Theorem)分离轴定律的。而OBB不仅仅是计算矩形的碰撞检测,而是一种算法模型。简单解释一下概念,包围盒和分离轴定律。 包围盒:是根据物体的集合形状,来决定盒子的大小和方向,这样可以选择最紧凑的盒子来代表物体。见下图 ...

qq_36812406的博客 1万+

[AHK] 自动化获取通达信股票代码:从消息钩子到数据提取

本文详细介绍了如何使用AHK(AutoHotkey)通过Windows消息钩子技术自动化获取通达信股票代码,实现高效数据提取和交易自动化。文章涵盖消息机制原理、AHK脚本开发、性能优化及安全注意事项,为股票交易者提供了一套完整的解决方案。

weixin_42614269的博客 617

轴对齐包围盒(AABB)和有向包围盒(OBB)介绍

在三维建模中的包围盒:轴对称包围盒和有向包围盒的介绍

qq_45855825的博客 8081

汉字跨越三千年的生命力与数字时代适应性

文字作为文明载体,其演变规律始终遵循实用性与适应性的平衡。汉字作为现存最古老的文字系统,凭借形义结合的六书构造原理,实现了超方言的文化统一功能。在计算机处理方面,五笔输入法与Unicode支持证明了其技术兼容性,而视觉识别效率的先天优势使其在信息时代更具传播效力。从甲骨文识别AI到现代书法设计,汉字系统持续展现强大的文化承载力与技术适应性,这种活态传承为数字人文研究提供了独特样本。

weixin_29058331的博客 355

【数据结构】面试题整理 共36题

链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针。与数组不同,链表中的元素在内存中不必是连续存储的,这使得链表在插入和删除操作时非常高效。单向链表(Singly Linked List):每个节点只包含一个指向下一个节点的指针。双向链表(Doubly Linked List):每个节点包含两个指针,一个指向下一个节点,一个指向前一个节点。循环链表(Circular Linked List):链表的最后一个节点指向第一个节点,形成一个环。

weixin_44329069的博客 7198

113 Three.js的obb (OrientedboundingBox)方向包围盒的使用

一、包围盒简介: 包围盒是一个简单的几何空间,里面包含着复杂形状的物体。为物体添加包围体的目的是快速的进行碰撞检测或者进行精确的碰撞检测之前进行过滤(即当包围体碰撞,才进行精确碰撞检测和处理)。包围体类型包括球体、轴对齐包围盒(AABB)、有向包围盒(OBB)、8-DOP以及凸壳。 包围盒广泛地应用于碰撞检测,比如射击、点击、相撞等,每一个物体都有自己的包围盒。因为包围盒一般为规则物体,因此用它来代替物体本身进行计算,会比直接用物体本身更加高效和简单。 目前广泛应用的是AABB和OBB包围盒,其中AA

现在学习也不晚 7184

halcon C++编程 第4讲 HObject/HImage Mat相互转换(tcy)

网上有很多相互转换程序,但并不知那个正确,本文对相互转换后的结果和原对象比较是否相同判断转换是否正确。经测试ok.本文包括转换代码及测试是否相同。 1.转换程序: /************************************ HObject转为Mat:time:2021/3/16 V1.0 *************************************/ cv::Mat HalconClass::HObjectToMat(const HalconCpp::HObject&..

tcy-阿春 4933

OBB方向包围盒碰撞检测算法(原理与代码)

原理:OBB间的相交测试基于分离轴理论(separating axis test)。若两个OBB在一条轴线上(不一定是坐标轴)上的投影不重叠,则这条轴称为分离轴。若一对OBB间存在一条分离轴,则可以判定这两个OBB不相交。对任何两个不相交的凸三维多面体,其分离轴要么垂直于任何一个多面体的某一个面,要么同时垂直于每个多面体的某一条边。因此,对一对OBB,只需测试15条可能是分离轴的轴(每个OBB的3个面方向再加上每个OBB的3个边方面的两两组合),只要找到一条这样的分离轴,就可以判定这两个OBB是不相交的,如

前路漫漫的博客 8174

Arduino MLX90393磁力计驱动库:高精度三轴霍尔传感器开发指南

三轴霍尔效应磁力计是嵌入式系统中实现无接触角度检测、电子罗盘与电流传感的核心器件。其工作原理基于霍尔电压随外磁场矢量变化的物理特性,通过I²C接口输出高分辨率(16/20-bit)XYZ轴原始数据,并集成温度补偿与数字滤波功能。技术价值体现在确定性响应、低功耗(典型0.5 μA待机)及强抗干扰能力,适用于电池供电设备与实时操作系统环境。典型应用场景包括电机位置反馈、永磁体旋转角度解算、工业编码器和地磁导航。本库专为Arduino生态优化,深度封装MLX90393寄存器协议与自校准流程,同时兼容STM32、E

weixin_29363791的博客 642

cmu15445(2024fall) project 2

project 2比p1难度要更大,代码量更大且涉及的知识更多,实现中出现的bug更多,好在是最后全部解决了。我最大的收获在于对于多线程编程的理解更深入了,实际发现解决了多个多线程相关的bug,学会了更多多线程下debug的技巧方法,也见识了更多多线程的bug情况。在之后可以更系统的学习一下多线程编程。同时学会实现B+树也是需要掌握的基础。

Jerome_Yi的博客 1559

【unity知识】unity使用AABB(轴对齐包围盒)和OBB(定向包围盒)优化碰撞检测

本文探讨了Unity游戏开发中的两种碰撞检测包围盒技术:AABB(轴对齐包围盒)和OBB(有向包围盒)。AABB作为基础技术,具有计算简单、性能高效的特点,通过Unity内置的Bounds结构体实现,但不考虑物体旋转。OBB则更精确,能随物体旋转/缩放变化,采用分离轴定理(SAT)进行相交检测,需自定义实现。文章详细介绍了两种包围盒的数学表示、Unity实现方案,并提供了具体代码示例,为开发者选择适合的碰撞检测方案提供了技术参考。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1810

海洋CMS admin_notify.php 远程代码执行漏洞复现(CVE-2024-30565)

海洋CMS admin_notify.php 接口处存在远程代码执行漏洞,经过身份验证的远程攻击者可利用该漏洞执行任意代码,写入后门文件,进而控制整个web服务器。

0xSec 2714

Cocos2d-x教程(34)-三维物体OBB碰撞检测算法

Cocos2d-x 3.3beta0 使用OBB包围盒碰撞检测。

Cocos2d-x,IOS,游戏,开发/交流/学习/资源 马宗扬 8954

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Unity内实现OBB包围盒算法

前言 作为碰撞盒的检测,OBB是一个常用的办法。网上有很多文章是介绍原理的,具体可以查一下。 以下给出OBB的Unity实现版本。亲测可跑。 参考 :www.tuicool.com/articles/IN… 效果 实现 基础:对象拥有BoxCollider控件(用作包围盒)和MeshRenderer控件(模型) 步骤:1.更新BoxCollider 2.更新AABB 更新BoxCollide...

weixin_33861800的博客 3504

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

❤️UNITY实战进阶-OBB包围盒详解-6

❤️UNITY实战进阶-三维AABB包围盒详解-6_欲望如海水,越喝越渴。-优快云博客前言 碰撞检测问题在虚拟现实、计算机辅助设计与制造、游戏、机器人等方面都有着广泛的应用,而包围盒算法是进行碰撞检测的重要方法之一。 而常见的包围盒有:AABB包围盒(Axis-aligned bounding box)包围球(Sphere)OBB包围盒(Oriented bounding box)凸包包围盒(Convex Hull)...在Unity中的Collider包含:介绍在游戏中,为了简化物体之间的碰...htt

欲望如海水,越喝越渴。 4200

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 动态规划初步认识之二
下一篇: 杭电OJ---1002
ARTELE
博客等级 码龄12年 148粉丝 149原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值