opengl中深度冲突问题以及几种可能的解决方案
来源:互联网 发布:纳米材料就业知乎 编辑:程序博客网 时间:2024/05/22 11:54
opengl中遮挡关系是通过z缓冲区+深度测试来实现的,而z缓冲区一般都有位数限制,通常为24位,也有32位。
这样在进行遮挡查询的时候,如果两个面距离非常近的话,那么这两个面的z值就可能会由于非常小而产生交替出现的现象,称为z-fighting,这就严重影响渲染质量。
通常的解决方法:
1.最常用的就是使用glPolygonOffset函数,对于两个非常近的面或者model我们可以将其分开渲染,先渲染一个然后通过glPolygonOffset函数设置一个偏移之后再渲染另一个,
这样的结果就是在一个的深度值写入深度缓冲之后,另一个可以加一个偏移量来保证在深度测试的时候两者的深度值达到明显区别的程度,从而正确的绘制两个object。
2.通常我们在计算depth的时候并不使用线性计算,即计算出的depth并非是点的z坐标线性转换而来,而是使用非线性变换,Fdespth = (1/z - 1/near) / (1/far - 1/near),这样就能保证在离近切面近的部分depth值更精确,当然我们也很容易推出,当把near值适当增大时,可以更好的保证距离较远处的精度值,所以可以通过增大near值来解决,但是这种方法对于解决单模型渲染还是效果不错的,但是对于多模型渲染也会有问题。
3.提升硬件精度,主要是提升z缓冲区的位数来达到增加精度的目的,这对于要求较高的场合确实是很好的选择。
1 0
- opengl中深度冲突问题以及几种可能的解决方案
- Android在ScrollView中嵌套ViewPager以及ListView的可能出现的问题以及解决方案
- OpenGL深度测试带来的问题----Z冲突
- SwipeRefreshLayout+RecyclerView冲突的几种解决方案
- 常见的几种浏览器问题以及解决方案
- androidStudio V4包冲突问题以及解决方案
- hadoop环境配置过程中可能遇到问题的解决方案
- hadoop环境配置过程中可能遇到问题的解决方案
- hadoop环境配置过程中可能遇到问题的解决方案
- hadoop环境配置过程中可能遇到问题的解决方案
- Libgdx中ScrollPane和Actor事件冲突问题的解决方案
- 缓存中常见的4种问题分析以及解决方案
- hadoop安装以及启动守护进程出现的几种问题及解决方案
- OpenGL安装过程中注意的几点问题
- OpenGL: 深度冲突(Z-Finghting or Depth Fighting)的解决
- OpenGL: 深度冲突(Z-Finghting or Depth Fighting)的解决
- crontab 不能正常执行的几种可能的问题
- CentOS 7编译安装php7.0.7以及可能遇到的问题的解决方案
- C/C++ const和volatile
- 黑马程序员_OC内存管理
- 蓝桥杯 古代赌局
- Windows DLL文件的加载过程[简述]
- 算法导论-递归插入
- opengl中深度冲突问题以及几种可能的解决方案
- Deep Learning by Andrew Ng --- Softmax regression
- 2014网页菜单新趋势——侧边栏菜单设计案例展示
- 贪心算法--看电视
- C语言常见的内存分配
- String to Integer(atoi)
- tcp状态参数设置
- android LayoutInflater.inflate()的参数及其用法
- OpenGL中使用Shader的基本步骤