|
|
当我使用 GLSL将 已有的img2 (设成GL_TEXTURE2_ARB) 和 img1 (设成GL_TEXTURE1_ARB) 两个纹理对应的元素分别相减 然后贴到一个四边形上后,我如何保存这个相减的图像,让它成为一个新的纹理图像img0呢?
用什么方法?我首先想到了用FBO,那么用GLSL本身能实现吗?在GLSL里如何把纹理相减的结果变成纹理图像img0呢?
用下面的代码 ,我只能把img2和img 相减的结果贴到一个四边形上,而我想要的是让它成为 纹理 img0
//fragment shader code
uniform sampler2D img2;
uniform sampler2D img1;
vec4 object2 ;
vec4 object1 ;
object2 = texture2D(img2, gl_TexCoord[2].xy);
object1 = texture2D(img1, gl_TexCoord[1].xy);
gl_FragColor= object2 - object1 ;
//main programe code
glUseProgram(progObj);
glUniform1i(uniform_img2_Location, 2);
glUniform1i(uniform_img1_Location, 1);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glBegin(GL_QUADS);
glMultiTexCoord2f(GL_TEXTURE2_ARB,0.0f, 0.0f);
glMultiTexCoord2f(GL_TEXTURE1_ARB,0.0f, 0.0f);
glVertex2f(-1.0f, -1.0f);
glMultiTexCoord2f(GL_TEXTURE2_ARB,1.0f, 0.0f);
glMultiTexCoord2f(GL_TEXTURE1_ARB,1.0f, 0.0f);
glVertex2f(1.0f, -1.0f);
glMultiTexCoord2f(GL_TEXTURE2_ARB,1.0f, 1.0f);
glMultiTexCoord2f(GL_TEXTURE1_ARB,1.0f, 1.0f);
glVertex2f(1.0f, 1.0f);
glMultiTexCoord2f(GL_TEXTURE2_ARB,0.0f, 1.0f);
glMultiTexCoord2f(GL_TEXTURE1_ARB,0.0f, 1.0f);
glVertex2f(-1.0f, 1.0f);
glEnd(); |
|