深度缓冲

本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!

在计算机图形学中,深度缓冲(Depth Buffer)又称Z缓冲区,是一个与渲染目标有相同大小的缓冲,这个缓冲记录每个像素的深度。深度缓冲的目的在于正确地生成通常的深度感知效果:较近的物体遮挡较远的物体。

中文名
深度缓冲
外文名
Depth Buffer
分    类
计算机图形学
别    名
Z缓冲区(Z-buffer)

通常认为深度缓冲概念的发明主要归功于 艾德文·卡特姆,虽然 Wolfgang Straßer 也在 1974年 所写的博士论文中提到了同样的思想。深度缓冲思想的出现主要是为了正确的生成深度感知效果:较近的物体遮挡较远的物体。

深度缓冲记录着每个像素点的深度,在绘制每个像素之前,如果启用了深度缓冲,系统会把它的深度值和已经存储在缓冲里的这个像素的深度值进行比较。如果新像素深度值小于原先像素深度值,则新像素值会取代原先的;反之,新像素值被遮挡,它的颜色值和深度将被丢弃。例如在你的场景中有两个矩形:一个是蓝色的而另一个是绿色的,并且设蓝色的Z值为10,绿色的Z值为20(摄像机在原点),这就意味着蓝色的在绿色的前面。如此对于这两个图形重合的像素点,根据深度缓冲绿色的将遮住蓝色的部分。深度缓冲能确定哪个对象在另一个对象的前面。

像素的深度值是由视矩阵和投影矩阵决定的。在近裁平面上的像素深度值为0,在远裁平面上的像素的深度值为1。假设摄像机在原点,那么深度值越小的离摄像机越近。

时间: 2024-10-19 00:15:07

深度缓冲的相关文章

现代OpenGL教程 03 - 矩阵,深度缓冲,动画

http://huangwei.pro/2015-08/modern-opengl3/ 本文中,我会将不会动的2D三角形替换为旋转的3D立方体.你会看到这样的效果: 现在我们终于能在屏幕上搞点有趣的东西了,我放了更多的动图在这里:http://imgur.com/a/x8q7R 为了生成旋转立方体,我们需要学些关于矩阵的数学,用于创建透视投影,旋转,平移和"相机"概念.我们还有必要学习些深度缓冲,和典型的随时间改变的3D应用,比如动画. 获取代码 所有例子代码的zip打包可以从这里获取

webgl 深度缓冲

深度缓冲很强大,用起来很简单 开启深度缓冲 gl.enable(gl.DEPTH_TEST); 清除深度缓存 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); 为什么要用它呢? 因为画一些三维图形时,很难困难层级,深度缓冲就是帮你干这事的. 原文地址:https://www.cnblogs.com/honghong87/p/9760174.html

将深度缓冲z值变换到相机坐标系

将Depth Buffer中的Z值转换到Camera坐标系下需要使用投影矩阵 OpenGL: OpenGL的投影矩阵为 设Camera坐标系下点为(Vx,Vy,Vz,1.0) 通过上述投影矩阵变换后的点为(Px,Py,Pz,-Vz) Px与Py我们不关心,Pz=Az+B,A=-(f+n)/(f-n),B=-2fn/(f-n), 然后各项除以w,Pz=-A-B/Vz 现在Pz在[-1,1]之间,OpenGL会将其变换到[0,1]内得到Dz 以上就是Camera坐标系到投影坐标系的过程 当得到Dep

【转载】Alpha混合物体的深度排序

原文:Alpha混合物体的深度排序 先说个题外话, 本来我想解答一下最近Creators Club论坛上经常出现的一个问题, 意外的是在网上竟然找不到什么全面的答案.. 这是个有着复杂答案的简单问题: “为什么我的透明物体的绘制顺序不对, 或者有些不见了?” 当绘制一个3D场景时, 对图形进行深度排序是非常重要的, 这样离镜头近才画在远处物体的前面. 我们不会希望看到远处的山把近在眼前的建筑给挡住了! 如今有三种深度排序方法得到了广泛的应用: 深度缓冲 (也叫做 z-buffering) 油画家

OpenGL和D3D11中的深度模版测试

    在OpenGL和D3D11的管线中,像素shader之后的操作就是深度模版测试,深度模版测试是以sample为单位进行的,就是一个像素上可以有多个采样点,每个采样点都有深度信息.深度模版测试对每个采样点都要进行一次,如果是msaa,最后要对每次采样的像素结果进行resolve,得到最终的结果.在下面的链接中有msaa的介绍. http://www.cnblogs.com/mikewolf2002/archive/2012/11/22/2783235.html     深度模版测试的流程如

OpenGL中的深度、深度缓存、深度测试及保存成图片

1.深度 所谓深度,就是在openGL坐标系中,像素点Z坐标距离摄像机的距离.摄像机可能放在坐标系的任何位置,那么,就不能简单的说Z数值越大或越小,就是越靠近摄像机. 2.深度缓冲区 深度缓冲区原理就是把一个距离观察平面(近裁剪面)的深度值(或距离)与窗口中的每个像素相关联.      首先,使用glClear(GL_DEPTH_BUFFER_BIT),把所有像素的深度值设置为最大值(一般是远裁剪面).      然后,在场景中以任意次序绘制所有物体.硬件或者软件所执行的图形计算把每一个绘制表面

深度排序与alpha混合 【转】

  翻译:李现民 最后修改:2012-07-03 原文:Depth sorting alpha blended objects 先说个题外话,本来我想回答在 Creators Club论坛上的一个常见问题,但(意外的是)我竟然没能从网上找到一个令人满意的答案. 问题本身很简单,但答案却有些复杂: “为什么我的透明物体的绘制顺序是错误的,或者为什么它们的一部分不见了?” 当绘制一个3D场景的时候,将图形按深度排序非常重要,只有这样靠近摄像机的物体才能被绘制在(离摄像机)更远的物体的上面.我们不会希

深度排序与alpha混合

原文: https://blogs.msdn.microsoft.com/shawnhar/2009/02/18/depth-sorting-alpha-blended-objects/ 翻译:李现民 最后修改:2012-07-03 "为什么我的透明物体的绘制顺序是错误的,或者为什么它们的一部分不见了?" 当绘制一个3D场景的时候,将图形按深度排序非常重要,只有这样靠近摄像机的物体才能被绘制在(离摄像机)更远的物体的上面.我们不会希望远方的山脉被绘制在近在眼前的建筑物的上面! 当前得到

openGL超级宝典第三章例子——贴花

1.又和上次一样犯了个错误,深度缓冲标识位GL_DEPTH_BUFFER_BIT写成GL_COLOR_BUFFER_BIT.导致图形绘制没有在窗口中出现 2.注释是我的. 3.好消息:code compare插件和工具的使用.之前朋友推荐我使用,一直没有场景.现在知道:svn同文件的不同版本在同一路径下的对比使用smartSVN:不同文件或者不同路径任何版本对比使用code compare工具,比如根据别人的教程写代码或把开源的代码转化为自己的代码这工具很适合.今天就是用这个工具查找到书写错误,