この画像はOpenFrameworksでofxFXとゆうアドオンを取り込んでOpenGl系統のシェーダをPlaneに書き出したものです
画像をよくみるとわかるのですが、背景とPlaneの境界線がみえてしまっています
このシェーダは以下のものでして
C++
1 const float pi = 3.141592653589793238462643383279; 2 3 uniform float time; 4 uniform vec2 mouse; 5 uniform vec2 resolution; 6 7 // How fast it animates 8 float tscale = 1.5; 9 10 float wave(vec2 position, float freq, float height, float speed) { 11 float result = sin(position.x*freq - time*tscale*speed); 12 result = result * 2.0 - 1.0; 13 result *= height; 14 return result; 15 } 16 17 vec3 combo(vec2 position, float center, float size) { 18 19 float offset = pi * (center - 0.5); 20 float lum = abs(tan(position.y * pi + offset)) - pi / 2.0; 21 lum *= size; 22 23 float red = wave(position, 5.0, 0.9*size, 1.008); 24 float green = wave(position, 3.5, 0.5*size, 2.23); 25 float blue = wave(position, 1.5, 1.2*size, 1.42); 26 27 return vec3(lum + red, lum + green, lum + blue); 28 } 29 30 void main(void) { 31 // normalize position 32 vec2 position = gl_FragCoord.xy / resolution.xy; 33 34 vec3 result = vec3(0.0, 0.0, 0.0); 35 result += combo(position, 0.5, 0.05); 36 37 gl_FragColor = vec4(result,0); 38 39 }
最後の行のgl_FragColorですべてのAlphaを0に設定しているにも関わらず、画像のような描画です。
ちなみにDraw時の処理は以下です
C++
1 2 glPushClientAttrib(GL_ALL_ATTRIB_BITS); 3 post.begin(cam);//カメラ設定です 4 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 5 ofEnableBlendMode(OF_BLENDMODE_ALPHA); 6 ofSetColor(255); 7 bloom.draw();//ここでシェーダを書き出しています。
ほかのオブジェクトなどの描画条件から必要のなさそうにみえるものもありますが、順番としてはこのコードとなります。
最終的には、シェーダで黒い部分は完全に透明にして、Pleneの4隅は完全に透明にしたいと思っています。
ちなみにofxFXは↓になります
https://github.com/patriciogonzalezvivo/ofxFX
あなたの回答
tips
プレビュー