I have four textures and use four texture units,one as scale ,others as texture,like this:
(Let t0 , t1 ,t2 ,t3 hold rgb(note:[0,255]) , and td as result(display on screen))
float sum = t0.r + t0.g + t0.b ;
float scal_r = t0.r/sum ;
float scal_g = t0.g/sum ;
float scal_b = t0.b/sum ;
td.r = t1.rscal_r + t2.rscal_g + t3.rscal_b;
td.g = t1.gscal_r + t2.gscal_g + t3.gscal_b;
td.b = t1.bscal_r + t2.bscal_g + t3.b*scal_b;
What can do with glTexEnvf() function ?
glActiveTextureARB(GL_TEXTURE0_ARB);
glBindTexture(GL_TEXTURE_2D, texid0);
glTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_REPLACE);
glActiveTextureARB(GL_TEXTURE1_ARB);
glBindTexture(GL_TEXTURE_2D, texid1);
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_COMBINE_EXT);
glTexEnvi(GL_TEXTURE_ENV,GL_COMBINE_RGB_EXT,GL_INTERPOLATE_EXT);
glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE0_RGB_EXT,GL_PREVIOUS_EXT);
glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND0_RGB_EXT,GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE1_RGB_EXT,GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND1_RGB_EXT,GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE2_RGB_EXT,GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND2_RGB_EXT,GL_SRC_ALPHA);
.
.
.
Thanks any way.
Sorry for my poor English.