Ночной странник
Сообщения: 4050
Благодарности: 83
|
Профиль
|
Сайт
|
Отправить PM
| Цитировать
это понятно, это самое простое.
Если кому интересно то вот реализация:
int Plane::Intersect( Ray& ray, double& t)
{
double vd = n&ray.Dir;
if(vd > -EPS && vd < EPS)
return 0;
t = - (( n&ray.Org ) + D )/vd;
return t > GeomThreshold;
}
Соответственно для сферы:
int Sphere::Intersect( Ray& ray, double& t)
{
Vector l = Loc - ray.Org;
double L2OC = l&l;
double tca = l&ray.Dir;
double t2hc = Radius - L2OC + tca*tca;
double t2;
if( t2hc <= 0.0 )
return 0;
t2hc = sqrt( t2hc );
if ( tca < t2hc)
{
t = tca + t2hc;
t2 = tca - t2hc;
}
else
{
t = tca - t2hc;
t2 = tca + t2hc;
}
if( fabs (t) < GeomThreshold )
t = t2;
return t > GeomThreshold;
}
а для остальных объектов???
|
-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!
Отправлено: 19:41, 06-01-2004
| #3
|