rendered paste bodyvoid CSphere::GetIntersection( CRay *ray, CReturnObject *returnedObject )
{
Vec3 direction = ray->GetDirection();
Vec3 origin = ray->GetOrigin();
// middelpunt van de bol
Vec3 center = m_Position;
Vec3 temp = origin - center;
double A = 1;
double B = (direction * temp) * 2;
double C = (temp * temp) - (m_radius * m_radius);
//cout << "B: " << B << endl;
//cout << "C: " << B << endl;
double D = (B*B) - 4*A*C;
double t;
//cout << "discriminant: " << D << endl;
if ( D > 0 )
{
// we bereken t0
t = ( -B - sqrt( D ) ) / 2.0;
//cout << "t = " << t << endl;
if ( t > 0 )
{
returnedObject->m_intersectionFound = true;
returnedObject->m_distance = t;
returnedObject->m_intersectionPoint = origin + ( direction * t );
returnedObject->m_normal = ( returnedObject->m_intersectionPoint - center ) * ( 1 / m_radius );
}
else
{
// we bereken t1
t = ( -B + sqrt( D ) ) / 2;
if( t > 0 )
{
returnedObject->m_intersectionFound = true;
returnedObject->m_distance = t;
returnedObject->m_intersectionPoint = origin + ( direction * t );
returnedObject->m_normal = ( returnedObject->m_intersectionPoint - center ) * ( 1 / m_radius );
}
else
{
returnedObject->m_intersectionFound = false;
}
}
}
}