之前对于游戏的物理 引擎挺感兴趣,但是碰撞算法得学习一下,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包围盒及其碰撞检测算法(一)相关推荐

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

    ❤️UNITY实战进阶-三维AABB包围盒详解-6_欲望如海水,越喝越渴.-CSDN博客前言 碰撞检测问题在虚拟现实.计算机辅助设计与制造.游戏.机器人等方面都有着广泛的应用,而包围盒算法是进行碰撞检 ...

  2. 基于cocos2d-x的2D空间中的OBB(Orient Bounding Box)碰撞检测算法

    引言 最近在与好友聊天的过程中,好友问我如何实现类似这样的游戏.它主要想知道,如何检测旋转过后的物体与其他物体之间的碰撞. 我们知道,在没有旋转的情况下,对于这样的方块,比较规则的物体,我们完全可以使 ...

  3. ROS(二)FCL碰撞检测算法实现过程

    碰撞检测是在特定时刻使用碰撞检测算法对两个刚体进行检测,判断当前位置是否可以运动. FCL 开源检测库提供了物体碰撞检测以及物体接近距离的计算[51]. FCL 能够检测 传统的三角平面和包括球体,方 ...

  4. 三维物体AABB碰撞检测算法

    1. AABB包围盒 在游戏中,为了简化物体之间的碰撞检测运算,通常会对物体创建一个规则的几何外形将其包围. 其中,AABB(axis-aligned bounding box)包围盒被称为轴对其包围 ...

  5. 计算机网络中 碰撞检测,虚拟现实中碰撞检测算法研究

    摘要: 碰撞检测主要用于判定虚拟环境中两个(或多个)物体是否相交,是虚拟现实.虚拟制造.机器人运动规划.计算机图形学.物理仿真.三维游戏等相关领域要解决的主要关键问题之一.随着计算机技术及计算机网络的 ...

  6. Java ME游戏开发中,碰撞检测算法在Java?ME中的实现(

    2019独角兽企业重金招聘Python工程师标准>>> 在Java ME游戏开发中,碰撞检测算法在Java?ME中的实现(百搜技术) 在Java ME游戏开发中,经常需要进行碰撞检测 ...

  7. java计算一个多边形的重心_2D凸多边形碰撞检测算法(二) - GJK(上)

    2D凸多边形碰撞检测算法(二) - GJK(上) 原理 在 Narrow Phase 精细碰撞检测中,除了 SAT ,另外一个就是 GJK(Gilbert–Johnson–Keerthi)算法.它足够 ...

  8. 【自动驾驶】碰撞检测算法

    参考链接: [自动驾驶]碰撞检测算法 - 知乎 [规划]Box2d::HasOverlap() 碰撞检测接口详解_lemon_zy的博客-CSDN博客_box2d碰撞检测 一个常用方法即为超平面分离定 ...

  9. 视锥体与AABB和OBB包围盒相交判断

    1.视锥体与AABB包围盒相交判断 template <class TYPE> class Frustum { public:Frustum(){}Frustum(const Frustu ...

最新文章

  1. mysql网络安装教程_详细教程--MySQL的安装与配置
  2. ast java_Java代码分析器(一): JDT入门
  3. [你必须知道的.NET]第二十三回:品味细节,深入.NET的类型构造器
  4. webapi自宿主设置本地端口使用https协议
  5. 栈的顺序存储及实现(二)
  6. 算法63----丑数【动态规划】
  7. python多线程写日志_python 多线程logger问题
  8. 测试方法——正交表法
  9. 2022_天勤数据结构高分笔记_第二章_算法
  10. ISO9001 质量管理体系认证
  11. 《机器人动力学与控制》第九章——动力学 9.4 欧拉-拉格朗日方程法应用举例(下)
  12. 学会Python开发的第一步:写一个桌面小程序
  13. 剧院在线选座票务系统
  14. 阿里云网络迁移引发公司服务器宕机的24小时吐血恢复纪实
  15. 谷歌浏览器里部分字体变模糊的问题。
  16. android获取摄像头焦距,并调焦
  17. 【Java入门杂记】【六】
  18. kirin710f是什么处理器_我告诉你麒麟710f相当骁龙什么处理器
  19. snap.py 教程
  20. 【HTCVR】VRTK插件案例分析之0031~037

热门文章

  1. Apache的Order Allow,Deny 配置详解
  2. qnx 设备驱动开发_QNX简介
  3. 定义char dog[]=wang\0miao;那么sizeof(dog)与strlen(dog)分别是多少:
  4. [FPGA] 1、Artix-7 35T Arty FPGA 评估套件学习
  5. GOTC 2023全球开源技术峰会
  6. 手把手教你用docker 搭建zoolkepper 和 dubbo 的测试环境
  7. 用户注册(request,get和post中文乱码)
  8. 内嵌资源html,go 1.16 embed 实现资源文件(html, css, js等)内嵌
  9. 京东微信购物性能优化,最佳实践总结!
  10. greenplum的用法