前面记录了一下存在的问题和大致的解决方法
OpenGL:关于获取渲染结果的深度信息的问题_六月的翅膀的博客-CSDN博客


下面就验证一下

先定义一个指针变量和一个成员函数

GLfloat* depth_value = NULL;//保存缓冲区里的深度信息void updateDepthValue();

成员函数具体为

void GlWidget::updateDepthValue()
{int WINDOW_WIDTH = (int)_width;int WINDOW_HEIGHT = (int)_height;glReadPixels(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT,GL_DEPTH_COMPONENT, GL_FLOAT, depth_value);
}

注意,这里获得的深度值是0-1之间的(我查看的结果是非常接近1,大都在0.998以上,其实就是非线性变换的结果),就是Fdepth

这里关于深度值有个非线性变换,上图。这个非线性变换的曲线可以画出来看一下(这个在线画图的工具挺好用:数字王国 - 数学工具)

大致形状就是这种,x轴越小表示具体观察者越近,相应的映射的范围就越大(即x轴正方向所有点全部映射到y轴0-1之间,而x轴0-2这段区间就占了y轴的90%左右了),这样变换的目的是越远的物体,需要的精度就可以越宽松一点。

其中near和far在我这里是自定义写入的


 near=0.01,far=10,将Fdepth、near和far代入,就可以求得Z,这个Z就是在near-far这个区间。

在paintGL()函数结尾调用updateDepthValue

