Главная » Программирование игр под Android » ДРУГИЕ ПРИМИТИВЫ: ТОЧКИ, ЛИНИИ, ПОЛОСКИ И КОНУСЫ – РАЗРАБОТКА ИГР ДЛЯ ОС ANDROID

0

 

Когда я говорил, что OpenGL ES – это огромная машина для визуализации треугольников, я немного недоговаривал. На самом деле OpenGL ES может также визуализировать точки и линии. Более того, они тоже описываются с помощью вершин, и, как следствие, все вышеупомянутое применимо и к ним (текстуры, цвета для вершин и т. д.). Все, что нам надо сделать, чтобы визуализировать эти примитивы, – использовать при вызове gl DrawArrays /glDrawElements что-то кроме GL10. GL TRIANGLES. Эти примитивы также поддаются визуализации с индексированием, хотя это и несколько излишне (как минимум, в случае с точками). На рис. 7.18 показан список всех типов примитивов, которые нам предлагает OpenGLES.

Рис. 7.18. Все примитивы, которые может визуализировать OpenGL ES

Кратко рассмотрим все эти примитивы.

Точка. В случае с точкой каждая вершина – это отдельный примитив.

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

Ломаная линия. Все вершины воспринимаются как принадлежащие одной длинной линии.

Замкнутая ломаная линия. Похожа на ломаную линию, единственная разница состоит в том, что OpenGL ES автоматически нарисует ломаную линию от последней вершины к первой.

Треугольник. Он нам уже знаком. Каждый треугольник состоит из трех вершин.

Лента треугольников. Вместо описания трех вершин мы просто описываем количество треугольников + одна вершина. Затем OpenGL ES создаст первый треугольник из вершин (vl; v2; v3), следующий треугольник из вершин (v2; v3; v4) и т. д.

Веер треугольников. Веер имеет одну основную вершину (vl), которая является общей для всех треугольников. Первый треугольник будет ( vl; v2; v3), следующий (vl; v3; v4) и т. д.

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

Точки и линии в OpenGL ES немного странные. Когда мы используем идеальную пиксельную ортогональную проекцию (например, когда разрешение экрана равно 320 х 480 пикселов и наш glOrthof  применяет такие же значения), мы по-прежнему не получаем идеальную пиксельную визуализацию. Местоположения вершин точки и линии должны быть смещены на 0,375f из-за так называемого правила ромбического выхода (diamond exit). Помните об этом, если вы хотите получить идеальную визуализацию точек и линий. Мы уже видели что-то похожее, когда рассматривали треугольники. Тем не менее, принимая во внимание, что мы обычно рисуем треугольники в 2D, мы вряд ли встретимся с этой проблемой.

Допустим, все, что вам нужно, – визуализировать примитивы, отличные от GL10. GLTRIANGLES. В этом случае используйте одну из констант с рис. 7.18. Далее мы рассмотрим пример программы. В большинстве случаев будем применять список треугольников, особенно работая с графическим программированием 2D.

Теперь изучим в еще одну вещь, которую нам предлагает OpenGL ES: модельно-видовую матрицу.

Источник: Mario Zechner / Марио Цехнер, «Программирование игр под Android», пер. Егор Сидорович, Евгений Зазноба, Издательство «Питер»

По теме:

  • Комментарии