Динамически создавать дополнительные треугольники регулярной сетки в OpenGL

Я создал регулярную сетку, которая исходит из 2D-изображения, то есть каждый пиксель имеет вершину. Есть два треугольника на четыре пикселя, так что у меня есть треугольник в правом верхнем углу и в левом нижнем углу. Я использую вершинные и индексные буферы для этого.

Текущее состояние

Теперь я динамически удаляю треугольники / грани на границе двух разных типов вершин (в соответствии с моим приложением), потому что иначе были бы искажения. Я написал геометрический шейдер, который берет треугольник и выводит треугольник или ничего (см. Первое изображение). Шейдер распознает, является ли треугольник «неисправным» (имеет оранжевые края), и пропускает его.

Теперь это работает нормально, но я могу потерять некоторые детали из-за геометрии моей вершины. Я могу добавить дополнительные треугольники в сетку (см. Второе изображение, новые треугольники с пунктирной оранжевой линией).

Состояние цели

Как мне сделать это в OpenGL?

Моя первая идея — создать один квад вместо двух треугольников, проверить наличие четырех возможных вариантов треугольников и динамически создать эти треугольники в геометрическом шейдере. Но это может быть медленным; GL_QUAD устарели, и альтернативы тоже могут быть медленными. Что у тебя на уме?

5

Решение

Вот моя идея:

Поместите всю сетку в буфер / текстуру.

строить четыре треугольники для каждых четырех пикселей. Да, они пересекаются.

В геометрическом шейдере вы можете сказать, является ли треугольник «неисправным», потому что он соединяет две неправильные области. Или выборка из текстуры, потому что треугольник пересечения действителен, поэтому этот новый можно отбросить.

РЕДАКТИРОВАТЬ: Другой подход

Используйте текстуру. Нарисуйте экземпляр с GL_POINTS. С некоторым порядком и с помощью instanceID шейдер знает, где находится точка.

Для этого проверьте четыре возможных треугольника. Если вы создаете экземпляр сверху вниз и слева направо, то для четырех треугольников используются только точка справа и два ниже. И вы избегаете повторения тестов.

Выбрасывайте только тех, кого вы выберете.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]