Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ночной странник


Contributor


Сообщения: 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