|
发表于 2007-9-30 17:55:00
|
显示全部楼层
Re:DX中有没有函数能判断两个三角面是否相交
下面是我写的射线与空间三角形相交的代码,效率还算挺高的:
bool RayHitTriangle( D3DXVECTOR3 org,D3DXVECTOR3 dir,D3DXVECTOR3 v0,D3DXVECTOR3 v1,D3DXVECTOR3 v2 )
{
D3DXVECTOR3 e1,e2,p,s,q;
float u,v,tmp;
e1 = v1 - v0;
e2 = v2 - v0;
D3DXVec3Cross( &p,&dir,&e2 );
tmp = D3DXVec3Dot( &p,&e1 );
tmp = 1.0f / tmp;
s = org - v0;
u = tmp * D3DXVec3Dot( &s,&p );
if( u < 0.0f || u > 1.0f )
{
return false;
}
D3DXVec3Cross( &q,&s,&e1 );
v = tmp * D3DXVec3Dot( &dir,&q );
if( v < 0.0f || v > 1.0f )
{
return false;
}
float w = 1 - u - v;
if( w < 0.0f || w > 1.0f )
{
return false;
}
return true;
} |
|