box2d 碰撞检测_Box2d新系列 第四章 碰撞模块

本文深入探讨Box2D碰撞模块,包括形状类型如圆形、多边形、边缘形状和链形状的详细说明,以及碰撞检测、距离计算、撞击时间和动态树的概念。了解如何使用Box2D进行高效、精确的碰撞处理。
摘要由CSDN通过智能技术生成

注:此文章翻译自Box2D v2.2.0用户手册,仅供学习参考。

4.1  关于

碰撞模块包括了形状以及操作形状的方法。模块也包括了动态树(dynamic tree)和broad-phase算法来提高大系统碰撞检测的速度。

碰撞模块的设计独立于动力学系统之外。例如,你可以在游戏中除了物理系统之外的其他方面单独使用动态树(dynamic tree)。

4.2  形状

形状描述了碰撞几何体,在物理模拟中可独立使用,你可以对形状进行多种操作。

b2Shape作为Box2D形状的基类,定义了如下方法:

判断一个点是否与形状重叠

向形状投射一条射线

计算形状的AABB

计算形状的质量属性

另外,每一个形状有一个类型成员和对应的半径。半径甚至会应用于多边形中,下面还将会对此进行讨论。

4.3  圆形(Circle Shapes)

圆形有坐标点和半径。

圆形是实心的。你不能够创建一个空心的圆形。即便如此,你还可以使用多边形形状来创建线段链。

b2CircleShape circle;

circle.m_p.Set(2.0f, 3.0f);

circle.m_radius = 0.5f;

4.4  多边形(Polygon Shapes)

多边形形状是实心凸多边形。所谓一个多边形为凸多边形,即多边形上所有线段中任意两个顶点间的连线都与此多边形的边无交点。多边形实心的,永远都不会是空心。一个多边形至少需要由3个或更多顶点组成。

你必须按照逆时针(counter clockwise winding,CCW)的方向创建一个多边形。对于这一点我们需要小心,逆时针是相对于右手坐标系统而言的,其中z轴指向平面外面。在你的屏幕上可能是顺时针方向,这取决于你的坐标系统是如何约定的。

虽然多边形的成员变量的访问权限是public,但是你仍然需要使用相应的初始化方法来创建一个多边形。初始化方法会创建法向量并验证其合法性。

你可以通过一个顶点数组来创建多边形。数组的最大值被b2_maxPolygonVertices所控制,它的默认值是8,这足以描述大多数凸多边形。

//This defines a triangle in CCW order.

b2Vec2 vertices[3];

vertices[0].Set(0.0f, 0.0);

vertices[1].Set(1.0f, 0.0f);

vertices[2].Set(0.0f, 1.0f);

int32 count = 3;

b2PolygonShape polygon;

polygon.Set(vertices, count);

多边形有一些定义好的创建盒子(boxes)的初始化方法。

void SetAsBox(float32 hx, float32 hy);

void SetAsBox(float32 hx, float32 hy, const v2Vec2& center, float32 angle);

多边形从b2Shape继承了半径。半径围绕多边形创建了一个外壳(skin)。在多边形重叠的情况下,外壳可以保持多边形之间短距离分离。这使得

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值