椭球体和顶点之间的碰撞检测。

对于某些比较特殊的模型,用包围盒碰撞得到的精确度会有些偏差,尤其是在对于人物背后的披风和人物模型发生碰撞的时候,用普通的包围盒碰撞会得到非常不协调的结果。

这个时候椭球体碰撞就显得尤其的重要,那么下面我们就来看看如何判断一个椭球体和一个顶点的碰撞。

首先我们需要的是一个数据结构来描叙一个椭球体:
vector3 midpoint;
vector3 radius;
vector3 direction;

只需要一个中点,一个方向,和一个描叙三条半径长度的向量就可以完整的在空间中描叙一个椭球体。然后我们判断的思想就是根据椭球体的方程(是椭圆,不是椭球)传入顶点的坐标,然后看方程的和是否小于1,小于1即在椭球体内。

具体的做法是:
D3DXMatrixTranslation(&mSource, source->x, source->y, source->z);
  D3DXMatrixTranslation(&mEllipsoid, -sCur.vMidpoint.x, -sCur.vMidpoint.y, -sCur.vMidpoint.z);
  D3DXMatrixMultiply(&mSource, &mSource, &mEllipsoid);
  XMatrixVecToVec(&mEllipsoid, &sCur.vDirection, &(D3DXVECTOR3(1,0,0)));
  D3DXMatrixMultiply(&mSource, &mSource, &mEllipsoid);
  float x = mSource._41;
  float y = mSource._42;
  float z = mSource._43;
  float a = sCur.vRadius.x;
  float b = sCur.vRadius.y;
  float c = sCur.vRadius.z;
  if(sqr(x) / sqr(a) + sqr(y) / sqr(b) + sqr(z) / sqr(c) < 1.0) return true;
其中XMatrixVecToVec的实现为首先算出两个向量之间的叉乘,得到一根垂线,然后绕那根垂线旋转他们点乘出来的角度,即可以得到将两个向量旋转到一起。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值