opengl 深度详解_OpenGL之深度测试

深度缓冲是在三维图形中处理图像深度坐标(个人认为可以理解成距离我们观察摄像机远近的距离)的过程----From wiki

这听起来不好理解啊啊啊啊。

所以就举个栗子喽XD,就好比我可能要按由近到远顺序渲染两个面(实际上是任意顺序,我是说假如按这个顺序),近处的面先渲染,之后渲染远处的面,但是如果没有开启深度测试glEnable(GL_DEPTH_TEST),那么远的面将要覆盖掉我们近处渲染的面,显然这不是我们所想要看到的。所以此时就需要深度测试,远的面的深度值与近处的面的深度值进行比较,一旦远的面深度值比较大即距离我们较远,那么该片段就会被丢弃掉,但这与面剔除似乎是不一样的,面剔除是根据面向观察者和背向观察者去判断是否丢弃片段,不知道我这样讲是否正确,求看到此篇的大神用力的打我脸!

其中我最不理解的“丢弃片段”(为什么片段丢弃后我摄像机移动,还是能看到原先背向我的那一些片段?)后来发现仅仅是在此帧渲染时丢弃这些片段。但是之后摄像机一旦移动那么又是渲染另一帧,所以重新进入渲染管线进行渲染,同时这就是为什么我们要创建顶点数组缓冲对象的原因,否则我们就要创建VBO,设置顶点指针属性等等复杂操作。虽然现代的OpenGL是不支持不创建VAO的。

深度缓冲区的原理:

最初先使用glClear(GL_DEPTH_BUFFER_BIT)把所有窗口上的像素的深度值设置为最大值。

然后在场景中以任意顺序绘制所有物体。OpenGL计算把每一个绘制表面转换为窗口上一些像素的集合,此时没有启动深度测试并不考虑是否被其他物体遮挡。所以可能导致远的绘制表面把近的绘制表面覆盖掉

其次,OpenGL会计算这些表面和观察平面的距离。如果启用了深度缓冲区,在绘制每个像素之前

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值