面剔除和深度测试

Posted zhlabcd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面剔除和深度测试相关的知识,希望对你有一定的参考价值。

面剔除和深度测试之间的区别。
一般面剔除是应用于一些闭合物体(比方说立方体),由于视角的缘故,我们最多能同时看到一个物体的三个面,其他三个看不到,那么此时,我们就可以将另外三个看不到的面剔除掉。这就是面剔除,它节省了很多系统开销。
深度测试的话不仅用于单个物体(的两个相对面),也用于物体于物体之间。
面剔除总是会将back face丢弃(对于单个物体来说),而深度测试不会,只要Z-Value合理,它就都会渲染。一个明显的例子就是进入木箱内部看,开启了面剔除的木箱内部是空的,而深度测试照常渲染。

至于开启了面剔除的木箱子为什么内部是空的:默认情况下,我们将背向面(方向是顺时针)剔除,进入了木箱子内部之后,视角前面的箱子面贴图是背向面,而当我们转个视角,发现也是背向面(因为视角改变了,原本在外面看来的正向面变成了背向面,而原本的背向面依旧是背向面)。也就是说,其实你摄像机看不到的那个面其实是有渲染的,然而你看不到。

以上是关于面剔除和深度测试的主要内容,如果未能解决你的问题,请参考以下文章

我的渲染技术进阶之旅OpenGL ES 使用表面剔除和深度测试解决渲染3D模型的时候,出现背面黑点的问题

我的渲染技术进阶之旅OpenGL ES 使用表面剔除和深度测试解决渲染3D模型的时候,出现背面黑点的问题

Unity3D Shader编程之四 热带雨林篇: 剔除深度测试Alpha测试以及基本雾效合辑

OpenGL 深度测试不工作 (GLEW/SDL2)

3.OpenGL渲染技巧

光栅化:一种实际的实现