0.简介

球的碰撞处理,之前想着会比较简单,但是实际上比想象的难一些。

1.球与球的碰撞

之所这么分类,所以因为球和球的碰撞比较特殊,目前暂时不考虑摩擦力的情况,球与球碰撞产生的碰撞交点是一定过两个球心的连线的,这样球就一定会因为碰撞产生位移。球的正碰是特殊情况,这里我们直接考虑球与球的斜碰,斜碰就是两个球碰撞时候,碰撞交点不在速度方向上。

关于斜碰后速度的变化可以看如下文章作为参考。

斜碰

我在这里也简要说明一下。

两个球碰撞,(上球为球A,下球为球B)

假设一个球A以速度V运动,与另一个静止的球B碰撞,此时将速度根据两个圆心方向和对应垂直方向分解,得到V1和V2,V2就是与另一个球B进行动量守恒计算的速度,加入计算完毕后,V2方向在碰撞后的速度是V3,V1+V3则是A球最终的运动结果,同理球B也这样计算,最终求得两个球的运动速度。具体还可以看上面的链接,斜碰。

2.实现

class CollideInfo
{
public:CollideInfo() {}CollideInfo(Obj_Forces*_A, Obj_Forces*_B,float _deep,vec3 _cPoint):A(_A),B(_B),deep(_deep), cPoint(_cPoint) {}Obj_Forces* A;Obj_Forces* B;float deep;//相交最短距离vec3 cPoint;//碰撞点//生成力void generate(){//没有碰撞就不计算if (A == nullptr || B == nullptr)return;//以下生成的都是碰撞产生的力//两个物体都存在说明产生碰撞力if (A != nullptr && B != nullptr){vec3 vecA = normalize(A->obj->position - cPoint);vec3 vecB = normalize(B->obj->position - cPoint);//碰撞点在两个型心连线上if (dot(vecA, vecB) < 0.0001){float speedA = length(A->obj->velocity);float speedB = length(B->obj->velocity);float cosa = dot(vecA, normalize(A->obj->velocity));float cosb = dot(vecB, normalize(B->obj->velocity));if (speedA == 0)cosa = 1;if (speedB == 0)cosb = 1;//两个物体的速度分解,碰撞点到连心线上的分解vec3 rA = momentumCalc(A->obj->mass, B->obj->mass, speedA * cosa*vecA, speedB * cosb*vecB);vec3 rB = momentumCalc(B->obj->mass, A->obj->mass, speedB * cosb*vecB, speedA * cosa*vecA);vec3 AC = vecA * speedA * cosa;vec3 BC = vecB * speedB * cosb;vec3 AR = A->obj->velocity - AC;vec3 BR = B->obj->velocity - BC;AC = rA;BC = rB;A->obj->velocity = AC + AR;B->obj->velocity = BC + BR;}//受力计算vec3 force(0,0,0);for (auto fa : A->forces){force += fa->getForce();}A->addForce(new Elastic(-force,COLLIDEFORCE));force = vec3(0, 0, 0);for (auto fb : B->forces){force += fb->getForce();}B->addForce(new Elastic(-force, COLLIDEFORCE));}}vec3 momentumCalc(float mA, float mB, vec3 vA, vec3 vB){return ((mA-mB)*vA+2.0f*mB*vB)/(mA+mB);}~CollideInfo() {}
};

这里确实废了不小力气(找资料时间比较久),不过还好可以实现,后续再优化计算过程。当然,之前的直线与球碰撞代码就删除了,因为考虑的情况比较少,只是暂时测试碰撞信息处理模块用的。

3.效果

一些碰撞效果

碰撞效果

4.代码

release0.04

