void 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; } } } }