问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

opengl书籍中的缓冲区指的是什么?

发布网友 发布时间:2022-04-22 03:28

我来回答

1个回答

热心网友 时间:2023-12-19 11:17

一.About深度
*什么是深度?
深度其实就是该像素点在3D世界中距离摄像机的距离,Z值
*什么是深度缓冲区?
深度缓存区,就是⼀块内存区域,专⻔存储着每个像素点(绘制在屏幕上的)深度值.深度值(Z值)越⼤,
则离摄像机就越远。
*为什么需要深度缓冲区?
在不使⽤深度测试的时候,如果我们先绘制⼀个距离⽐较近的物理,再绘制距离较远的物理,则距离
远的位图因为后绘制,会把距离近的物体覆盖掉. 有了深度缓冲区后,绘制物体的顺序就不那么重
要的. 实际上,只要存在深度缓冲区,OpenGL 都会把像素的深度值写⼊到缓冲区中. 除⾮调⽤
glDepthMask(GL_FALSE).来禁⽌写⼊。

深度值计算
深度值⼀般由16位,24位或者32位值表示,通常是24位。位数越⾼的话,深度的精确度越
好。深度值的范围在[0,1]之间,值越⼩表示越靠近观察者,值越⼤表示远离观察者。
• 深度缓冲主要是通过计算深度值来⽐较⼤⼩,在深度缓冲区中包含深度值介于0.0和1.0之间,
从观察者看到其内容与场景中的所有对象的 z 值进⾏了⽐较。这些视图空间中的 z 值可以在投
影平头截体的*⾯和远平⾯之间的任何值。我们因此需要⼀些⽅法来转换这些视图空间 z 值 到 [0,1] 的范围内,下⾯的 (线性) ⽅程把 z 值转换为 0.0 和 1.0 之间的值 :
far和near是提供到投影矩阵设置可⻅视图截锥的远近值

解决⽅法: Z-buffer⽅法(深度缓冲区Depth-buffer)
• 深度测试
• 深度缓冲区(DepthBuffer)和颜⾊缓存区(ColorBuffer)是对应的.颜⾊缓存区存储像素的颜⾊信
息,⽽深度缓冲区存储像素的深度信息. 在决定是否绘制⼀个物体表⾯时, ⾸先要将表⾯对应的像
素的深度值与当前深度缓冲区中的值进⾏⽐较. 如果⼤于深度缓冲区中的值,则丢弃这部分.否则
利⽤这个像素对应的深度值和颜⾊值.分别更新深度缓冲区和颜⾊缓存区. 这个过程称为”深度测
试”

非线性深度缓存
⽅程带内锥截体的深度值 z,并将其转换到 [0,1] 范围。在下⾯的图给出 z 值和其相应的深度值的关系:

在实践中是可以减少使⽤这样的线性深度缓冲区。正确的投影特性的⾮线性深度⽅程是和1/z成正⽐的 ,由于⾮线性函数是和 1/z 成正⽐,例如1.0 和 2.0 之间的 z 值,将变为 1.0 到 0.5之间, 这样在z⾮常⼩的时候给了我们很⾼的精度。⽅程如下所示

屏幕空间的深度值是⾮线性如他们在z很⼩的时候有很⾼的精度,较⼤的 z 值有较低的精度。该⽚段的深度值会迅速增加,所以⼏乎所有顶点的深度值接近 1.0。如果我们⼩⼼的靠近物体,你最终可能会看到的⾊彩越来越暗,意味着它们的 z 值越来越⼩,这清楚地表明深度值的⾮线性特性。近的物体相对远的物体对的深度值⽐对象较⼤的影响。只移动⼏英⼨就能让暗⾊完全变亮。
但是我们可以让深度值变换回线性。要实现这⼀⽬标我们需要让点应⽤投影变换逆的逆变换,成为单独的深度值的过程。这意味着我们必须⾸先重新变换范围 [0,1] 中的深度值为单位化的设备坐标(normalized device coordinates)范围内 [-1,1] (裁剪空间(clip space))。然后,我们想要反转⾮线性⽅程 :

使用深度测试

指定深度测试判断式

打开/阻断 深度缓存区写⼊
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
可以用电高压锅做蛋糕吗 蛋糕机选哪家实惠? 京东闪付开通后无法添加到applepay怎么办 二年级数学说课稿范文 苹果手机电充到80就不充了怎么回事 上有八,下有八中间有个十字花打一字 ...排名22000.能否上到广工的机械制造和自动化(卓越工程师班)_百度知 ... 把内存由DDR2升级到DDR3,是不是要设置什么东东啊。 怎样吧DDR2的内存条改成DDR3 ...的内存条是DDR2的,我想换DDR3的可以吗?该怎么换?还有该注意什么... arcgis怎么做缓冲区 如何利用arcgis建立缓冲区 缓冲区类的病毒会对电脑产生的危害 java中的字符串缓冲区是什么意思? 核心区实验区缓冲区怎么划分 什么是缓冲区啊? ios中有没有类似buffer的缓冲区域 什么是河流缓冲区?有什么用?具体介绍一下 java.nio的缓冲区 C语言缓冲区在哪里 如何理解字符串缓冲区 C语言中缓冲区的问题,到底什么是全缓冲和行缓冲?? 缓冲区是什么? C++的流缓冲区类什么意思,像streambuf,filebuf... 我的就是空壳公司,可以按简易注销,请问一下需要... 注册个公司最低要多少钱?空壳公司都可以。就是没... 我注册了一个空壳公司。 需要缴纳什么税? 注册空壳公司需要多少钱? 注册一个空头公司一年要多少钱,50分,回答满意了... 开一家空壳公司多少钱? 标准printf函数用的是什么类型的缓冲? 缓冲区溢出攻击的基本原理是什么? 小米平板 咋用 手机卡 打电话啊 微博名字怎么设置到中间 怎么把微博字设置到中间 怎么把微博文字弄到中间 怎样将新浪微博标签移至中间 微博字体怎么改到中间 微博标志怎么弄到中间。没看到个人设置在哪 微博上传的照片下面的微博ID怎样放到中间? 新浪微博发说说的图片右下角的名字怎么改到中间,... 古希腊文明 公司欠员工工资不给怎么办 公司拖欠员工的工资不给怎么办 公司拖欠员工工资不发怎么办 不给员工发工资怎么处理 公司不发员工工资怎么办 老板不给员工发工资怎么办? 在公司不发工资不给员工怎么办 如果公司无缘无故拖欠员工工资怎么办?