MCPcopy Create free account
hub / github.com/carbonengine/trinity / IntersectTri

Function IntersectTri

trinity/Resources/TriGeometryRes.cpp:1582–1630  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1580}
1581
1582static bool IntersectTri(
1583 const Vector3* p0,
1584 const Vector3* p1,
1585 const Vector3* p2,
1586 const Vector3* rayPos,
1587 const Vector3* rayDir,
1588 float* u,
1589 float* v,
1590 float* dist )
1591{
1592 Matrix m;
1593 Vector4 vec;
1594
1595 m.m[0][0] = p1->x - p0->x;
1596 m.m[1][0] = p2->x - p0->x;
1597 m.m[2][0] = -rayDir->x;
1598 m.m[3][0] = 0.0f;
1599 m.m[0][1] = p1->y - p0->y;
1600 m.m[1][1] = p2->y - p0->y;
1601 m.m[2][1] = -rayDir->y;
1602 m.m[3][1] = 0.0f;
1603 m.m[0][2] = p1->z - p0->z;
1604 m.m[1][2] = p2->z - p0->z;
1605 m.m[2][2] = -rayDir->z;
1606 m.m[3][2] = 0.0f;
1607 m.m[0][3] = 0.0f;
1608 m.m[1][3] = 0.0f;
1609 m.m[2][3] = 0.0f;
1610 m.m[3][3] = 1.0f;
1611
1612 vec.x = rayPos->x - p0->x;
1613 vec.y = rayPos->y - p0->y;
1614 vec.z = rayPos->z - p0->z;
1615 vec.w = 0.0f;
1616
1617 if( Inverse( m, m ) )
1618 {
1619 vec = Transform( vec, m );
1620 if( ( vec.x >= 0.0f ) && ( vec.y >= 0.0f ) && ( vec.x + vec.y <= 1.0f ) && ( vec.z >= 0.0f ) )
1621 {
1622 *u = vec.x;
1623 *v = vec.y;
1624 *dist = fabs( vec.z );
1625 return true;
1626 }
1627 }
1628
1629 return false;
1630}
1631
1632bool TriGeometryRes::GetIntersectionPoints( const Vector3* pos, const Vector3* dir, Vector3* hitpointNear, Vector3* hitpointNearNormal, Vector3* hitpointFar, Vector3* hitpointFarNormal, int* boneIndexNear, int* boneIndexFar, unsigned int areaIx )
1633{

Callers 1

GetIntersectionPointsMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected