我在
OpenGL ES 2中是新的,我已经阅读了许多有关如何在Android上的OpenGL ES 2中绘制一个圈子的主题.基于
Drawing Shapes和
this code found on gamedev.net,我可以绘制三角形和三角形,但我仍然不知道如何画一个圆.我现在有三种方法来画一个圆圈:
>在圆中生成顶点并使用glDrawArray(GL_LINES,…).根据您生成的顶点数量,可以产生一个不错的结果.
>使用圆形的预生成纹理(具有Alpha透明度)并将其映射到四边形上.这将导致非常光滑的图形,并允许一个“圆”,但它不会那么灵活:即使使用mipmap,你会希望你的纹理与渲染四边形的大小相同.
>使用片段着色器.
但是如何实现呢?
解决方法
如果要为圆形创建几何,请执行以下操作:
int vertexCount = 30; float radius = 1.0f; float center_x = 0.0f; float center_y = 0.0f; // Create a buffer for vertex data float buffer[] = new float[vertexCount*2]; // (x,y) for each vertex int idx = 0; // Center vertex for triangle fan buffer[idx++] = center_x; buffer[idx++] = center_y; // Outer vertices of the circle int outerVertexCount = vertexCount-1; for (int i = 0; i < outerVertexCount; ++i){ float percent = (i / (float) (outerVertexCount-1)); float rad = percent * 2*Math.PI; //Vertex position float outer_x = center_x + radius * cos(rad); float outer_y = center_y + radius * sin(rad); buffer[idx++] = outer_x; buffer[idx++] = outer_y; } //Create VBO from buffer with glBufferData()
然后,您可以使用glDrawArrays()绘制为:
> GL_LINE_LOOP(仅限轮廓)或
> GL_TRIANGLE_FAN(填充形状)
.
// Draw circle contours (skip center vertex at start of the buffer) glDrawArrays(GL_LINE_LOOP,2,outerVertexCount); // Draw circle as a filled shape glDrawArrays(GL_TRIANGLE_FAN,vertexCount);