OpenGL之圖像合成器

OpenGL之圖像合成器

對圖像(紋理)合成你可以得到圖像變換的動畫效果,如『燈火』.通過讀取兩張圖像,然後對其進行插值運算,最後生成平滑過渡的效果.演示程式下載:

對兩個或者多個紋理進行組合:

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_COMBINE);

紋理平滑過渡

GLfloat texEnvColor[] = {0.0f,0.0f,0.0f,combiner->interpol };

glActiveTexture(GL_TEXTURE1);

glTexEnvfv(GL_TEXTURE_ENV,GL_TEXTURE_ENV_COLOR, texEnvColor);

載入紋理單元0

Load_File_Texture(&combiner->texture0, hInstance, filename0);

激活紋理單元0

glActiveTexture(GL_TEXTURE0);

綁定紋理0

Bind_Image_Texture(&combiner->texture0);

glEnable(GL_TEXTURE_2D);

將紋理傳遞到下一個單元

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

載入紋理1

Load_File_Texture(&combiner->texture1, hInstance, filename1);

激活紋理單元1

glActiveTexture(GL_TEXTURE1);

綁定紋理1

Bind_Image_Texture(&combiner->texture1);

glEnable(GL_TEXTURE_2D);

設置紋理組合模式

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_COMBINE);

使用插值組合函式

glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);

設置成紋理單元0的輸出

glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS);

設置成當前紋理圖像

glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE);

為紋理單元設置ARG2

glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE2_RGB, GL_CONSTANT);

使用alpha常數修改RGB分量

glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA);

評論