I have tried this code, but it does not work very well. I can’t change the alpha channel of the first texture and the color are not very good.
I can change the alpha channel of the second texture (1/alpha) but not its color.
The documentation is not very clear. GL_INTERPOLATE_ARB need 3 sources in the documentation, but what is it?
float color[4];
// 1st Texture
glActiveTextureARB(GL_TEXTURE0_ARB);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,texID);
// RGBA color
color[0]=0.5f; // It works (but not very well)
color[1]=0.5f; // It works (but not very well)
color[2]=0.5f; // It works (but not very well)
color[3]=0.7f; // Dosen't work
////// 1st texture with color (without alpha ?)//////////////
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_BLEND);
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR,color);
//////////////////////////////////////////////////////////
// 2nd Texture
glActiveTextureARB(GL_TEXTURE1_ARB);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,texID2);
// RGBA color
color[0]=1.0f; // Dosen't work
color[1]=0.0f; // Dosen't work
color[2]=0.0f; // Dosen't work
color[3]=0.5f; // it works (1/alpha)
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_BLEND);
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR,color);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB);
glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND0_RGB_ARB, GL_SRC_COLOR );
glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE1_RGB_ARB, GL_TEXTURE1_ARB );
glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND1_RGB_ARB, GL_SRC_COLOR );
glBegin(GL_QUADS);
glColor3f(1.0f,1.0f,1.0f);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB,
0.0f,
1.0f
);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB,
0.0f,
1.0f
);
glVertex3f( -1.0f, 1.0f, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB,
1.0f,
1.0f
);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB,
1.0f,
1.0f
);
glVertex3f( 1.0f, 1.0f, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB,
1.0f,
0.0f
);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB,
1.0f,
0.0f
);
glVertex3f( 1.0f, -1.0f, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB,
0.0f,
0.0f
);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB,
0.0f,
0.0f
);
glVertex3f( -1.0f, -1.0f, 0.0f);
glEnd();