Двухмерный контур проекции сетки является подмножеством проекции его ребер.
Используя это наблюдение, можно определить двухмерный контур, используя следующий метод:
- проекция каждого ребра, принадлежащего только одной грани, является частью 2D контура,
- для других ребер, определить вектор нормали смежных граней
- вычислить точечные произведения этих нормалей с нормалью плоскости проекции
- проекция этого ребра принадлежит двухмерному контуру, если все знаки точечных произведений не совпадают (это означает, что одна грань указывает на плоскость проекции, а по крайней мере одна другая нет, что определяет ребро как часть контура).
Обратите внимание, что этот метод сообщит все края, которые ортогональны плоскости проекции, даже те, которые не видны с точки зрения плоскости проекции. Например, с помощью тора он найдет внутренние и внешние контуры, даже если торус повернут таким образом, что его внутреннее отверстие не видно с точки зрения плоскости проекции. Чтобы разобраться, какие края видны, вам понадобится какой-то тест видимости. Если предполагаемое использование предназначено для отображения пользователем, вы можете использовать буфер глубины, рассчитанный с помощью матрицы ортогональной проекции, для визуализации геометрии с точки зрения плоскости проекции и выполнить некоторое z-тестирование, чтобы определить, какие края видны с плоскости. Если вам нужна точность, вам необходимо выполнить пересечение луча / треугольника, чтобы определить видимость.