游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3151|回复: 2

用GLSL将已有的img2和img1两个纹理相减后如何让它成为一个

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-11-14 22:57:00 | 显示全部楼层 |阅读模式
当我使用 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();

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2008-11-14 22:58:00 | 显示全部楼层

Re: 用GLSL将已有的img2和img1两个纹理相减后如何让它成为一

期待中,任何回复都值得感激

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-11-15 01:17:00 | 显示全部楼层

Re:用GLSL将已有的img2和img1两个纹理相减后如何让它成为一

使用FBO 将img0的纹理绑定到FBO上 这样渲染结果就直接到img0
或者 启用FBO 在渲染完成以后 用glCopySubImage2D() 将结果替换到img0上。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 21:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表