Добрый день,
Делаю wireframe эффект для водной поверхности любой формы,
пример
Для этого запекаю в color барицентрические координаты треугольника.
Всё это работает отлично пока каждый треугольник/квадрат не имеет общих вершин.
Какой корректный алгоритм можно придумать для расчета, если есть общие вершины?
Пока что придумал случайно расставить координаты для 1 треугольника, а затем остальные заполнять по порядку (зная две соседних координаты, можно вычислить третью).
Квадраты(по 2 треугольника) отсортированы по порядку, поэтому алгоритм работает большую часть времени, но даёт сбой если сортировка нарушается.
Ещё вопрос, по этой же теме. Как в дальнейшем эти координаты тесселировать?
Условный код
У меня нет доступа к соседним новым вершинам, поэтому не представляю как вообще определять новые барицентрические координаты.
ps Можно ли вообще обойтись без барицентриков и рисовать сетку через экранные производные (ddx/ddy)? Находил в инете об этом 1 упоминание, но ссылки давно мертвые.
Я делал через геометрический шейдер, в котором для каждой вершины задаёшь свою координату:
const vec3 barycentrics[gl_in.length()] = vec3[]( vec3(1, 0, 0), vec3(0, 1, 0), vec3(0, 0, 1) );
v1c
> Я делал через геометрический шейдер, в котором для каждой вершины задаёшь свою
> координату:
хоть он позволяет даже после стадии тесселяции получить треугольник, к сожалению, не поддерживается на некоторых API, например metal. Поэтому этот вариант запасной.