Войти
ПрограммированиеФорумГрафика

Расчёт барицентрических координат для сетки

#0
(Правка: 17:54) 17:51, 5 янв 2023

Добрый день,
Делаю wireframe эффект для водной поверхности любой формы,
пример

+ Показать

Для этого запекаю в color барицентрические координаты треугольника.
Всё это работает отлично пока каждый треугольник/квадрат не имеет общих вершин.
Какой корректный алгоритм можно придумать для расчета, если есть общие вершины?
Пока что придумал случайно расставить координаты для 1 треугольника, а затем остальные заполнять по порядку (зная две соседних координаты, можно вычислить третью).
Квадраты(по 2 треугольника) отсортированы по порядку, поэтому алгоритм работает большую часть времени, но даёт сбой если сортировка нарушается.

Ещё вопрос, по этой же теме. Как в дальнейшем эти координаты тесселировать?

Условный код

+ Показать

У меня нет доступа к соседним новым вершинам, поэтому не представляю как вообще определять новые барицентрические координаты.

ps Можно ли вообще обойтись без барицентриков и рисовать сетку через экранные производные (ddx/ddy)? Находил в инете об этом 1 упоминание, но ссылки давно мертвые.

#1
19:53, 5 янв 2023

Я делал через геометрический шейдер, в котором для каждой вершины задаёшь свою координату:

const vec3 barycentrics[gl_in.length()] = vec3[](
        vec3(1, 0, 0),
        vec3(0, 1, 0),
        vec3(0, 0, 1)
    );
#2
20:38, 5 янв 2023

v1c
> Я делал через геометрический шейдер, в котором для каждой вершины задаёшь свою
> координату:
хоть он позволяет даже после стадии тесселяции получить треугольник, к сожалению, не поддерживается на некоторых API, например metal. Поэтому этот вариант запасной.

ПрограммированиеФорумГрафика