随笔分类 - Physics
My Physics Engine
摘要:http://yuri.cnblogs.com/ 貌似Tri-Mesh之间的CD好像不是很容易实现(尤其是三角形求交),而且时间也不多了,就这样,从头总结一下。另外放个演示程序,由于Tri-Mesh之间的CD未完成,没法放入那些物体,所以只有球和静态物体:纯属无聊摆的……演示里没有用broad-phase碰撞检测(因为以后打算加上GraphicEngine的场景树),直接...
阅读全文
摘要:最近调整碰撞检测,总结出以下:(1).球和棱碰撞,碰撞法向量不是与棱相接的两个平面的法向量的和的单位向量,而是碰撞点到球心的向量。法向量要先求出,然后才能算碰撞点,法向量可以通过表示棱的向量 和 棱上一点到球心向量 的向量三重积求出。球和点碰撞法向量好找,就是半径向量。即:面和棱、点碰撞,碰撞法向量为那个面在碰撞点的切平面的法向量(2)碰撞检测树可以改进成多种节点相结合的,让它们都实现一个接口IC...
阅读全文
摘要:接触处理的本质是用冲量分离刺穿,而不是接触了就给个支持力。
由于碰撞检测使用的不是连续碰撞检测,所以检测到的时候总会已经发生一些刺穿,碰撞检测会检测出刺穿法向分量和切线分量,然后计算补偿冲量分离刺穿。
如果给个支持力,是没有道理的,碰撞处理给的冲量已经满全满足了它。
{
从式子上可以看出,比如质点和平面碰撞冲量: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毫秒,质点位置就会处于数值动态平衡中,应该基本看不出来。。。
阅读全文
摘要:后续安排:基本物体之间的碰撞检测&处理(柔体除外)完善接触处理BallJoint、StickJoint等刚体破碎 EDIT:弄了个更复杂的测试三角形数约:4300动摩擦系数=静摩擦系数=0.5恢复系数=0.5结论:最终碰撞 & 剪枝 仍需完善。尤其是最终碰撞——球和三角形的求交比较麻烦,我没考虑和边碰撞。由此造成:三角形数越多越好(减少没检测出的可能性),但也别太多。AABB更高效...
阅读全文
摘要:无万向锁,旋转绝对自由。就是不好控制 BTW:这是渲染引擎部件之一。CCamera可以用于设置RenderTarget,而CViewerCamera则是给用户3D漫游用的 public class CCamera { Matrix4x4 mViewMatrix, mProjMatrix; protected Vector mPosition; pro...
阅读全文
摘要:非标准物理重心,以前每次都是简化了模型,让物理重心和几何重心一样,这次一般化,物理重心由以下式子可算出演示视频中的小球的重心靠下(下方密度较大),所以它像个不倒翁一样晃…… 如果一开始产生的水平分速度再大点,那么小球就应该会一快一慢的滚动起来 ,然后滚出地面,掉下去。。
阅读全文
浙公网安备 33010602011771号