在OpenGL中,每个物体的每个片元(像素)均存在一个深度缓冲区(其范围为0~1之间)。对于glClearDepth API可以为深度缓冲区指定一个临界值。
如果设置了glClearDepth:
- 如果设定值为1:
这个时候如果绘制物体, 由于物体的每个像素的深度值都小于等于1, 所以整个物体都会显示了出来。 - 如果设定值为0:
因为绘制物体的每个像素的深度值都大于等于0, 所以整个物体都不可见。 - 如果设定值为0.5:那么物体就只有深度小于0.5的那部分才可见;
在现实生活中,一个实心物体挡在另外一个实心物体的前面, 后面的那个物体有部分会被遮盖掉。
而我们刚才说道,可以通过glClearDepthf
函数设置默认的 “深度换中去的临界值”
。假如设定值为0.6f。那么在进行绘制时,通过将待绘制的像素点的深度值与“设定值0.6f”
进行比较,将符合条件的像素绘制出来,不符合条件的不绘制。
- 如果glDepthFunc启用了GL_LESS:那么前面物体挡住后面物体。
由于前面物体深度值小(靠近摄像机), 所以会被绘制出来, 后面的物体被挡住的像素就被忽略掉了 - 如果启用了GL_GREATER:那么后面物体将挡住前面物体。
一、glClearDepthf
glClearDepthf — 指定深度缓冲区的清除值
指定深度缓冲区的清除值。
该值将被用