OPENGL深度缓存精度问题及解决

    前段时间做的小项目需要读取场景的深度图,本打算使用OPENGL自带函数glReadPiexles()去实现此功能,但OPENGL中只提供读取单个像素处的深度信息,不支持读取整个深度缓存的功能。且当时感觉读取到深度是个单字节的,也看到网上有人说深度缓冲和模板缓冲共用4个字节,就自己使用GLSL改写了渲染管道,将深度信息直接渲染出来,这种方法可生成32位精度的深度图。这段时间又翻阅了OPENGL,发现深度缓冲并不是像网上某些人说的(他们可能指的很久以前或者其它渲染引擎)只占一个或两个字节。OPENGL深度缓冲的可为8,16,24,32都可以,但GLUT没有提出直接 设置方式,自动选择最优的深度位数。而我们若想改变深度缓冲的每个像素所占字节,有以下两种方案:  

    一,使用WINDOWS下的提出的设置渲染场景的方式,设置像素格式,可实现深度位设置。.

  pfd.cDetpBit=24;

  二,使用帧缓存P Frame Buffer为帧缓存设置深度缓存时设置深度位数 //创建FBO


  glGenFramebuffersEXT(1, &fbo);
  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
  // 创建深度缓存
  glGenRenderbuffersEXT(1, &depthBuffer);
  glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthBuffer);
  glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT32, width, height);//设置为32
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值