Существует три основных способа рисования простого круга в OpenGL ES, как это предусмотрено в iPhone. Все они основаны на простом алгоритме (версия VBO ниже).
void circleBufferData(GLenum target, float radius, GLsizei count, GLenum usage) {
const int segments = count - 2;
const float coefficient = 2.0f * (float) M_PI / segments;
float *vertices = new float[2 * (segments + 2)];
vertices[0] = 0;
vertices[1] = 0;
for (int i = 0; i <= segments; ++i) {
float radians = i * coefficient;
float j = radius * cosf(radians);
float k = radius * sinf(radians);
vertices[(i + 1) * 2] = j;
vertices[(i + 1) * 2 + 1] = k;
}
glBufferData(target, sizeof(float) * 2 * (segments + 2), vertices, usage);
glVertexPointer(2, GL_FLOAT, 0, 0);
delete[] vertices;
}
Три известных мне способа рисования простого круга - использовать glDrawArray из массива вершин, которые хранятся в приложении; использование glDrawArray из буфера вершин; и путем рисования текстуры при инициализации и рисования текстуры при запросе рендеринга. Первые два метода я знаю довольно хорошо (хотя я не смог заставить работать сглаживание). Какой код используется для последнего варианта (я очень плохо знаком с OpenGL в целом, поэтому подробное объяснение было бы очень полезно)? Какой самый эффективный?