常见渲染的时候会出现系统不清楚哪些地方应该渲染,哪些地方该渲染,出现了屏幕乱七八糟的情况,然后这种情况叫做隐藏面消除
对于这种情况最原始的解决方式就是油画法,一层一层的画上去,下面的就自然会被覆盖点,但效率极低
正背面消除 因为在图形里面人最多也就能看到三个面,而看不到的面完全剔除掉就是所谓的正背面剔除,同时也能提高片元着色器的效率,正背面最大的问题就是如何确定正面和背面,在渲染的时候一般来说顶点连接顺序1-2-3就是正面,1-3-2这种顺序的就是背面
//1.开启背面剔除
glEnable(GL_CULL_FACE);
//2.指定背面
glFrontFace(GL_CCW);
//3.切除哪个面
glCullFace(GL_BACK);
代码很多,但核心代码就上面三段,但感觉不是很好用,实际效果还是会有问题,在3D旋转的时候会有凹槽
深度测试
深度并不是日常开发中的底层,或者说开发的比较贴近底层,而是z值, 3D图形中有x,y,z三个坐标,x,y是长度和宽度来表示的话,z则是深度
都知道3D模型是有了深度才有3D效果的,只有x,y值的模型3D就会很模模糊糊,给人感觉好像是3D好像又不是
深度缓冲区 相对应的是顶点缓冲区,顶点缓冲区存储的是x,y的值,深度缓冲区则存储的是z值也就是深度值,存储的是每一个像素点的深度值,深度值越大3D效果里面的内容就离人眼看到的越远
因为深度缓存区的原理就是在一个像素点只保存一个值,即是这个深度值越小则保留谁的,大的则不考虑了,所以能解决重叠问题,以及光影不知道显示谁的问题,这里只显示实际覆盖面的上层,比如翻转后,原本远的变近了,近的变远了,则重新刷新
而深度测试就是在绘制的时候拿出当前的值和深度缓冲区对比深度信息,如果表面的比深度缓冲区的小,则更新缓冲区,如果要大,则舍弃这一部分,代码也相