void GlWidget::paintGL()
{...//...//渲染部分updateDepthValue();}

然后通过一个按钮连接槽函数,每次按钮按下时,查看当前深度信息

for (int y = WINDOW_HEIGHT-1; y >=0 ; y--){for (int x = 0; x < WINDOW_WIDTH; x++){GLfloat iii=depth_value[(y*WINDOW_WIDTH + x)];uchar RGB_value = 1/(-99.9*iii+100);if(y==WINDOW_HEIGHT/2)qDebug()<<RGB_value ;//蓝色tmpBIT[0] = RGB_value;//绿色tmpBIT[1] = RGB_value;//红色tmpBIT[2] = RGB_value;tmpBIT[3] = 255;//不起作用tmpBIT += 4;}}

输出的结果如下:10代表距离无穷远

然后可以把结果再次归一化到255之间,将深度信息保存为图像

void GlWidget::saveFrameBuff_2(const char *fileName)
{int WINDOW_WIDTH = (int)_width;int WINDOW_HEIGHT = (int)_height;QImage* img=new QImage(WINDOW_WIDTH,WINDOW_HEIGHT,QImage::Format_ARGB32);uchar* tmpBIT = img->bits();for (int y = WINDOW_HEIGHT-1; y >=0 ; y--){for (int x = 0; x < WINDOW_WIDTH; x++){GLfloat iii=depth_value[(y*WINDOW_WIDTH + x)];uchar RGB_value = 1/(-99.9*iii+100)/10*255;if(y==WINDOW_HEIGHT/2)qDebug()<<RGB_value;//蓝色tmpBIT[0] = RGB_value;//绿色tmpBIT[1] = RGB_value;//红色tmpBIT[2] = RGB_value;tmpBIT[3] = 255;//不起作用tmpBIT += 4;}}img->save("a.png");
}

渲染图

深度图


相关文章:

OpenGL Projection Matrix

OpenGL投影矩阵(Projection Matrix)构造方法 - 知乎

OpenGL中的深度值winz与相机空间z值的关系推导_lysc_forever的博客-CSDN博客_opengl深度值与z值

OpenGL_深度测试_线性深度值_会敲code的猫的博客-CSDN博客_opengl深度值

opengl 投影矩阵转换获取得到near far,视场角等方法_XR风云的博客-CSDN博客

OpenGL:关于获取渲染结果的深度信息的问题(二)相关推荐

  1. OpenGL:关于获取渲染结果的深度信息的问题

    前面已经记录了从显存中获取渲染结果并保存为图像的方法 OpenGL:如何从缓存中读取颜色.深度信息[转]_六月的翅膀的博客-CSDN博客 并已经验证了上述方法可以完美的保存图像,但是保存深度信息部分还 ...

  2. Asp.net 获取泛微OA个人信息并生成二维码名片vCard

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.二维码名片vCard是什么? 二.使用步骤 1.引入库 2.读取OA数据 3.生成名片 4.名片效果 前言 记录学 ...

  3. 华为AREngine根据深度图获取深度信息

    我们知道华为AREngine可以根据接口acquireDepthImage()获取得到深度图,获取得到的深度图是DEPTH16格式的,AREngine中又没有给出例子怎样根据深度图求得深度信息,吐槽一 ...

  4. matlab实现获取tof,一种结合TOF技术和双目视觉的深度信息获取装置及其方法与流程...

    本发明涉及深度传感器.机器视觉.三维重建.双目立体视觉.TOF技术领域,尤其涉及一种结合TOF技术和双目视觉的深度信息获取装置及其方法. 背景技术: 近年来,深度信息在传感器中获得了越来越多的应用.获 ...

  5. 利用摄像机如何获取物体的深度信息

    简而言之,其原理就是使用两个平行的相机,对空间中的每个点三角定位.通过匹配左右两个相机中成像点的位置,来计算对应三维点在空间中的距离.学术界对双目匹配恢复深度图研究有很长的历史,在NASA火星车上就开 ...

  6. 《OpenGL 模型》 渲染出帅气的暗影战士

    模型 Assimp 流程 网格 模型 效果 Assimp 3D建模工具,可以让艺术家创建复杂的形状,Assimp库用于加载,如加载obj格式的文件到我们的程序之中,下载CMAKE用于构建该库(会有很多 ...

  7. Android OpenGL ES视频渲染(一)GLSurfaceView

    相关文章:Android OpenGL ES视频渲染(二)EGL+OpenGL Android中视频渲染有几种方式,之前的文章使用的是nativewindow(包括softwareRender).今天 ...

  8. OPENGL ES 2.0 知识串讲 (8) ——OPENGL ES 详解II(传入绘制信息)

    上节回顾 上一节讲述了如何通过 OpenGL ES 给 GPU 关联一套可以使用的 shader,这 一套 shader 是被放在一个 program 中当作一个整体供 GPU 使用的.那么 GPU ...

  9. android 视频播放滤镜,用openGL ES+MediaPlayer 渲染播放视频+滤镜效果

    之前曾经写过用SurfaceView,TextureView+MediaPlayer 播放视频,和 ffmpeg avi解码后SurfaceView播放视频,今天再给大家来一篇openGL ES+Me ...

最新文章

  1. 开源.net开发平台SharpDevelop挑战VS2008
  2. [转]31个让你变聪明的方法
  3. 【Python】玫瑰花绘制
  4. 应用程序进程启动过程
  5. 音视频开发(42)---H.264 SVC 简介
  6. 4.10 风格代价函数
  7. 重庆市谷歌卫星地图下载
  8. linux中ifi_info的英文全称,linux下里面如何获取网卡的实时网速
  9. 杭州最新公交线路一览(91-100)
  10. [JZOJ1320] 【Usaco2009 gold 】拯救奶牛
  11. 路由器管理android,ASUS Router app-华硕路由器管理软件(ASUS Router)下载v2.0.0.6.16 官方安卓版-西西软件下载...
  12. C++ 线段树,树状数组
  13. 无法设置默认打开方式怎么办
  14. Zabbix自动发现和自动注册
  15. 条码打印机打印出白纸怎么回事
  16. 阿里云免费SSL证书没有了?有!(免费证书新攻略)
  17. 印度加强网络管理或部署网猫软件屏蔽Facebook
  18. 欲罢不能 推荐,刷屏时代如何摆脱行为上瘾
  19. Android AssetManager 1
  20. Incorporating visual features into word embeddings:A bimodal autoencoder-based approach

热门文章

  1. 【开发环境专题一】Maven环境搭建
  2. 【微信插件】P3微信插件测试使用步骤
  3. Nginx+Tomcat+Memcached集群 【测试成功】
  4. 读书笔记—《销售铁军》随记4
  5. 通过反射--操作运行时类中的指定的属性/方法
  6. JS 中的事件冒泡与捕获
  7. 《DeepLearning.ai 深度学习笔记》发布,黄海广博士整理
  8. 关于tar无法解压缩问题
  9. 从零开始 - iOSRTMP推流篇(1)
  10. .xyz域名总量12强:西数连续夺冠 联动天下跌至榜尾