我想你可以使用OpenGL ES 1.1使用多紋理和GL_COMBINE
環境。首先,我們使用任何你想要的標準環境的顏色紋理:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, rgbTexture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); //or maybe GL_REPLACE
那麼對於阿爾法紋理,這勢必會第二單元中,我們只取前一個階段的彩色(顏色紋理),只使用紋理的alpha。
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, alphaTexture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTenEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); //default
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE); //or maybe GL_REPLACE
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE); //default
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); //default
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA, GL_PREVIOUS); //default
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA); //default
如果我誤解你了,你不希望使用多重紋理(既不片段着色),那麼你將無法在渲染過程中這兩種材質結合起來。也許採用多通道技術,但我不確定這是否會以性能方式向您購買任何產品。
沒有完全呈現兩個紋理(因此使用多重紋理),你會不會讓他們合併,因爲紋理是唯一未壓縮每次被讀取特定片段的時間。所以你不能只是解壓縮整個紋理併合併成一個。你可以做到這一點,但你最終會得到一個標準的未壓縮紋理,它不會爲你購買任何東西。片段着色器(przemo_li的答案)或固定功能multitexturing(我的答案)是唯一的途徑。 –