一个判断射线和三角形相交的函数
生活随笔
收集整理的這篇文章主要介紹了
一个判断射线和三角形相交的函数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Code
?1?//-----------------------------------------------
?2?//-----------檢測(cè)三角形和射線的相交性---------
?3?bool?CDirectXApp::Intersect(const?D3DXVECTOR3&?v0,?const?D3DXVECTOR3&?v1,?const?D3DXVECTOR3&?v2,
?4????????????????const?D3DXVECTOR3&?orgin,?const?D3DXVECTOR3&?vec,?float&?u,?float&?v,?float&?t)
?5?{
?6?????//判斷是否為三角形并且方向向量
?7?????assert(vec?!=?D3DXVECTOR3(0,0,0)?&&
?8?????????v0??!=?v1?&&?v1?!=?v2?&&?v0?!=?v2);
?9?????D3DXVECTOR3?m?=?v0?-?v2;
10?????D3DXVECTOR3?n?=?v1?-?v2;
11?????D3DXVECTOR3?negativeVec??=?-vec;
12?????D3DXVECTOR3?tempVec;
13?????D3DXVec3Cross(&tempVec,?&n,?&negativeVec);
14?????//det?為克萊姆法則求未知數(shù)的分母
15?????float?det?=?D3DXVec3Dot(&tempVec,?&m);
16?
17?????if?(det?<?1e-6f)
18?????{
19?????????return?false;
20?????}
21?
22?????D3DXVECTOR3?VtoOrigin?=?orgin?-?v2;
23?????float?uB?=?D3DXVec3Dot(&tempVec,?&VtoOrigin);
24?????u?=?uB?/?det;
25?????if?(u<0?||?u>1?)
26?????{
27?????????return?false;
28?????}
29?
30?????D3DXVec3Cross(&tempVec,?&VtoOrigin,?&negativeVec);
31?????float?vB?=?D3DXVec3Dot(&m,?&tempVec);
32?????v?=?vB?/?det;
33?????if?(v<0?||?u+v>1)
34?????{
35?????????return?false;
36?????}
37?
38?????D3DXVec3Cross(&tempVec,?&n,?&VtoOrigin);
39?????float?tB?=?D3DXVec3Dot(&m,?&tempVec);
40?????t?=?tB?/?det;
41?????return?true;
?1?//-----------------------------------------------
?2?//-----------檢測(cè)三角形和射線的相交性---------
?3?bool?CDirectXApp::Intersect(const?D3DXVECTOR3&?v0,?const?D3DXVECTOR3&?v1,?const?D3DXVECTOR3&?v2,
?4????????????????const?D3DXVECTOR3&?orgin,?const?D3DXVECTOR3&?vec,?float&?u,?float&?v,?float&?t)
?5?{
?6?????//判斷是否為三角形并且方向向量
?7?????assert(vec?!=?D3DXVECTOR3(0,0,0)?&&
?8?????????v0??!=?v1?&&?v1?!=?v2?&&?v0?!=?v2);
?9?????D3DXVECTOR3?m?=?v0?-?v2;
10?????D3DXVECTOR3?n?=?v1?-?v2;
11?????D3DXVECTOR3?negativeVec??=?-vec;
12?????D3DXVECTOR3?tempVec;
13?????D3DXVec3Cross(&tempVec,?&n,?&negativeVec);
14?????//det?為克萊姆法則求未知數(shù)的分母
15?????float?det?=?D3DXVec3Dot(&tempVec,?&m);
16?
17?????if?(det?<?1e-6f)
18?????{
19?????????return?false;
20?????}
21?
22?????D3DXVECTOR3?VtoOrigin?=?orgin?-?v2;
23?????float?uB?=?D3DXVec3Dot(&tempVec,?&VtoOrigin);
24?????u?=?uB?/?det;
25?????if?(u<0?||?u>1?)
26?????{
27?????????return?false;
28?????}
29?
30?????D3DXVec3Cross(&tempVec,?&VtoOrigin,?&negativeVec);
31?????float?vB?=?D3DXVec3Dot(&m,?&tempVec);
32?????v?=?vB?/?det;
33?????if?(v<0?||?u+v>1)
34?????{
35?????????return?false;
36?????}
37?
38?????D3DXVec3Cross(&tempVec,?&n,?&VtoOrigin);
39?????float?tB?=?D3DXVec3Dot(&m,?&tempVec);
40?????t?=?tB?/?det;
41?????return?true;
轉(zhuǎn)載于:https://www.cnblogs.com/ttthink/archive/2009/09/23/1572936.html
總結(jié)
以上是生活随笔為你收集整理的一个判断射线和三角形相交的函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows MObile中ListV
- 下一篇: 飞鸽传书找不到其他人的问题