OpenGL中的深度、深度缓存、深度测试

1、深度
所谓深度,就是在opengl坐标系中,像素点z坐标距离摄像机的距离。摄像机可能放在坐标系的任何位置,那么,就不能简单的说z数值越大或越小,就是越靠近摄像机。
2、深度缓冲区
深度缓冲区原理就是把一个距离观察平面(近裁剪面)的深度值(或距离)与窗口中的每个像素相关联。
首先,使用glclear(gl_depth_buffer_bit),把所有像素的深度值设置为最大值(一般是远裁剪面)。
然后,在场景中以任意次序绘制所有物体。硬件或者软件所执行的图形计算把每一个绘制表面转换为窗口上一些像素的集合,此时并不考虑是否被其他物体遮挡。
其次,opengl会计算这些表面和观察平面的距离。如果启用了深度缓冲区,在绘制每个像素之前,opengl会把它的深度值和已经存储在这个像素的深度值进行比较。新像素深度值 farnormaldepth。这样,通过gldepthrange函数可以在透视投影有限观察空间中的任意区域进行深度测试。
另一个非常有用的函数是:glcleardepth (maxdepth);参数maxdepth可以是0.0到1.0范围内的任意值。glcleardepth用maxdepth对深度缓存进行初始化,而默认情况下,深度缓存用1.0进行初始化。由于在进行深度测试中,大于深度缓存初始值的多边形都不会被绘制,因此glcleardepth函数可以用来加速深度测试处理。这里需要注意的是指定了深度缓存的初始化值之后,应调用: glclear(gl_depth_buffer_bit); 完成深度缓存的初始化。
在深度测试中,默认情况是将需要绘制的新像素的z值与深度缓冲区中对应位置的z值进行比较,如果比深度缓存中的值小,那么用新像素的颜色值更新帧缓存中对应像素的颜色值。这种比较测试的方式可以通过函数:gldepthfunc(func);进行修改。其中参数func的值可以为gl_never(没有处理)、gl_always(处理所有)、gl_less(小于)、gl_lequal(小于等于)、gl_equal(等于)、gl_gequal(大于等于)、gl_greater(大于)或gl_notequal(不等于),其中默认值是gl_less。这些测试可以在各种应用中减少深度缓存处理的的计算。

智能家居重视云概念 无线技术将走下神坛
中国:机器人的安装量增长了44%
吉时利2002维修报错no comm link最新案例——安泰数字万用表维修
什么是悬浮触控技术?
RL78 / F1微控制器对于汽车应用的作用和使用简介
OpenGL中的深度、深度缓存、深度测试
FPGA芯片下游行业保持快速增长
距离实现《头号玩家》中的虚拟世界还有多远?
MGCP协议,MGCP协议内容有哪些?
脊髓损伤原来是因为这个(惊呆了)
系统芯片:走进生活每个角落
如何使用FPGA和CMOS制作一个低成本成像系统
使用MOSFET进行过流保护的电路原理图
广东省智能网联汽车与智能交通应用专业委员会正式成立
农药残留快速检测仪的使用需要注意什么
美国超静音侦察无人机XRQ-72A,促进低噪音和混合动力无人机的发展
未来AI将全面融入安防领域的方方面面,带领安防进入全面智能时代
松下将向本田供应车用锂离子电池
NKD:容器云集群与OS一体化运维利器
如何快速的高效的完成轧机牌坊修复