我知道在 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 很陌生,所以详细的解释会很有帮助)?哪个最有效?
最佳答案
iOS OpenGL ES 实现中的抗锯齿功能受到严重限制。您将无法使用传统方法绘制抗锯齿圆圈。
但是,如果您绘制的圆不是那么大,而且是填充的,您可以考虑使用 GL_POINT_SMOOTH。这就是我用于我的游戏 Pizarro 的东西,它涉及很多圈子。这是我在 iOS 上绘制抗锯齿圆圈的经验的详细记录:
http://sveinbjorn.org/drawing_antialiased_circles_opengl_iphone
关于iphone - 如何使用 iPhone OpenGL ES 绘制抗锯齿圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3609624/