OpenGL中隐藏面消除解决方案

2019-05-19  本文已影响0人  zhongxiaoyue

什么是隐藏面消除

实现隐藏面消除的解决方案

1.油画算法
2.正背面剔除(Face Cuilling)

问题:如何告诉OpenGL 你绘制的图形,哪个面是正面,哪个面是背面?
答:通过分析图形的顶点数据绘制顺序。
正面:按照逆时针顺序连接顶点数据。
背面:按照顺时针顺序连接顶点数据。


正背面剔除
//开启深度测试
glEnable(GL_DEPTH_TEST);

开启深度测试后的圆环:


开启深度测试后
//开启多边形偏移:
glEnable(GL_POLYGON_OFFSET_FILL);
//指定偏移量
glPolygonOffset(-1,-1);

ZFighting闪烁问题预防:
1.不要将两个物体靠得太近,避免渲染时叠在一起。
2.尽可能将近裁剪面设置的离观察者远一点,因为近裁剪面深度的精确度是很高的。
3.使用更高位数的深度缓冲区,通常使用的深度缓冲区是24位,现在有一些硬件使用32位的缓冲区,使精确度得到提高。

上一篇 下一篇

猜你喜欢

热点阅读