Как нарисовать сглаженный круг с iPhone OpenGL ES - PullRequest
1 голос
/ 31 августа 2010

Существует три основных способа рисования простого круга в 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 в целом, поэтому подробное объяснение было бы очень полезно)? Какой самый эффективный?

1 Ответ

1 голос
/ 16 марта 2011

Сглаживание в импелментации iOS OpenGL ES строго ограничено. Вы не сможете рисовать сглаженные круги традиционными методами.

Однако, если нарисованные круги не такие большие и заполнены, вы можете взглянуть на использование GL_POINT_SMOOTH. Это то, что я использовал для своей игры, Pizarro, которая включает в себя много кругов. Вот подробное описание моего опыта рисования сглаженных кругов на iOS:

http://sveinbjorn.org/drawing_antialiased_circles_opengl_iphone

...