Постоянная высота горизонтальных полос в многоугольной сетке, подвергающейся вертикальной деформации (OpenGL ES 1.1)

StackOverflow https://stackoverflow.com/questions/512414

Вопрос

При реализации наложения текстур на стандартную полигональную сетку с использованием обычного алгоритма можно столкнуться с проблемами, связанными с деформациями по оси Y, поскольку деформации следуют вдоль полос постоянной высоты, рядов четырехугольников, а не вершины в этом направлении могут перемещаться. растягиваться независимо по сравнению с растяжением вдоль оси X.

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

Хотя это нормально, если вы деформируете сетку только по осям X или Z, но если вы деформируете сетку по оси Y, не принимая это во внимание, вы увидите, что ряды четырехугольников действуют вместе как полоса постоянная высота вместо рядов независимых точек.Вы увидите деформацию сетки вдоль оси Y, но вы также увидите разрывы текстуры, поскольку эти полосы не меняют ширину, что приводит к появлению пробелов в сетке.

Кто-нибудь еще сталкивался с этим, у кого были бы предложения о том, как лучше всего применить фильтр карты смещения (x, y) к полигональной сетке, построенной таким образом?Или подход к определению сетки должен каким-то фундаментальным образом измениться?

Пример алгоритма генерации сетки можно увидеть на Учебное пособие ZEUS OpenGL|ES по отображению текстур.

Спасибо.

Это было полезно?

Решение

Хорошо, давайте сначала проверим, понимаю ли я вопрос.

Если я вас правильно понимаю, вы пытаетесь отрендерить патч с текстурой.Но затем, когда вы пытаетесь растянуть заплатку в вертикальном направлении, чтобы она стала выше, различные горизонтальные полосы вашей сетки рвутся, и в итоге у вас получается несколько горизонтальных полос заплатки.

Это правильно?

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

Основы алгоритма работают, вам просто нужно настроить интервал между строками и высоту строк.Когда вы немного лучше поймете, как работают списки примитивов, возможно, вам захочется узнать об индексированных примитивах.На самом деле это позволит вам делиться вершинами вместо того, чтобы дублировать их для каждого примитива.

Надеюсь, поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top