OpenGL ES填充效果

时间:2011-10-18 19:04:27

标签: ios opengl-es

如何创建填充效果?我使用以下方法创建了一个不规则的闭合形状:

   glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
        (.......) 
   glVertexPointer(2, GL_FLOAT, 0, vertexBuffer);
   glDrawArrays(GL_POINTS, 0, vertexCount);
        (.......) 
   glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);

现在我希望在photoshop中有一个“填充/涂料桶”效果。形状内的背景为白色(例如),通过在形状内部单击,我想将颜色更改为红色或绿色。

请有人给我一些提示。

enter image description here

1 个答案:

答案 0 :(得分:3)

因此,您渲染一组点,并希望OpenGL“神奇地”填充封闭区域。那是不可能的。 OpenGL没有意识到这些点包含一些区域。你甚至不画线条,它只是一组点。即使是人类也必须付出合理的努力才能看到​​这些点“包围”一个区域,放下一台计算机,或只是一个简单的界面,用于在屏幕上绘制点,线和三角形。

不是绘制点,而是绘制多边形(使用GL_POLYGONGL_TRIANGLE_FAN代替GL_POINTS)。但是如果封闭区域是非凸的,则在所有情况下都不起作用。你必须要意识到的是,OpenGL只不过是一个绘图API。它只是绘制点,线和三角形到屏幕。是的,有花哨的效果,但总而言之它只是绘制简单的原语。它不管理任何底层图形场景或其他东西。在绘制基元(如单点,线或三角形)的那一刻,OpenGL不再记得它了。

您想要实现的目标(至少将点集更改为真正包围区域的线路循环)不是通过简单的方法实现的。在最简单的情况下,您需要某种flood fill algorithm来填充由线条包围的区域。但是为此你不会以任何方式从OpenGL中获利,因为这需要你分析CPU上的图像并设置单个像素。着色器也不能以简单(或任何?)方式执行此操作。