ProcessingからOpenGLのメソッドを呼び出す最近の投稿Processing2.0の新機能。シェーダを使って高速に模様を描く。その2)Processing2.0の新機能。シェーダを使ってフィルタを作成する。2011(19日目)ProcessingからOpenGLのメソッドを呼び出すProcessingでは、OpenGLのメソッドを直接呼び出すことができます。OpenGLのメソッド呼び出すことで、Processingには用意されていない機能を使うことも可能です。OpenGLを呼び出すには、size()の第3引数を使い、描画モードをOPENGLモードにします。その後、Processing内部で使用されているgをPGraphicsOpenGLにキャストして取得します。ここで取得したものに対して、beginGL()した戻り値を使うと、OpenGLのメソッドを呼び出すことができます。テンプレートは下記になります。ここでOpenGLのメソッドを呼び出す。光の表現などに使われる加算合成。Processingでこれを実現するためには、brendColor()を使用するか、自分でr,g,bの各要素の値を計算する必要があります。OpenGLには、半透明の色の合成方法を決めるメソッドがあるため、これを呼び出すことで、簡単に加算合成を実装できます。半透明の色の合成の設定はglBlendFunc()で行います。引数はそれぞれ、OpenGLの定数GL_SRC_ALPHAとGL_ONEを用います。引数の内容を軽く解説しておくと、第1引数は送り元の色の不透明度、第2引数は送り先の色の不透明度になります。送り先(つまり既に描画されている色)は、不透明なので完全(100%)を表すGL_ONE。送り元(これから描画しようとする色)は、その色の不透明度を使うべきなので、GL_SRC_ALPHAを使います。他にも定数は各種あり、引数に入れる内容を変えると、いろいろな色の合成をおこなうことができます。上:加算合成をしなかった場合。下:加算合成をした場合。円が重なっている部分で色が加算されて明るくなっています。pgl.endGL();}フォグフォグとは、3Dにおいて、遠くのものに対して霧がかかったかのように見せることで、距離感を表現する(さらには、描画するオブジェクトを減らすことで処理速度を稼ぐ)ために使われる技法です。OpenGLには、フォグをかけるメソッドがありますので、これを呼ぶとProcessingでもフォグをかけることができるようになります。glEnable()を使うと、OpenGLの機能を有効にすることができます。今回はフォグを使いたいので、GL_FOGを指定します。フォグの強さを指定する必要があるので、続けてglFogf()を呼び出します。(OpenGLは引数の型によって、glXXXi(int)やglXXXf(float)と、サフィックスをつけているようです。今回の場合は値が整数なので、glFogi()で動作します。)glFogf()の第1引数は、設定する内容、第2引数にはその値を書きます。フォグの種類としてGL_FOG_MODEをGL_LINERに設定します。これは視点からの距離を指定し、その範囲に対して均等にフォグを掛けるものです。これ以外にも、GL_EXPやGL_EXP2というものがあります、これらは距離の値を用いてフォグを掛けるものになります。GL_LINERでは、フォグの開始点と終了点を指定する必要があるのでそれぞれ、GL_FOG_STARTとGL_FOG_ENDでフォグを掛ける範囲を指定します。パラメータをいろいろ調整することで、フォグの色を変えたり、凄い深い霧を表現することができます。上:フォグを掛けなかった場合。下:フォグを掛けた場合。フォグを掛けない場合、全ての球体が見えていますが、フォグを掛けた物では、遠い球体が見えなくなっており、自然に近くなっています。pgl.endGL();}OpenGLのリファレンスはOpenGLSDKのページなどを見ることで確認できますが、今回のような単純な機能であれば、「OpenGLを使ってゲームを作る」などの本などにも書かれていますので、その内容で理解したり、コードを移植してくることもできるでしょう。余談ですが、先日の光のラインをOpenGLで描いた物は下記になります。Processingのellipse()がそのまま使えるため、描画が楽になっています。全てのネオンラインについて、画面内いれば描画、画面外ならばカウンターを増やす。