Я пытался визуализировать силуэты на моделях САПР с помощью webgl. Ближе всего к желаемому результату я получил fwidth
и точку между нормалью и вектором глаза. Однако мне было трудно контролировать ширину.
Я видел другую веб-программу просмотра, и она способна делать что-то вроде этого:
Я начал копаться в шейдерах, и самое большее, что я смог понять, это то, что это аналитическое — рисуется фактическая линейная сущность, а ширина достигается путем рендеринга четырехугольника вместо стандартных линий webgl. В шейдере есть куча логики, и я думаю, что позиции вершин просто обновляются при каждом рендеринге. Это процедурная модель, поэтому я предполагаю, что для конусов и цилиндров всегда можно выделить две линии, вычислить точки силуэта и обновить линии.
Если это так, было бы неплохо попробовать сделать что-то подобное в шейдере (возможно, это уже происходит, и я этого не понял). Я вижу, как цилиндр записывается в атрибуты или формы и вычисляются точки.
Есть ли такой подход, который уже где-то задокументирован?
изменить 15.08.17
Я не нашел никаких документов или задокументированных методов по этому поводу. Но он получил пару голосов.
Учитывая, что у меня есть информация о цилиндрах и конусах, моя идея состоит в том, чтобы сэмплировать нормаль этой параметрической поверхности из вершины, вытолкнуть поверхность с некоторым коэффициентом, который бы покрывал некоторое количество пикселей в пространстве экрана, использовать трафарет и нарисовать толстая линия, обрезающая ее с фактической формой поверхности.