2012-01-30 13 views
0

を兼ね備えています。 2つのテクスチャがあります。最初のものには拡散マップが含まれ、2つ目には透明度(GL_ALPHAを使用して作成されたもの)が含まれています。拡散成分のアルファ値を不透明成分のアルファ成分で置き換えるだけでいいです。のOpenGL ES 1.1 - 私はむしろ簡単な問題を抱えている不透明度と拡散マップ

GL_BLENDとOpenGL ES 2.0を使用して行うことは非常に簡単です:

gl_FragColor.w = texture2D(opacity_samp, tex_cord).w; 

しかし、私は、OpenGL 1.1テクスチャ合成器を使用していることを行う方法を見つけ出すことはできません。

+0

あなたは、OpenGL 2.0、またはOpenGLを使用しようとしている** ES ** 2.0?それらは同じものではありません。バージョン1.1では同じ質問が出ますが、実際には*同じものではありません。 –

+0

@NicolBolasのOpenGL ES 1.1および2.0 – givi

答えて

1

最も簡単な方法は、CPU上のテクスチャを組み合わせて、再びGPUに新しいものをアップロードすることになります。

あなたが利用可能OES_blend_func_separateOES_framebuffer_object拡張子を持っている場合は、次の手順を行うことができますが:

  1. フレームバッファを作成します。
  2. それに新しいテクスチャを取り付け - これは、両方の組み合わせのテクスチャが含まれています。
  3. 全フレームバッファをカバーするレンダリングによって拡散マップを描画します。
  4. 最後に全体のフレームバッファを覆うクワッドように、第2のテクスチャ(透明度)をレンダリングします。ブレンドモードを次でそれを行うには、有効:

    glEnable(GL_BLEND); 
    glBlendFuncSeparateOES(GL_ZERO, GL_ONE, GL_ONE, GL_ZERO); 
    
1

テクスチャコンバイナがお手伝いします。あなたの拡散テクスチャが1.0アルファ値と不透明度のテクスチャが白い色を持っている場合は、この方法を使用します。

//Multiply textureID0 with textureID1 

glActiveTexture(GL_TEXTURE0); 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, textureID0); 
//Simply sample the texture 
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 
//------------------------ 
glActiveTexture(GL_TEXTURE1); 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, textureID1); 
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); 
//Sample RGB, multiply by previous texunit result 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); //Modulate RGB with RGB 
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS); 
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); 
//Sample ALPHA, multiply by previous texunit result 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE); //Modulate ALPHA with ALPHA 
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_PREVIOUS); 
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA); 

そうしないと、チューンの設定を組み合わせることができます。代わりにGL_MODULATEの設定GL_REPLACE。追加情報はこちら:http://www.opengl.org/wiki/Texture_Combiners

+0

Iは – givi

+0

それをGL_ALPHAを使用しているため、残念ながら不透明テクスチャは、この場合、(0,0,0)のRGB値を持つ 'RGB用GL_REPLACE'およびアルファによってGL_MODULATE'を置き換えます。 'GL_SOURCE#_ALPHA'の' GL_TEXTURE'で 'GL_PREVIOUS'を入れ替えてください。理論的には動作しなければならない。 – brigadir

+0

私はすでにそれを試みました。ここでの主な問題は、テクスチャ結合ではなくブレンドである。とにかくありがとう! – givi

関連する問題