1.坐标转换
2. 关键代码解析
3. 深度测试
深度:像素点距离观察者的z值。
深度缓冲区:存在显存中。每一个像素点对应一个深度缓冲区中的深度值。
深度测试:深度缓冲区和颜色缓冲区是对应的。开启深度测试,在绘制每个像素之前,OpenGL会将像素点的深度值和深度缓冲区中的深度值进行比较,像素点的深度值如果更靠近观察者,则更新深度缓冲区的深度值和对应颜色缓冲区的颜色值,否则将之丢弃,不进行绘制。
开启深度测试:glEnable(GL_DEPTH_TEST);
关闭深度测试:glDisable(GL_DEPTH_TEST);
4. ZFighting
开启深度测试可能会带来潜在的风险。当两个像素点的z值非常接近时,由于精度限制,系统不能识别出谁大谁小时,可能会出现交替显示的闪烁。这就是ZFighting。
如何解决ZFighting?“多边形偏移”。将间隔非常接近的像素产生微妙的间隔。
glEnable(GL_POLYGON_OFFSET_FILL)
不同模式对应的参数:
GL_POINT :GL_POLYGON_OFFSET_POINT
GL_LINE:GL_POLYGON_OFFSET_LINE
GL_FILL:GL_POLYGON_OFFSET_FILL
5. 颜色混合
打开颜色混合:glEnable(GL_BlEND);
关闭颜色混合:glDisable(GL_BlEND);
设置颜色混合因子:glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);