写碰撞检测函数遇到问题,高分求解
主要使用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)就可以用来检测图多面体的碰撞,如果碰撞过于复杂,还是用物理引擎吧,效率高
[解决办法]
断点跟踪吧,看看不检测的情况是什么值,比如精度问题之类的。总是有办法的嘛。
[解决办法]
用刷子一样的工具刷上去的 然后在工具中 逻辑与渲染分开去处理
就可以达到这个效果 使用的时候不渲染 只做相关逻辑处理
[解决办法]