2011-10-18 40 views
0

塗りつぶし効果の作成方法は?OpenGL ES塗りつぶし効果

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

今、私はフォトショップのように「記入/ペイントバケツ」効果を持っていると思います:私は使用して作成された不規則な閉じた形状を持っています。形状の中の背景は白いです(例えば)、色を赤または緑に変更したい形の中をクリックします。

誰かが私にいくつかのヒントを教えてください。

enter image description here

+0

OpenGLに間違いがありますか? –

+0

はい、そうかもしれません。しかし....私は何が私の問題を解決できるか分からない。以前はOpenGLを使ったことはありませんでしたが、これはそうです。多分私は間違った方法で私の問題を説明します。 –

+0

あなたは非常に明らかに問題を説明しました。 OpenGLはそれを解決するための完全に間違ったツールです。あなたが以前にそれを使用したことがない場合、この特定の問題は間違いなくそれを使用する理由ではありません。 –

答えて

3

だから、点の集合をレンダリングし、OpenGLは「魔法」囲まれた領域を塗りつぶします。それは可能ではありません。 OpenGLはこれらの点がいくつかの領域を囲んでいることを認識しません。あなたはラインストリップを描くことさえありません、それは単なるポイントのセットです。人間でさえ、ポイントが「領域を囲む」、コンピュータを脇に置いたり、ポイント、ライン、三角形を画面に描画するための単純なインタフェースを見ているという考え方を妥協する必要があります。

ポイントを描画する代わりに、ポリゴンを描画します(GL_POINTSの代わりにGL_POLYGONまたはGL_TRIANGLE_FANを使用)。しかし、囲まれた領域が凸ではない場合、すべての場合に機能しません。あなたが常に認識しなければならないことは、OpenGLは描画APIに過ぎないということです。これは点、線、三角形を画面に描画するだけです。はい、派手な効果がありますが、まったく単純なプリミティブを描画します。基礎となるグラフィックスのシーンなどは管理しません。プリミティブ(一点、線、三角形など)が描画された瞬間、OpenGLはそれをもう記憶しません。

あなたが達成したいことは(少なくとも領域を囲むラインループに設定されたポイントを変更することを考えれば)、簡単な手段で達成することはできません。最も単純なケースでは、線によって囲まれた領域を塗りつぶす何らかの種類のflood fill algorithmが必要です。しかし、このためにはOpenGLから何らかの利益を得ることはできません。これは、CPU上のイメージを分析して個々のピクセルを設定する必要があるためです。シェーダはシンプルな方法でこれを行うこともできません。

+0

私は質問に追加した画像を見てください。これに対する解決策が必要です。/ –

+1

@klm_はい、このソリューションはOpenGLとは何の関係もありません。私が与えた洪水で満たされたリンクを見てください。それがそれを解決する最も簡単な方法です。しかし、OpenGLとは何の関係もないと言っています。 –

関連する問題