Open GL的深度缓冲区理解

深度的相关含义

深度:顾名思义,即三维图形坐标中,物体坐标距离观察者(摄像机点)的远近距离描述,也就是3D坐标中的z值。

深度缓冲区:实质是一块GPU缓存上的内存区域,用于存储每个像素点(显示于屏幕的)的深度值,深度值越大,就离观察者越远。

深度缓冲区存在的意义:如下图,Open GL若关闭深度测试,在执行位图绘制操作时,先绘制了距离较近的绿色位图,又绘制了距离较远的红色位图,由于绘制顺序的原因,导致实际距离较远的红色位图显示在了上面。有了深度缓冲区,绘制操作的顺序不会影响到显示的层级关系。只要存在深度缓冲区,Open GL都会把像素的深度值写入到深度缓冲区,除非调用glDepthMask(GL_FALSE)禁止写入深度缓冲区。

深度测试:深度缓冲区(DepthBuffer)和颜⾊色缓存区(ColorBuffer)是对应的。颜色缓存区存储像素的颜⾊信息,而深度缓冲区存储像素的深度信息. 在决定是否绘制⼀一个物体表⾯面时,首先要将表面对应的像素的深度值与当前深度缓冲区中的值进⾏比较。如果大于深度缓冲区中的值,则丢弃这部分,否则利⽤这个像素对应的深度值和颜⾊色值,分别更新深度缓冲区和颜色缓存区. 这个过程称为”深度测试”。

深度测试的使用

绘制场景前,先清除Open GL状态机中的深度缓冲区与颜色缓冲区,防止之前的绘制场景影响当前要绘制的场景

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

开启深度测试

glEnable(GL_DEPTH_TEST);

清除深度缓冲区,每个像素的默认值为1.0,表示为深度最大值,深度值的范围为0~1,值越小表示越靠近观察者,值越大表示越远离观察者

深度缓冲区的写入开启关闭

//GL_TRUE 表示开启深度缓冲区写入    

//GL_FALSE 表示关闭深度缓冲区写入  

glDepthMask(GL_TRUE/GL_FALSE)

下面是未开启深度测试的甜甜圈旋转效果图

开启深度测试的甜甜圈旋转效果图

你可能感兴趣的:(Open GL的深度缓冲区理解)