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

大理网站建设深圳营销网站建设联系方式

大理网站建设,深圳营销网站建设联系方式,中山企业网站制作,四川住房和城乡建设部官方网站QT之OpenGL深度测试1. 深度测试概述1. 1 提前深度测试1.2 深度测试相关函数2. 深度测试精度2.1 深度冲突3. Demo4. 参考1. 深度测试概述 在OpenGL中深度测试(Depth Testing)是关闭的#xff0c;此时在渲染图形时会产生一种现象后渲染的会把最先渲染的遮挡住。而在启用深度测试… QT之OpenGL深度测试1. 深度测试概述1. 1 提前深度测试1.2 深度测试相关函数2. 深度测试精度2.1 深度冲突3. Demo4. 参考1. 深度测试概述 在OpenGL中深度测试(Depth Testing)是关闭的此时在渲染图形时会产生一种现象后渲染的会把最先渲染的遮挡住。而在启用深度测试后在渲染时OpenGL会将片段的深度与深度缓冲(Depth Buffer)中的深度值比较如果比较通过则深度缓冲将更新为新的深度值。如果失败片段将会被丢弃。 深度缓冲是在片段着色器以及模板测试(Stencil Testing)运行之后在屏幕空间中运行的。屏幕空间坐标与通过OpenGL的glViewPort所定义的视口密切相关。并且可以直接使用GLSL内置变量gl_FragCoord从片段着色器中直接访问。gl_FragCoord的x和y分量代表了片段的屏幕空间坐标其中(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.hkea.cn/news/14343353/

相关文章:

  • 网站页面优化分析成都 广告公司网站建设
  • 唯品会网站架构我网站关键词太多
  • 怎样做电子商务网站重庆有名的网站建设
  • 网站建设与推广综合实训总结湖北黄石网站建设
  • 互联网广告推广是做什么的南宁seo网站建设费用
  • 全屏网站 图片优化全国连锁装修公司
  • 安徽外贸网站google建站公司做网站一定要钱吗
  • 山东系统建站怎么用建设外卖网站规划书
  • 烟台市科技局网站苏州淘宝网站建设培训
  • 网站优化软件有哪些社区做图网站有哪些
  • 网站开发的pc或移动端python做网站 知乎
  • 镇江建设质量监督站网站dede怎么做双语网站
  • 网站建设需求和页面需求怎么提wordpress 多个边栏
  • 那个网站做的调查准确wordpress显示文件大小
  • 新手学习网站建设黄浦网站建设
  • 横沥做网站做网站公司 郑州
  • 网站seo关键词排名省建设厅网站查询
  • 海棠网站注册郑州企业网站排行
  • 网站建设能赚很多钱带m开头的网站怎么做
  • 想做一个自己设计公司的网站怎么做的做汽车保养的网站
  • 微信网站需要域名吗域名提供商
  • 天空在线网站建设内蒙古建设厅网站删除
  • 手机可以建网站吗wordpress访问局域网
  • 郑州 做网站大连建设工程信息网档案下载
  • 电子政务网站系统企业网站管理系统(多语言)
  • 如何查询网站开发语言海南app网站建设
  • 单页网站开发费用企业网站程序下载
  • 音乐外链网站怎么用自己的电脑做网站主机
  • 南京网站设计公司有哪些公司济宁seo营销
  • 建网站的域名是什么意思广州品牌网站建设公司