Учитывая произвольную трехмерную сетку, я ищу алгоритм, который выполнял бы удаление скрытой линии в режиме реального времени.Я работаю в контексте OpenGL, что означает, что мы можем воспользоваться Z-буфером.
Я предполагаю, что алгоритм должен включать решение двух следующих проблем:
1) Определение «жестких граней» для последующего рисования с использованием обычных линий OpenGL.Эти «жесткие края» должны соответствовать краям, где угол между двумя соответствующими гранями превышает некоторый порог.
Ради простоты, давайте заявим, что гарантировано, что для каждого ребра определено не более 2 граней.
Расчет "жестких ребер" должен выполняться один раз на сеткуто есть он не связан с точкой обзора.
2) Определение контура силуэта сетки в соответствии с текущей точкой обзора.В конце концов, эта часть может быть выполнена с использованием классических методов OpenGL (включая смещение полигонов или буфер трафарета), но было бы предпочтительнее нарисовать силуэт, используя обычные линии OpenGL, чтобы сохранить единый внешний вид для всех линий.
Для этой части я не уверен, должны ли все вершины силуэта проходить через вершины сетки или нет.В любом случае, для сеток типа кубов _, где нет необходимости в силуэте (поскольку достаточно нарисовать только "твердые края"), _ алгоритм должен быть достаточно умным, чтобы избежать рисования "одинаковой линии" дважды..