Box2D中切割刚体效果的实现一览(二)



我们继续来实现切割效果。

我们现在有了切割线和多边形,可以利用Box2d的射线投射(RayCast)来检测切割线和多边形的交点(入射点)。在Box2d中通过定义b2RayCastCallback的子类来获取射线投射的结果,关于Box2d中的射线投射的使用,可以参考Box2Dv2.3.0 用户指南(第十章)

我们创建b2RayCastCallback的子类MyRayCastCallback,声明如下:

#import"Box2D.h"

 

classMyRayCastCallback : public b2RayCastCallback {

public:

   NSMutableArray* results;

   NSMutableArray* endResults;

   BOOL resultFlag;

   

   MyRayCastCallback();

   

   float32 ReportFixture(b2Fixture *fixture, const b2Vec2 &point, const b2Vec2&normal, float32 fraction);

   

   void ClearResults();

   void ResetFlag();

};

成员中定义了两个数组成员,results和endResults,原因是Box2d中射线投射得到的是线段射入多边形的第一个入射点,而实际上我们需要两个切点,因此我们的思路是做两次射线投射,第一次从lineStartSave到lineEndSave,第二次相反。从而得到两组入射点,分别记录在results和endResults两个数组中。

resultFlag用来区分两次投射。方法ResetFlag用于反置resultFlagClearResults方法用来清空投射结果。ReportFixture方法用来记录投射结果。

接着我们定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值