物理引擎探究(9)---球碰撞处理相关推荐

  1. 物理引擎探究(10)---球碰撞旋转

    0.简介 上次一我实现了球碰撞后的运动轨迹计算,这回要实现球的旋转. 1.角动量 我觉得这里应该用到角动量了,当球与球碰撞之后,球自身会因为碰撞点有摩擦力,导致球旋转的,主要就是来求这个旋转的速度,这 ...

  2. Unity --- 物理引擎 ---- 刚体RigidBody 与 碰撞器 collider

    1.RigidBody(刚体)的作用是让物体具有物理特性(比如说重力,摩檫力等等) 2.如果想让物体能够与其它物体发生碰撞的话,我们还需要一个组件 --- Colider碰撞器组件 1.上图就是Uni ...

  3. 物理引擎探究(8)---碰撞处理

    0.简介 碰撞处理就是将碰撞得到的信息进行处理后生成各种作用力,这个也算是一个单独的模块. 1.碰撞生成信息 根据碰撞的的结果,来判断产生力的大小,方向,种类等信息,然后将力作用在物体上,目前我实现了 ...

  4. unity3D游戏开发十一之物理引擎

    Unity内置了NVIDIA的Physx物理引擎,Physx是目前使用最为广泛的物理引擎,被很多游戏大作所采用,开发者可以通过物理引擎高效.逼真地模拟刚体碰撞.车辆驾驶.布料.重力等物理效果,使游戏画 ...

  5. 一篇上手LayaAir的3D物理引擎

    昨天,我们分享了一篇2D物理文档<LayaAirIDE的可视化2D物理使用文档>. 今天,我们针对LayaAir引擎的初学者,以及对物理引擎使用不熟悉的开发者,再来分享一篇3D物理文档,本 ...

  6. BEPU物理引擎碰撞系统的架构与设计

    前面我们讲解了如何监听物理引擎的碰撞事件, 在物理引擎内核中如何架构与设计碰撞规则,使得物理Entity与周围的物理环境产生碰撞时,如何灵活的控制物理碰撞,本节給大家详细的讲解BEPUphysicsi ...

  7. 【Unity3D入门教程】物理引擎之碰撞解析

    Unity3D内置物理引擎,可以模拟物理效果.典型的一个物理效果就是碰撞.本文将会针对最简单的案例讲述Unity3D的碰撞规律. 1 碰撞规律 首先在场景中创建一个Sphere和一个Cube,它们都是 ...

  8. 基于JBox2D物理引擎开发的“雷电”小游戏(五)——碰撞

    不好意思,隔了这么久才发这一篇文章,虽然部分原因是最近因为实习的事情很忙,还有一部分原因是比较懒,废话不多说,现在开始正文. 碰撞 既然学到了这里,想必大家都明白,物理引擎会帮我们做很多事情,省去从零 ...

  9. 【Unity 3D】学习笔记三十六:物理引擎——刚体

    物理引擎就是游戏中模拟真是的物理效果.如两个物体发生碰撞,物体自由落体等.在unity中使用的是NVIDIA的physX,它渲染的游戏画面很逼真. 刚体 刚体是一个很很中要的组件. 默认情况下,新创的 ...

最新文章

  1. 使用按钮控制HTML5背景音乐开关
  2. C++/C++11中std::runtime_error的使用
  3. 定位域中长期不活动计算机
  4. 背景-需要-需求规格
  5. 计算机vfp考试题库二级,XYZ计算机等级考试题库系统(二级VFP)
  6. 关于最近打的几题斜率优化的总结。加几AC代码。
  7. 数据库SQL语言分类(DDL/DML/DQL/TCL/DCL)
  8. 2019.03.25 bzoj4572: [Scoi2016]围棋(轮廓线dp)
  9. 服务器给文件权限命令,chmod命令详细用法设置文件的权限
  10. Jackson2 json 转换Bean, Bean 里没有对应的值 jackson Un的解决方式
  11. Atiitt 图像处理的常见功能业务用途与类库与功能实现 目录 1. 常见业务场景 3 1.1. 缩略图 蒙版遮罩挖空 3 1.2. 区域裁剪,水印,旋转 3 1.3. 判断图像大小分辨率要求
  12. Java连接数据库(JDBC编程六步)
  13. java实现socket.io客户端功能
  14. 未完成:读书笔记01芝加哥大学论文写作指南_Kate L. Turabian
  15. 各项异性扩散滤波 -- OpenCV实现
  16. 记录:使用DJANGO从0开始搭建微信公众平台(0)
  17. bind dlz mysql ptr_bind-dlz结合mysql实现智能DNS
  18. 计算机的储存器包括内存储器和外存储器,内存储器和外存储器的分类与区别
  19. Uni-app中几种常用的提示框
  20. 基于Javaweb的小项目(类似于qqzone) 2 ——服务端连接数据库并实现CRUD的通用操作

热门文章

  1. win10 C盘居然一夜间满了,清理C盘过大
  2. 非暴力沟通--日常沟通的技巧与实践
  3. 移动端1px 图片
  4. 数字化精准会员营销 助消费品连锁企业提升转化
  5. 手机导航精度小于1米,北斗高精度定位技术想象力不止于此
  6. java最新版下载地址
  7. Java编写的简易计算器
  8. 【图像处理】图像拼接原理介绍
  9. C# 小工具开源分享之本机IP修改器
  10. 北大青鸟汉字注释机内码_消防维修北大青鸟消防主机汉字注释如何书写?