Box2D-Lite源码阅读笔记(9)

  • 简介
    到这里就是碰撞检测的最后一个阶段,在前面已经获取了粗略位置点的时候,这里要获取精确的碰撞点。
  • 碰撞点筛选
    目前位置,待定的碰撞点已经处于A的宽度范围内了,但是是否与A碰撞,或者是否在A内还需要判断。
int numContacts = 0;
	for (int i = 0; i < 2; ++i)
	{
		//计算出相交深度
		float separation = Dot(frontNormal, clipPoints2[i].v) - front;
		//深度小于等于0的点说明点相交在了矩形内部
		if (separation <= 0)
		{
			//收集碰撞点信息
			contacts[numContacts].separation = separation;
			contacts[numContacts].normal = normal;
			// slide contact point onto reference face (easy to cull)
			//原始的点的位置减去反向移动方向上的距离
			contacts[numContacts].position = clipPoints2[i].v - separation * frontNormal;
			contacts[numContacts].feature = clipPoints2[i].fp;
			if (axis == FACE_B_X || axis == FACE_B_Y)
				Flip(contacts[numContacts].feature);
			++numContacts;
		}
	}

在这里插入图片描述
点a和b是上一篇获得的效果,这里主要就是区分出a和b谁是实际碰撞点,很明显a在形状内部,a是碰撞点,然后根据最短分离距离,调整a的位置,最后如下。
在这里插入图片描述
最终a为确定好的碰撞点,然后下一步就是调整矩形位置,退回到刚好相交的那个位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值