渲染到纹理(Render to texture):使用FrameBuffer

弄了一天,找啊找,没找到什么例子,幸好irrlicht里有个使用FrameBuffer渲染到纹理的例子,看了下,一copy,哇,ok了啊。

主要代码:

 // generate color texture
 glGenTextures(1, &TextureName);
 glBindTexture(GL_TEXTURE_2D, TextureName);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width,height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

 // generate depth texture
 glGenTextures(1, &DepthRenderBuffer);
 glBindTexture(GL_TEXTURE_2D, DepthRenderBuffer);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

 glGenFramebuffersEXT(1, &ColorFrameBuffer);
 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, ColorFrameBuffer);
 
 // attach color texture to frame buffer
 glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
  GL_COLOR_ATTACHMENT0_EXT,
  GL_TEXTURE_2D,
  TextureName,
  0);
 // attach depth texture to depth buffer
 glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
  GL_DEPTH_ATTACHMENT_EXT,
  GL_TEXTURE_2D,
  DepthRenderBuffer,
  0); 

不过,发现上面使用的DepthBuffer也是纹理,而我开始找到的是另一种方式的,如下:

 //depth buffer
 glGenRenderbuffersEXT(1, &m_db);
 glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_db);
 glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, width, height);
 //bind frame and depth buffer
 glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, m_db);

如果使用这个代替上面的depthBuffer的纹理时,使用glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)会报GL_FRAMEBUFFER_UNSUPPORTED_EXT。

现在也还不知道,希望有谁知道的可以给些留言,谢谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值