当前位置: 首页 > news >正文

企业网站二级域名好做吗成都产品包装设计

企业网站二级域名好做吗,成都产品包装设计,网站做区块链然后往里面投钱,网站无法连接mysqlQT之OpenGL深度测试1. 深度测试概述1. 1 提前深度测试1.2 深度测试相关函数2. 深度测试精度2.1 深度冲突3. Demo4. 参考1. 深度测试概述 在OpenGL中深度测试(Depth Testing)是关闭的,此时在渲染图形时会产生一种现象后渲染的会把最先渲染的遮挡住。而在启用深度测试…

QT之OpenGL深度测试

  • 1. 深度测试概述
    • 1. 1 提前深度测试
    • 1.2 深度测试相关函数
  • 2. 深度测试精度
    • 2.1 深度冲突
  • 3. Demo
  • 4. 参考

1. 深度测试概述

OpenGL深度测试(Depth Testing)是关闭的,此时在渲染图形时会产生一种现象后渲染的会把最先渲染的遮挡住。而在启用深度测试后,在渲染时OpenGL会将片段的深度与深度缓冲(Depth Buffer)中的深度值比较,如果比较通过则深度缓冲将更新为新的深度值。如果失败片段将会被丢弃。

深度缓冲是在片段着色器以及模板测试(Stencil Testing)运行之后在屏幕空间中运行的。屏幕空间坐标与通过OpenGLglViewPort所定义的视口密切相关。并且可以直接使用GLSL内置变量gl_FragCoord从片段着色器中直接访问。gl_FragCoordxy分量代表了片段的屏幕空间坐标(其中(0, 0)位于左下角)。gl_FragCoord中也包含了一个z分量,它包含了片段真正的深度值。z值就是需要与深度缓冲内容所对比的那个值。

1. 1 提前深度测试

现在大部分的GPU都提供一个叫做提前深度测试(Early Depth Testing)的硬件特性。提前深度测试允许深度测试在片段着色器之前运行。只要我们清楚一个片段永远不会是可见的(它在其他物体之后),我们就能提前丢弃这个片段。
片段着色器通常开销都是很大的,所以我们应该尽可能避免运行它们。当使用提前深度测试时,片段着色器的一个限制是你不能写入片段的深度值。如果一个片段着色器对它的深度值进行了写入,提前深度测试是不可能的。 OpenGL不能提前知道深度值。

1.2 深度测试相关函数

  • 开启深度测试

    glEnable(GL_DEPTH_TEST);
    
  • 每次渲染之前情况深度缓冲

    glClear(GL_DEPTH_BUFFER_BIT);
    
  • 执行深度测试但不更新深度缓冲。即使用只读(read-only)的深度缓冲

    // 在开启深度测试后才有效果
    glDepthMask(GL_FALSE);
    
  • 指定执行深度测试时的比较方法

/*
GL_ALWAYS	永远通过深度测试
GL_NEVER	永远不通过深度测试
GL_LESS	在片段深度值小于缓冲的深度值时通过测试
GL_EQUAL	在片段深度值等于缓冲区的深度值时通过测试
GL_LEQUAL	在片段深度值小于等于缓冲区的深度值时通过测试
GL_GREATER	在片段深度值大于缓冲区的深度值时通过测试
GL_NOTEQUAL	在片段深度值不等于缓冲区的深度值时通过测试
GL_GEQUAL	在片段深度值大于等于缓冲区的深度值时通过测试
*/
glDepthFunc(GL_LESS);

2. 深度测试精度

在深度缓冲中的深度值是有精度的,深度缓冲会以16、24或32位float的形式存储它的深度值。在大部分系统中,深度缓冲的精度都是24位的。
深度缓冲中深度值的范围介于0.0和1.0之间,它将会与观察者视角所看见的场景中所有物体的z值进行比较。观察空间的z值可能是投影平截头体的近平面(Near)远平面(Far)之间的任何值。此时需要某种方式将观察空间的z值变换到0.0和1.0之间,可选的方式如下:

  • 线性变换
    在这里插入图片描述
    在这里插入图片描述

  • 非线性变换
    在这里插入图片描述
    在这里插入图片描述

