2016-05-29 4 views
0

Я пытаюсь понять что-то, что, вероятно, намного проще, чем я думаю, сейчас, надеюсь, кто-то может помочь мне понять, что я опишу ниже.Выбор слияния с верхушкой сгустка

Я знаю, что сфера находится вне ракурса зрения, если она полностью отстает по крайней мере от одной из шести плоскостей усечения в 3D (слева, справа, снизу, сверху, рядом далеко). Это справедливо для круга с центром c2 в приведенном ниже примере, который полностью выходит за пределы левой плоскости. Тест на перекрытие просто делается путем вставки центральных координат сферы в уравнение плоскости, чтобы получить расстояние от центра до плоскости и затем сравнить это с радиусом сферы.

Однако использование этого подхода на сфере с центром c1 даст нам ложное положительное значение, так как тест скажет нам, что сфера находится внутри правой и дальней плоскости (если смотреть сверху). Затем решение должно использовать более точный тест перекрытия, определяя расстояние от центра сфер до угла ближайшего к нему уклона. Если это расстояние больше радиуса, сфера находится вне усеченный и т.д.

Spheres and viewing frustum

То, что я не понимаю, что если мы будем использовать этот второй подход, глядя на углах вместо плоскостей, на сфере, расположенной как одна с центром c3. Не даст ли нам тест, что расстояние от центра сфер за вычетом радиуса больше 0 и, следовательно, вне объема просмотра?

Так что если задан набор правил для объема орфографического представления, то есть 0 ≤ x ≤ 20, -5 ≤ 15, -5 ≤ z ≤ 18 и x, y, z-координаты + радиус сферы и сказал, чтобы определить, находится ли сфера внутри или снаружи. Как выбрать, какой метод использовать, чтобы действительно получить правильный ответ?

ответ

1

На самом деле вам нужны оба:

  1. Вы должны проверить, пересекает ли тест сфера/внутри усеченной (6 самолетов) - ваш first approach.
  2. Затем (если 1 верно) и расстояние < -R - сфера полностью внутри.
  3. В противном случае вы должны проверить пересечение координат на плоскостях (если по крайней мере один red крест на вашем black сегменте вы получили пересечение): enter image description here

Осуществление 3 может быть сложным, так вот две ссылки:

http://www.realtimerendering.com/intersections.html http://www.geometrictools.com/Source/Intersection3D.html

, где находится перекресток пересечения Фрустум-Сфера.

Но geometrictools реализация использует FindMinDistance algo, который сложнее. Вы можете изучить их реализацию (Wm5DistPoint3Frustum3.cpp) и адаптировать его только к itersection.

+0

Это имеет смысл, теперь я понимаю. Благодаря! –