碰撞检测
文章平均质量分 52
KenneySH
网络游戏
展开
-
射线
在欧几里德几何中,射线的定义如下:直线上一点和它一旁的部分,由此知射线有两个性质:1. 有一个端点2. 一端无线延伸参数方程p(t) = p0 + tup0 是射线的起点, u是射线的方向向量,t∈[0,∞)原创 2016-03-19 12:01:51 · 324 阅读 · 0 评论 -
圆与圆
判断圆与圆之间圆心的距离大于半径之和:不相交等于半径之和:相切小于半径之和:相交原创 2016-03-19 16:38:23 · 352 阅读 · 0 评论 -
射线与长方体
1 Ray-AABB交叉检测算法1.求射线与长方体6个面的距离,确定距离最小的三个面计算射线在这三个面上的交点。从距离最小的交点开始判定是否在AABB盒里2 COCOS3.3 Ray-AABB实现Ray-AABB碰撞检测进行求出射线后,需要做的便是与包围盒的碰撞检测了,如之前的代码所示,在做碰撞检测时,Cocos2d-x 3.3beta0中的Ray类里面为我们提供了原创 2016-03-19 12:35:40 · 1472 阅读 · 0 评论 -
OBB碰撞检测算法
1 OBB包围盒OBB(Oriented Bounding Box)包围盒也被称作有向包围盒或定向包围盒,它会随着物体的移动、缩放、旋转。简单来说,它就是一个能够旋转的AABB包围盒。在Cocos2d-x中使用过物理引擎的开发者一定见过当我们在物理世界中创建一个物体并开启调试模式时,这个物体会被红色的矩形包围,当物体做平移或旋转时,这个红色矩形也会做同样的操作,这个红色矩形正是该物体的OBB包转载 2016-03-19 12:31:59 · 16145 阅读 · 0 评论 -
AABB(axis-aligned bounding box)
AABB包围盒在游戏中,为了简化物体之间的碰撞检测运算,通常会对物体创建一个规则的几何外形将其包围。其中,AABB(axis-aligned bounding box)包围盒被称为轴对其包围盒。 二维场景中的AABB包围盒具备特点:(注:由于Cocos2d-x是基于Opengl ES的,所以下图中的所有坐标系均采用右手直角坐标系) (1) 表现形式为四边形,即用四边形包围物转载 2016-03-19 12:26:16 · 19522 阅读 · 0 评论 -
Box2D射线和AABB碰撞检测
box2d使用了一种叫做slab的碰撞检测算法。所谓slab是指两个平行平面之间的空间,由此我们可以把3D空间中的AABB盒子看做是由AABB的3组平行面形成的3个方向的slab的交集。根据这个定义,我们可以得到以下两个结论:1.如果一个点在AABB中,那么这个点必定同时在这3个slab中。2.如果一条射线和AABB相交,那么这条射线和3个slab的相交部分必定有重合部分。这很容易理解转载 2016-03-19 12:20:33 · 1512 阅读 · 0 评论 -
射线与球
1射线与球是否相交1.计算圆心到直线的投影点,判断是否在射线上。不在射线上则不相交2.计算圆心到直线的距离,大于半径不相交,等于半径相交1点,小于半径相交2点 2射线与球的交点1.球的方程(x-x0)^2 + (y-y0)^2 + (z-z0)^2 = R^2 其中(x0,y0,z0)为圆心R为半径2. (x-x0)/m = (y-y0)/n = (z-z0)/p = t原创 2016-03-19 12:18:49 · 674 阅读 · 0 评论 -
射线与三角面
1一种思路是先求射线与平面的交点,然后计算交点是否落在三角面内2利用三角形方程求射线与三角面的交点Ray-Triangle交叉检测算法射线的参数方程如下,其中O是射线的起点,D是射线的方向。我们可以这样理解射线,一个点从起点O开始,沿着方向D移动任意长度,得到终点R,根据t值的不同,得到的R值也不同,所有这些不同的R值便构成了整条射线,比如下面的射线,起点是P0,方向是u,p0 +原创 2016-03-19 12:05:35 · 2566 阅读 · 0 评论 -
射线与平面
射线若于平面相交,则交点一定在平面上,设交点为p,那么p一定同时满足射线的方程和平面的方程,于是 p(t) = p0 + tu //这里的p0是射线的起点 u为射线向量 n•(p - p1) = 0 //这里的p1是平面所过的点 n为平面法线 然后将射线方程代入平面方程 n•(p0 + tu – p1) = 0 整理后得到 t = (n•p1 –原创 2016-03-19 12:04:25 · 740 阅读 · 0 评论 -
点到直线平面距离
1平面点到直线距离点(x0,y0),直线:A*x + B*y + c = 0,距离d。d=|A*x0 + B*y0 + c|/ sqrt(A*A + B*B) 2空间点到平面距离点(x0,y0,z0),平面:A*x + B*y + C*z + D = 0,距离d。d=|A*x0 + B*y0 + C*z0 + D|/sqrt(A*A + B*B + C*C) 3空间原创 2016-03-19 12:03:50 · 1673 阅读 · 0 评论 -
平面
一个平面可以由平面上的一点p0 和平面的法向量n来确定(过一点,有且只有一个平面与已知直线垂直),如下图参数方程平面是由无穷多个点组成的,对于过点p0 且法向量为n的平面来说,其上任意一点p满足如下方程n•(p - p0) = 0解释一下, 符号“•”表示dot product(点积),因n与平面垂直,所以n与平面内任意直线垂直,而p - p0则是平面内的一个向量,所以n与p原创 2016-03-19 12:02:59 · 311 阅读 · 0 评论 -
快速教程:在2D空间中使用四叉树实现碰撞检测
翻译自:http://gamedevelopment.tutsplus.com/tutorials/quick-tip-use-quadtrees-to-detect-likely-collisions-in-2d-space--gamedev-374Quick Tip: Use Quadtrees to Detect Likely Collisions in 2D Space翻译 2016-03-14 16:33:54 · 2514 阅读 · 0 评论