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

本文深入探讨了碰撞检测后的碰撞点及最小碰撞深度计算方法,包括如何选取最佳碰撞轴、计算碰撞深度及其方向,以及根据碰撞轴计算碰撞边和位置的具体步骤。

0.简介

上一篇介绍了碰撞检测部分,这次阅读后面的碰撞点计算和最小碰撞深度计算的代码。

1.获取碰撞点和碰撞深度

碰撞后要计算出碰撞点,因为在计算运动方向,转动惯量等数据的时候需要碰撞点信息,碰撞深度是为了分离两个物体用的信息,因为物体碰撞时刻,不能正好点边接触,两个物体可能会有一些交叉,这个交叉导致碰撞点会落在形状内部,而不是边界,并且两个物体分离,运动状态信息也需要这个交叉深度来进行各种视觉效果上的平衡。

	// Find best axis
	Axis axis;//选定的轴
	float separation;//最小分离距离
	Vec2 normal;//正面的方向

	//2.找最大相交的轴方向和深度

	axis = FACE_A_X;//记录轴,这里是A的x轴方向的轴
	//最小分离距离,分离距离的方向是从四个分离轴方向中选的
	separation = faceA.x;
	//如果在A的坐标系下,中心连线的x大于0,说明物体B在A的右边,那么
	//就以A的x轴正方向为normal,这里了的normal在后面被认为是A矩形的"前面"
	//其中RotA.col1就是矩形A坐标系的x轴正方向
	normal = dA.x > 0.0f ? RotA.col1 : -RotA.col1;
	//这里是两个系数,Tol我猜是tolerance,翻译为容忍
	const float relativeTol = 0.95f;//相对95%
	const float absoluteTol = 0.01f;//绝对1%
	//faceA和faceB里存储的就是四个分离轴方向的相交深度
	//在没有上面两个参数的时候,直接就与separation进行比较,
	//此时就是谁大选谁,有faceA与faceB来源可知,值是负数的时候才有效,
	//所以选择更大的,就是更接近与0的负数,那么其绝对值表达是就是
	//两个形状的镶嵌的深度。if判断里的式子暂时不知为何这么写,估计是个经验表达式
	if (faceA.y > relativeTol * separation + absoluteTol * hA.y)
	{
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值