首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

写碰撞检测函数遇到有关问题,高分求解

2012-02-06 
写碰撞检测函数遇到问题,高分求解主要使用D3DX提供的D3DXIntersect函数。CheckIntersection(ID3DXMesh * pM

写碰撞检测函数遇到问题,高分求解
主要使用D3DX提供的D3DXIntersect函数。
CheckIntersection(ID3DXMesh * pMesh, float XStart, float YStart, float ZStart, float XEnd, float YEnd, float ZEnd, float *Length)
{
  // 计算开始点与结束点的差
  XDiff = XEnd - XStart;
  YDiff = YEnd - YStart;
  ZDiff = ZEnd - ZStart;
  // 计算方向矢量
  D3DXVec3Normalize(&vecDir, &D3DXVECTOR3(XDiff, YDiff, ZDiff));// 将指定向量归一化
  // 执行相交检测
  D3DXIntersect(pMesh,// 进行相交检测的网络模型
&D3DXVECTOR3(XStart,YStart,ZStart),// 射线原点(射线的出发点)
&vecDir,// 射线的方向
&Hit,// 当检测到相交图元时,指向一个true,不与任何图元相交则为false
&FaceIndex, // 记录所有相交三角形中距离射线出发点最近的三角形面的索引
&u, &v,
&Dist,
NULL, // 用于返回所有相交三角形的相关信息
NULL); // 返回相交三角形的数量
   
  if (Hit == True)
  {
  // ………………
  }
}
大致上是这样写,但奇怪对于一些模型却无法实现碰撞……不知各位的碰撞检测函数是如何实现的?

[解决办法]
没有过D3D,只用OGL,不过思路应该是一样的,楼主可以检查一下这些模型的包围盒是否正确。
对于碰撞检测,建议楼主使用一些物理引擎,例如ODE、PhyX等,这些引擎的功能更加强大,使用也很方便,免去了自己开发的复杂过程
[解决办法]
楼主确定参数没错?例如世界矩阵、物体矩阵间的转换
[解决办法]
如果简单的立方体碰撞、球的碰撞都可以自己实现,那个分离轴定理(Separate-Axis theorem)就可以用来检测图多面体的碰撞,如果碰撞过于复杂,还是用物理引擎吧,效率高
[解决办法]
断点跟踪吧,看看不检测的情况是什么值,比如精度问题之类的。总是有办法的嘛。
[解决办法]
用刷子一样的工具刷上去的 然后在工具中 逻辑与渲染分开去处理
就可以达到这个效果 使用的时候不渲染 只做相关逻辑处理
[解决办法]

探讨
如果简单的立方体碰撞、球的碰撞都可以自己实现,那个分离轴定理(Separate-Axis theorem)就可以用来检测图多面体的碰撞,如果碰撞过于复杂,还是用物理引擎吧,效率高

[解决办法]
汗,那个刷子,这类阻挡都是没够高度概念的,做室外场景还能用 - -!

热点排行