Проблемы с использованием треугольных полос в OpenGL ES 2.0 - PullRequest
1 голос
/ 31 октября 2011

Я хотел бы отрисовать полноэкранную выровненную сетку, используя TRIANGLE_STRIP s. Он состоит из 9 вершин и 8 треугольников и должен выглядеть примерно так:

A----B----C
| 1 /| 3 /|
|  / |  / |
| /  | /  |
|/ 2 |/ 4 |
D----E----F
| 5 /| 7 /|
|  / |  / |
| /  | /  |
|/ 6 |/ 8 |
G----H----I

Вершина A имеет координаты (-1, -1, 0), а вершина I находится в (1, 1, 0). Можно также сказать, что он состоит из 9 вершин, расположенных в 3 столбцах и 3 рядах.

Я пытаюсь сделать это в режиме TRIANGLE_STRIP.

Индексы, которые я поставляю glDrawElements, следующие:

AD BE CF F
DG EH FI I

На самом деле CFF должен создать вырожденный треугольник, чтобы можно было перейти к следующей строке.

У меня проблемы с вычислением правильного числа для glDrawElements. Я делаю это так:

glDrawElements(GL_TRIANGLE_STRIPS, number_of_elelments,
    GLES20.GL_UNSIGNED_SHORT, buffer);

Сначала я думаю, что это должно быть количество видимых треугольников:

number_of_elements = 2 * (cols - 1) * (rows - 1); // 8

Но он рендерил половину прямоугольников.

Потом я вспомнил вырожденные прямоугольники и решил включить их тоже:

number_of_elements = 2 * (cols - 1) * (rows - 1) + rows; // 10

Было показано больше прямоугольников, но все еще не все.

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

Есть идеи, что я делаю не так?

1 Ответ

1 голос
/ 31 октября 2011

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

Более того, ваш порядок рисования нарушен.Вам нужно не только повторять F, но и D (вводя 4 вместо 2 вырожденных треугольников), в противном случае вы получите треугольник с вершинами F, D и G (который вам не нужен).Но, с другой стороны, вам не нужно повторять I (если у вас нет другого ряда).Таким образом, ваш порядок рендеринга будет выглядеть примерно так:

AD BE CF F
D DG EH FI

Но ваша задача выяснить, как автоматизировать это в цикле в зависимости от количества строк и столбцов - ваша задача сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...