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

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

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

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

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

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

Спасибо.

1 Ответ

0 голосов
/ 04 февраля 2009

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

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

Это верно?

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

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

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

...