52 lines
1.2 KiB
HLSL
52 lines
1.2 KiB
HLSL
#ifndef COLLISIONMETHODS_HLSL
|
|
#define COLLISIONMETHODS_HLSL
|
|
|
|
struct Sphere
|
|
{
|
|
float3 center;
|
|
float radius;
|
|
};
|
|
|
|
struct Plane
|
|
{
|
|
float3 normal;
|
|
float phasing;
|
|
};
|
|
|
|
struct Frustrum
|
|
{
|
|
Plane leftPlane, rightPlane, bottomPlane, topPlane, nearPlane, farPlane;
|
|
};
|
|
|
|
bool intersects( uniform Frustrum f, uniform Sphere s )
|
|
{
|
|
float connectOffset;
|
|
|
|
connectOffset = dot( f.leftPlane.normal, s.center );
|
|
connectOffset += f.leftPlane.phasing;
|
|
if( connectOffset < -s.radius ) return false;
|
|
|
|
connectOffset = dot( f.rightPlane.normal, s.center );
|
|
connectOffset += f.rightPlane.phasing;
|
|
if( connectOffset < -s.radius ) return false;
|
|
|
|
connectOffset = dot( f.bottomPlane.normal, s.center );
|
|
connectOffset += f.bottomPlane.phasing;
|
|
if( connectOffset < -s.radius ) return false;
|
|
|
|
connectOffset = dot( f.topPlane.normal, s.center );
|
|
connectOffset += f.topPlane.phasing;
|
|
if( connectOffset < -s.radius ) return false;
|
|
|
|
connectOffset = dot( f.nearPlane.normal, s.center );
|
|
connectOffset += f.nearPlane.phasing;
|
|
if( connectOffset < -s.radius ) return false;
|
|
|
|
connectOffset = dot( f.farPlane.normal, s.center );
|
|
connectOffset += f.farPlane.phasing;
|
|
if( connectOffset < -s.radius ) return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
#endif |