摘要: 最近调整碰撞检测,总结出以下:(1).球和棱碰撞,碰撞法向量不是与棱相接的两个平面的法向量的和的单位向量,而是碰撞点到球心的向量。法向量要先求出,然后才能算碰撞点,法向量可以通过表示棱的向量 和 棱上一点到球心向量 的向量三重积求出。球和点碰撞法向量好找,就是半径向量。即:面和棱、点碰撞,碰撞法向量为那个面在碰撞点的切平面的法向量(2)碰撞检测树可以改进成多种节点相结合的,让它们都实现一个接口IC... 阅读全文
posted @ 2007-07-13 23:54 Yuri 阅读(1373) 评论(0) 推荐(0) 编辑
摘要: 接触处理的本质是用冲量分离刺穿,而不是接触了就给个支持力。 由于碰撞检测使用的不是连续碰撞检测,所以检测到的时候总会已经发生一些刺穿,碰撞检测会检测出刺穿法向分量和切线分量,然后计算补偿冲量分离刺穿。 如果给个支持力,是没有道理的,碰撞处理给的冲量已经满全满足了它。 { 从式子上可以看出,比如质点和平面碰撞冲量:Pn=-(1+e)*Vrn*m,物体在平面上放着,每次积分后,物体会因重力造成Vrn=g*dt,代入即F=-(1+e)*mg, 取极端情况e=0或1, 最少e=0时,够提供支持力-mg, 如果e=1,物体会受到向上的合力-mg。假设我们的数值积分是理想的,和真的定积分一样,那么dt后,物体会在平面上0.5*g*dt*dt处。然后他又落下来,碰撞接触速度为g*dt,和前面Vrn一样,所以它会不断地这样下去。由于理想化了积分,即dt的d是真的d, :-),所以(0.5*g*dt*dt)→0,所以物体会不动。 现在面对现实,dt也就是个1~5毫秒,质点位置就会处于数值动态平衡中,应该基本看不出来。。。 阅读全文
posted @ 2007-07-09 23:30 Yuri 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 假设:你已经熟悉单点带摩擦冲量问题。  对于有多对碰撞点的碰撞处理工作如下。  首先,根据牛顿碰撞定律将每对碰撞点的碰后相对速度算出来 。然后碰撞冲量将会在一个迭代循环中计算出来。在第i次迭代时,对于每一组碰撞点,我们将测试碰前相对速度 是否已经达到了之前求出的相应的碰后相对速度 。如果是,我们就直接处理下一对碰撞点。否则就按老样子计算冲量 ,并且作用在刚体上。直到所有对碰撞点都不需要计算。另外,... 阅读全文
posted @ 2007-07-05 17:00 Yuri 阅读(1125) 评论(3) 推荐(0) 编辑
摘要: 后续安排:基本物体之间的碰撞检测&处理(柔体除外)完善接触处理BallJoint、StickJoint等刚体破碎 EDIT:弄了个更复杂的测试三角形数约:4300动摩擦系数=静摩擦系数=0.5恢复系数=0.5结论:最终碰撞 & 剪枝 仍需完善。尤其是最终碰撞——球和三角形的求交比较麻烦,我没考虑和边碰撞。由此造成:三角形数越多越好(减少没检测出的可能性),但也别太多。AABB更高效... 阅读全文
posted @ 2007-07-03 03:06 Yuri 阅读(534) 评论(0) 推荐(0) 编辑
摘要: 非标准物理重心,以前每次都是简化了模型,让物理重心和几何重心一样,这次一般化,物理重心由以下式子可算出演示视频中的小球的重心靠下(下方密度较大),所以它像个不倒翁一样晃…… 如果一开始产生的水平分速度再大点,那么小球就应该会一快一慢的滚动起来 ,然后滚出地面,掉下去。。 阅读全文
posted @ 2007-07-01 21:25 Yuri 阅读(430) 评论(0) 推荐(0) 编辑
摘要: 用鼠标选择网格上的三角形。主要步骤: 1. 每次渲染设置摄像机后,用gluUnProject得到拾取射线,然后和每个三角形所在平面求交。 2. 若拾取起点到交点的向量 和 拾取射线向量的数量积大于0(即三角形在观察者前方),则判断是点是否在三角形内。 3. 若在,则 这个三角形被选择。由于要不断求交,实际用的时候应该考虑粗略判断,以便减少求交次数。 代码如下(c#): namespace Ray... 阅读全文
posted @ 2007-06-17 23:57 Yuri 阅读(11432) 评论(1) 推荐(0) 编辑