【六十四,高级OpenGL-01深度测试】

2020-04-05  本文已影响0人  Woodlouse

深度测试

深度测试(Depth Buffer)防止被遮挡住的面渲染遮挡面的前面,它由窗口自动创建,深度值存储为16,24或32位浮点数,一般是24位。

打开深度测试
glEnable(GL_DEPTH_TEST);

清除上一次的深度缓冲
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

设置深度掩码
glDepthMask(GL_FALSE);

设置深度测试函数
glDepthFunc(GL_LESS);

深度值精度值

线性精度

下面的 (线性) 方程把 z 值转换为 0.0 和 1.0 之间的值 :


线性精度方程

效果图如下:


效果图

实际正确的投影特性的非线性深度方程是和1/z成正比的,方程如下:


1/z成正比 1/Z曲线图

深度冲突

两个平面或三角形如此紧密相互平行深度缓冲区不具有足够的精度以至于无法得到哪一个靠前。结果是,这两个形状不断似乎切换顺序导致怪异出问题。这被称为深度冲突(Z-fighting)

解决方案

上一篇 下一篇

猜你喜欢

热点阅读