我是新手,想请大家帮忙。最近看了一段代码这部分实在是看不懂了,这里是地图和鼠标的碰撞检测, 来请教大虾帮忙,代码如下,:
头文件中的内容
#ifndef AFX_CMATH_H
#define AFX_CMATH_H
#define INTERSECT_NEGATIVEY 0x10
#define INTERSECT_HORIZENTAL 0x30
//Summary:
//Description: 计算一个三角形和一个射线的交点
//Parameters:
// orig: 射线起始点
// dir: 射线的方向
// v0: 三角形的第一个顶点
// v1: 三角形的第二个顶点
// v2: 三角形的第三个顶点
// t: 交点到射线起始点的距离
// u: 交点在v1-v0上的投影的位置,
// v: 交点在v1-v0上的投影的位置, 交点为vRet=v0+u*(v1-v0)+v*(v2-v0)
//Returns: 是否有交点
BOOL IntersectTriangle( const D3DXVECTOR3& orig,
const D3DXVECTOR3& dir, const D3DXVECTOR3& v0,
const D3DXVECTOR3& v1, const D3DXVECTOR3& v2,
FLOAT* t, FLOAT* u, FLOAT* v );
//Summary: 求射线和网格的交点
//Description: 求射线和用顶点缓冲区和索引缓冲区定义的网格的交点
//Parameters:
// pIB: 索引缓冲区
// pVB: 顶点缓冲区
// nStide: 每个顶点的大小
// dwNumFaces: 面数
// vRayOrig: 射线起始点
// vRayDir: 射线的方向
// pVRet: 交点
//Returns: 是否有交点
BOOL IntersectIndexBuffer(LPDIRECT3DINDEXBUFFER9 pIB,
LPDIRECT3DVERTEXBUFFER9 pVB,
UINT nStride,UINT dwNumFaces,
const D3DVECTOR *vRayOrig,const D3DVECTOR *vRayDir,
D3DVECTOR *pVRet,DWORD dwFlag=0);
#endif
CPP中的内容:
#include <d3d9.h>
#include <d3dx9.h>
#include "CMath.h "
//Summary: 求射线和网格的交点
//Description: 求射线和用顶点缓冲区和索引缓冲区定义的网格的交点
//Parameters:
// pIB: 索引缓冲区
// pVB: 顶点缓冲区
// nStide: 每个顶点的大小
// dwNumFaces: 面数
// vRayOrig: 射线起始点
// vRayDir: 射线的方向
// pVRet: 交点
// dwFlag暂时不用
//Returns: 是否有交点
BOOL IntersectIndexBuffer(LPDIRECT3DINDEXBUFFER9 pIB,//实现碰撞检测 的全局函数(顶点缓冲)
LPDIRECT3DVERTEXBUFFER9 pVB,
UINT nStride,UINT dwNumFaces,
const D3DVECTOR *vRayOrig,const D3DVECTOR *vRayDir,D3DVECTOR *pVRet,DWORD dwFlag)
{
WORD* pIndices;
BYTE* pVertices;
D3DINDEXBUFFER_DESC IB_Desc;
FLOAT fBary1, fBary2,fDist=1e+32f;
FLOAT t_fBary1, t_fBary2,t_fDist;
DWORD dwFace=-1;
DWORD dwUpperLower;