FBO进行多纹理拼接

有个需求,要将多张纹理拼接到一张,可以设定拼接区域;

由于OGLES2.0,不支持glReadBudder(), glblitframebuffer().

就考虑采用Render to Texture的方式

(1)创建一张空Texture用于保存最终结果 defualtTex。

       glGenTextures(1, &defualtTex);
glBindTexture(GL_TEXTURE_2D, defualtTex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);

        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, a_iWidth, a_iHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);

(2)初始化FBO

glGenFramebuffers(1, &m_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, m_fbo);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,defualtTex, 0);
// now got back to the default render context
glBindFramebuffer(GL_FRAMEBUFFER, 0);

(3)每次往FBO指定区域绘制一次纹理

//以下根据需求多次调用

glBindFramebuffer(GL_FRAMEBUFFER, m_fbo);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_TesTex.GetTextureID(), 0);
Draw(tex);// 此处为绘制的纹理,

       glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);

(4)这样多张纹理就绘制到defualtTex中了,可以保存出来,也可以直接作为纹理渲染显示

unsigned char* output_image = new unsigned char[M_WIDTH * M_HEIGHT * 3];

        glBindTexture(GL_TEXTURE_2D,defualtTex);
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGB, GL_UNSIGNED_BYTE, output_image);


此时output_image保存了defualtTex中的数据,可以保存出看


代码稍后上传~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值