2017-04-14 5 views
0

es 2を使用して従来のOpenGLs texenv gl_replaceモードをエミュレートできますか? 基本的に、テクスチャフラグメントアルファが0の場合は、プリミティブカラーを使用します。しかし、そうでなければ断片の色には影響しません。 glslに新しい機能を追加しました。GL_REPLACEとフラグメントシェーダ?

アンドロイドとイブのImはすでに透過性を使用しているテクスチャを持っています。 そして、私はただ1つのシェーダープログラムを使いたいです。何が得られたか: gl_FragColor = texture2D(u_TextureUnit、v_TextureCoords); idは、テクスチャが透明であるところだけを表示するプリミティブに色を追加するのが好きです。

答えて

2

このスニペットは、テクスチャの色によって調整された頂点の色とテクスチャの色をブレンドして出力します。あなたは欲しかった。そうでない場合は、入力と希望する出力が何であるかをより正確に記述してください。

lowp vec4 vPrimitiveCol = colour_from_vertex_passed_as_varying; 
lowp vec4 vTexCol = texture2D(u_TextureUnit,v_TextureCoords); 
gl_FragColor.rgb = mix(vPrimitiveCol.rgb, vTexCol.rgb, vTexCol.a); 
gl_FragColor.a = 1.0; 
+0

ありがとうございます!私はそれを理解していませんが、完全に動作します。まったく:/ –

0

GL_REPLACEは、断片色を完全に置き換えるものではありません。それはより多くのように聞こえるGL_BLEND。私はより多くの最近の(と推奨)ジェネリック型でtexture機能を古いtexture2D機能を置き換え

solid_color = ...; 
tex_color = texture(texture_sampler, texture_coord); 
gl_FragColor = mix(solid_color, tex_color, tex_color.a); 

注:とにかく、あなたはGLSLミックス機能を使用して、それをエミュレートすることができます。

+0

GL ES 2で 'texture'がサポートされていますか? OPがこの環境を言及しているので、 – rotoglup

+0

'texture()'はOpenGL ES 3の機能です。 – SurvivalMachine

+0

@rotoglup:質問は非常に広くタグ付けされているので、私は広範に回答し、一般化された形式を使用したことを指摘した。 – datenwolf

関連する問題