什么是深度测试?

深度是指该像素点在3D世界中距离摄像机位置的Z值。深度测试就是将距离观察者最近(当观察者在Z轴的正面,z值越大越靠近观察者,当观察者在Z轴的负面,z值越小越靠近观察者)的值和其对应的颜色值(纹理数据)保存起来,最后显示到屏幕上的就是这个值。

为什么要用深度测试?

我们在绘制的时候要判断哪个部分要显示哪个部分要隐藏,即隐藏面消除问题,早期使用油画家算法(先绘制较远的图形,在绘制较近的图像)来解决这一问题。但是其在存在一些缺陷(当几个图像相互叠加的时候油画家算法无法处理绘制)。于是,OpenGL使用深度测试来解决隐藏面消除问题。

如何使用深度测试?//开启

glEnable(GL_DEPTH_TEST);

//glDepthFunc(GL_LESS); //设置比较的参数

//关闭

glDisable(GL_DEPTH_TEST);

//在每次绘制之前情况深度缓冲区

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// 情况颜色缓冲区和深度缓冲区

那么深度测试是不是完全没有问题呢?

深度测试存在ZFighting等问题,就是我么一在游戏或者大型网页的地方偶尔会看到人物会一闪一闪的(不能正确的判断同一平面的绘制的深度值,导致深入测试结果不可预测,会一闪一闪的显示)。

优化ZFighting问题(使用多边形偏移)

第一,使用精度更高的机器,精度越高越难出现ZFighting

第二,使用多边形偏移开启(三种方式,要对应图形的填充方式点、线、面)

glEnable(GL_POLYGON_OFFSET_POINT); //对应GL_POINT

// glEnable(GL_POLYGON_OFFSET_LINE); //对应GL_LINE

// glEnable(GL_POLYGON_OFFSET_FILL); //对应GL_FILL

//两个参数是指便宜的大小,一般指定两个都为-1,交给系统进行偏移计算。

glPolygonOffet(-1.0, -1.0);

关闭

glDisable(GL_POLYGON_OFFSET_FILL);

opengl 深度详解_OpenGL中的深度测试相关推荐

  1. opengl 深度详解_一步步学OpenGL(23) -《阴影贴图1》

    教程 23 阴影贴图1 原文: http://ogldev.atspace.co.uk/www/tutorial23/tutorial23.html CSDN完整版专栏: https://blog.c ...

  2. opengl 深度详解_一步步学OpenGL(1) -《打开一个窗口》

    注意本教程中需要使用的是freeGLUT(GLUT太老会有潜在危险)窗口库和GLEW扩展库. vs2013配置freeGLUT3.0:vs2013 配置 freeglut3.0(opengl的窗口系统 ...

  3. OpenGL纹理详解

    OpenGL纹理详解 现实生活中,纹理最通常的作用是装饰我们的物体模型,它就像是贴纸一样贴在物体表面,使得物体表面拥有图案.但实际上在OpenGL中,纹理的作用不仅限于此,它可以用来存储大量的数据,一 ...

  4. 详解Vue中watch的高级用法

    转载自  详解Vue中watch的高级用法 我们通过实例代码给大家分享了Vue中watch的高级用法,对此知识点有需要的朋友可以跟着学习下. 假设有如下代码: 1 2 3 4 5 6 7 8 9 10 ...

  5. 三维空间刚体运动5:详解SLAM中显示机器人运动轨迹及相机位姿(原理流程)

    三维空间刚体运动5:详解SLAM中显示机器人运动轨迹及相机位姿(原理流程) 一.显示运动轨迹原理讲解 二.前期准备 三.git管理子模块及克隆源代码 1.学习使用Git Submodule 2.克隆源 ...

  6. Android openGl开发详解(二)

    https://zhuanlan.zhihu.com/p/35192609 Android openGl开发详解(二)--通过SurfaceView,TextureView,GlSurfaceView ...

  7. Android openGl开发详解(二)——通过SurfaceView,TextureView,GlSurfaceView显示相机预览(附Demo)

    最近公司在做自定义相机这一块,之前使用的是第三方,后来需求变更,第三方不支持添加动态贴纸,所以只能自己扩展.当然网上有很多例子,但是关于添加动态贴纸的例子几乎找不到,反正我是没找到(欲哭无泪).当然, ...

  8. 深度 | 详解可视化利器t-SNE算法:数无形时少直觉

    T 分布随机近邻嵌入(T-Distribution Stochastic Neighbour Embedding)是一种用于降维的机器学习方法,它能帮我们识别相关联的模式.t-SNE 主要的优势就是保 ...

  9. 深度详解 Android 之 Context

    文章目录 一. 简介 1.1 Context 概述 1.2 Context 体系结构 1.3 Context 作用域 1.4 总结 二. Context 详解 2.1 Application Cont ...

最新文章

  1. bzoj 4771: 七彩树 树链的并+可持久化线段树
  2. jQuery:has()和jQuery:contains()及jQuery:empty
  3. 【大厂攻略】Android开发3年当了2年咸鱼每天CRUD,复习2个月幸运拿下美团offer!
  4. 150m虚拟主机容量不足
  5. servlet web.xml配置详解
  6. java抽象类和接口总结
  7. tcp长连接和保活时间
  8. c语言学生对老师的评教系统,学生对老师的评价
  9. v-model数据绑定分析
  10. Spring之事务控制
  11. 学习电商美工设计毕业以后可以干什么
  12. arduinouno的地是相连的吗_德阳马自达3方向机,宝马X7电子方向机进水可以修吗
  13. GNN从入门到精通 -- Graph Embedding (2)
  14. 油画的发展过程经历了几个时期?
  15. 2020年12月计算机一级考试,5省市已公布2020年12月计算机等级考试时间,切勿错过!...
  16. 计算机应用素描色彩,美术统考素描、色彩、速写考场技巧全攻略
  17. 【洛谷】 P1240 诸侯安置(递推)
  18. 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录(转)
  19. Google主页设计专利
  20. android l 论坛,同步更新魔趣源码Android-L编译

热门文章

  1. Linux C :Linux 下第一个C程序
  2. 类加载、类加载器、反射
  3. Linux 日志 klogd,菜鸟学Linux 第038篇笔记 日志系统 syslogd,klogd
  4. github上fork原项目,如何将本地仓库代码更新到最新版本?
  5. 启明云端分享| sigmastar ssd201/ssd202d _Uboot升级指南
  6. Arduino IDE 如何添加 ESP32 开发板?
  7. oracle一个表更新另一个表多列,oracle sql更新表中多列值,值是从其它表中查询(select)得出...
  8. html5 自动生成迷宫,HTML5 Canvas随机迷宫生成动画
  9. 计算机应用基础测试成绩截图,计算机应用基础测试题图文稿.docx
  10. matlab朴素贝叶斯手写数字识别_TensorFlow手写数字识别(一)