查看: 1763|回复: 3

关于OpenGL 的FrameBuffer Object扩展的一个疑问

[复制链接]

该用户从未签到

发表于 2012-12-1 15:44:44 | 显示全部楼层 |阅读模式
在OpenGL之中,如果我们不去创建自己的FrameBuffer Object,则系统会缺少地创建一个FrameBuffer Object用于RenderTarget,于是我们所有的绘制最终都被写入到缺省的FrameBuffer Object对象之中了。
如果我们自己去创建一个FrameBuffer Object并且绑定它,则OpenGL将会将所有的绘制都会重定向写入到我们自己定义的FrameBuffer Object中。于是就有了这样一个问题,看代码:
  1. GLuint framebuffer;//the framebuffer object
  2. GLuint color_texture0;
  3. GLuint depth_texture0;
  4. GLuint stencil_rendererbuffer; //在OpenGL中还不支持模板纹理,所以framebuffer object的GL_STENCIL_ATTACHMENT_EXT暂时只能绑定RendererBuffer了
  5. GLenum status;

  6. glGenFrameBuffersEXT(1,&framebuffer);
  7. glBindFrameBufferEXT(GL_FRAMEBUFFER_EXT,framebuffer);

  8. glGenTextures(1,&color_texture0);
  9. glBindTexture(GL_TEXTURE_2D,color_texture0);
  10. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  11. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTR,GL_LINEAR);
  12. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
  13. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);

  14. //...
  15. glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,viewport_width,viewport_height,0,GL_RGBA,GL_UNSIGNED_BYTE,0);//在OpenGL超级宝典中有相关的例子,最后一个参数可以为0
  16. glFrameBufferTexture2DEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0_EXT,GL_TEXTURE_2D,color_texture0,0);

  17. status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
  18. if(status != GL_FRAMEBUFFER_COMPLETE_EXT)
  19. {
  20.     //错误处理
  21.    return false;
  22. }
复制代码
上面的代码没有问题的
但问题是,像上面这样只绑定了颜色缓冲区,那么在绘制的时候,深度信息与模板值绘制到哪里去了呢,是仍然绘制在缺省的FrameBuffer Object所关联的深度缓冲区与模板缓冲区中还是丢掉了?

该用户从未签到

 楼主| 发表于 2012-12-1 17:04:17 | 显示全部楼层
还有一个问题就是在创建深度纹理的时候,出现了个问题.
  1. glTexImage2D(GL_TEXTURE_2D,0,GL_DEPTH_COMPONENT,viewport_width,viewpor_height,0,GL_DEPTH_COMPONENT,GL_UNSIGNED_BYT,0);
复制代码
这个函数无论倒数第二个参数是什么都会调用失败,返回的结果是GL_INVAID_ENUM,真是不明白

该用户从未签到

发表于 2012-12-3 08:56:29 | 显示全部楼层
是跟FBO相关联的depthbuffer,丢掉depth 渲染怎么能正确

该用户从未签到

 楼主| 发表于 2012-12-3 16:26:41 | 显示全部楼层
看来我问了一处低智商的问题了...
但是在RenderMonkey中有个Renderable Texture,当一个pass中添加了一个Render Target之后,其中的深度值与模板值会不会自动被渲染到一个Renderable Texture或者Renderable Buffer之中了呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表