非线性不会考虑的问题是当深度为1000和深度为1时渲染精度不同的问题。而非线性的深度值很大一部分是由很小的z值所决定的,这给了近处的物体很大的深度精度。

2.1 深度冲突

一个很常见的视觉错误是在两个平面或者三角形非常紧密地平行排列在一起时,由于深度缓冲没有足够的精度来决定两个形状哪个在前面。结果就是这两个形状不断地在切换前后顺序,这会导致很奇怪的花纹,这个现象叫做深度冲突(Z-fighting)

深度冲突不能够完全避免,但有一些技巧可以减轻或者完全避免深度冲突:

  • 永远不要把多个物体摆的太靠近,以至于它们的一些三角形会重叠
    通过在两个物体之间设置一个用户无法注意到的偏移值,你可以完全避免这两个物体之间的深度冲突。在箱子和地板的例子中,我们可以将箱子沿着正y轴稍微移动一点。箱子位置的这点微小改变将不太可能被注意到,但它能够完全减少深度冲突的发生。然而,这需要对每个物体都手动调整,并且需要进行彻底的测试来保证场景中没有物体会产生深度冲突。
  • 尽可能将近平面设置远一些
    在前面提到了精度在靠近近平面时是非常高的,所以如果我们将近平面远离观察者,我们将会对整个平截头体有着更大的精度。然而,将近平面设置太远将会导致近处的物体被裁剪掉,所以这通常需要实验和微调来决定最适合你的场景的近平面距离。
  • 使用更高精度的深度缓冲
    此种方法是牺牲性能来减少深度冲突

3. Demo

非线性depth演示:
在这里插入图片描述

源码

4. 参考

OpenGL 深度测试

http://www.yayakq.cn/news/487834/

相关文章:

  • 国内个人网站设计欣赏江阴响应式网站开发
  • 网站建设估价百度网站关键字
  • 网站设计说明书范文cd wordpress
  • 企业网站的制作及维护菏泽做网站的公司
  • 地产flash网站pc营销型网站
  • 深圳网站建设哪家比较专业广州营销策划公司排行
  • 一些js特效的网站推荐建筑人才网招聘网官网
  • 网站建设模板设计wordpress按钮编辑器
  • 网站制作对公司的作用适合大学生做的兼职网站有哪些
  • 中国空间站纪念币.net 网站开发
  • 通化市城乡建设局网站东莞市电池网站建设
  • 金华公司网站建设网站制作视频教程新手必看
  • 网站建设以后就业方向如何做彩票网站
  • 懒懒淘客怎么做自己的网站开发一个app的资质要求
  • 租赁商城手机网站开发led灯散热片技术支持 东莞网站建设
  • 青浦区网站建设费用网站建设 加盟
  • 龙华做棋牌网站建设网站后期维护流程
  • 温室网站建设设计软件培训班学费一般多少
  • 订餐网站模板下载阿里云域名注册查询官网
  • 网站开发要用什么语言绵阳网站建设制作
  • vps自带ie浏览器不能访问网站交互式网站建设
  • seo站外推广有哪些深圳vi设计公司哪家好
  • 网站建设设计 飞沐二级建造师报考条件官网
  • 上海网站建设模板站霸网络群辉做网站服务器python
  • 网站博客模板wordpress评论生成
  • 关于动漫的网站建设html编辑工具有哪些
  • 省级住房城乡建设主管部门网站网站开发课程改革
  • 湖南中耀建设集团有限公司网站中文wordpress网站模板下载失败
  • 企业网站 合同备案 修改网站名称
  • 网站托管怎么做等保企业建网站报价