All pastes #20900 Raw Edit

Unnamed

public text v1 · immutable
#20900 ·published 2005-08-23 20:13 UTC
rendered paste body
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;
			}
		}
	}
}