Il y a trois façons principales de dessiner un cercle simple dans OpenGL ES, tel que fourni par l'iPhone. Ils sont tous basés sur un algorithme simple (la version VBO est ci-dessous).Comment dessiner un cercle anti-aliasé avec l'iPhone OpenGL ES
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;
}
Les trois façons que je connais pour dessiner un simple cercle sont à l'aide glDrawArray d'un tableau de sommets tenus par l'application; utiliser glDrawArray à partir d'un tampon de vertex; et en dessinant une texture à l'initialisation et en dessinant la texture lorsque le rendu est demandé. Les deux premières méthodes que je connais assez bien (bien que je n'ai pas réussi à faire fonctionner l'anti-aliasing). Quel est le code impliqué pour la dernière option (je suis très nouveau pour OpenGL dans son ensemble, donc une explication détaillée serait très utile)? Lequel est le plus efficace?
Dans le code de production, un scoped_array serait utilisé à la place de l'explicite supprimer [] – ScootyPuff