关于GLSL的gl_FragCoord、gl_FragDepth以及深度计算

文章推薦指數: 80 %
投票人數:10人

gl_FragCoord和gl_FragDepth分别是片元着色器的输入和输出变量。

gl_FragCoord是个vec4,四个分量分别对应x, y, z和1/w。

其中,x和y是当前片元的窗口 ... 关于GLSL的gl_FragCoord、gl_FragDepth以及深度计算 关注 minepub 打赏 赞 收藏 评论 分享 微博 QQ 微信 关于GLSL的gl_FragCoord、gl_FragDepth以及深度计算 转载 minepub 2017-03-1216:59:35 博主文章分类:OpenGL ©著作权 文章标签 OpenGL 文章分类 其他 编程语言 关于GLSL的gl_FragCoord、gl_FragDepth以及深度计算https://blog.51cto.com/31329846/1905637 gl_FragCoord和gl_FragDepth分别是片元着色器的输入和输出变量。

gl_FragCoord是个vec4,四个分量分别对应x,y,z和1/w。

其中,x和y是当前片元的窗口相对坐标,不过它们不是整数,小数部分恒为0.5。

x-0.5和y-0.5分别位于[0,windowWidth-1]和[0,windowHeight-1]内。

windowWidth和windowHeight都以像素为单位,亦即用glViewPort指定的宽高。

w即为乘过了投影矩阵之后点坐标的w,用于perspectivedivide的那个值。

gl_FragCoord.z/gl_FragCoord.w可以得到当前片元和camera之间的距离。

参见FoginGLSLpage4。

gl_FragCoord.z是固定管线计算出的当前片元的深度。

它已经考虑了多边形偏移,并经过了投影变换。

它位于[0.0,1.0]之间。

如果用gl_FragColor=vec4(vec3(gl_FragCoord.z),1.0)将其可视化,多半会看到一片白。

这是由于变换的非线性,大多数点的深度都非常接近于1。

用gl_FragColor=vec4(vec3(pow(gl_FragColor.z,exp)),1.0)并将exp取为合适的值,就能看到从黑到白的深度变化了。

距离观察者近的颜色深,接近0.0;距离观察者远的颜色浅,接近1.0;这说明一直以来的右手坐标系在投影变换后变成了左手坐标系。

关于深度的变换和精确性参见OpenGLFAQ-12TheDepthBuffer。

根据GLSLangSpec.Full.1.30.08(p61),gl_FragCoord.z是固定功能计算所得的结果。

如果片元着色器不写gl_FragDepth,那么这个值将用在后续处理中。

OpenGLShadingLanguage提到(p104),即使将gl_FragCoord.z赋值给gl_FragDepth也不能保证产生和固定功能完全相同的值。

但是,可以保证相对正确。

加之片元着色器一旦写入gl_FragDepth,就必须保证在每个分支都有写入。

因此,如果一个着色器需要在某些条件下自己计算深度,其它条件下的正确做法就是gl_FragDepth=gl_FragCoord.z。

在OpenGL的固定管线中,深度坐标是在视口变换期间变换到glDepthRange指定的范围之内(OpenGL编程指南-原书第五版,88页)。

视口变换也就是光栅化(Rasterization),在进行到片元着色器的时候自然已经编码完毕了。

自行计算片元深度可以用下面的方法(参考OpenGLFAQ-12TheDepthBuffer):[cpp] viewplain copy// Vertex Shader  varying vec4 position;  void main(void)  {      position = gl_ModelViewMatrix * gl_Vertex;      gl_Position = ftransform();  }  // Fragment Shader  uniform float zFar;  uniform float zNear;  varying vec4 position;  void main()  {      float zDiff = zFar - zNear;      float interpolatedDepth = (position.w / position.z) * zFar * zNear / zDiff + 0.5 * (zFar + zNear) / zDiff + 0.5;      gl_FragColor = vec4(vec3(pow(interpolatedDepth, 15.0)), 1.0);  }  这样计算出的深度与gl_FragCoord.z基本一致。

打赏 赞 收藏 评论 分享 微博 QQ 微信 举报 上一篇:墨卡托投影 下一篇:MSAA,SSAA,FXAA,TXAA 举报文章 请选择举报类型 内容侵权 涉嫌营销 内容抄袭 违法信息 其他 具体原因 包含不真实信息 涉及个人隐私 原文链接(必填) 补充说明 0/200 上传截图 格式支持JPEG/PNG/JPG,图片不超过1.9M 取消 确认 已经收到您得举报信息,我们会尽快审核 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 (0) 最热 最新 相关文章 数据结构-二叉树 前言带你图解二叉树的多种递归遍历下面开始本节课的学习目录二叉树的构建结点类型的定义构建二叉树之间的关系深度优先遍历前序遍历1.代码实现2.图解递归中序遍历1.代码实现2.图解递归后序遍历1.代码实现2.图解递归广度优先遍历1.层序遍历2.代码实现面试题C语言面试题二叉树的构建定义:二叉树(Binary tree)是树形结构的一个重要类型。

许多实际问题抽象出来的数据结构往往是二叉树形式,即 子树 二叉树 结点 #yyds干货盘点# 四年大厂后端经验总结成Java核心手册,假期不要光躺过去了 985本科,后端。

工作三年半,第一家创业公司,半年。

第二家后端技术不错的公司,两年半。

第三家,个人创业半年。

可以看出,我是个很喜欢折腾的人,大学期间也做过很多项目,非常愿意参与到产品中去。

技术上勉强合格,不过独自负责过很复杂的项目,所以一般基础面试题还有项目经历都没有太大问题。

缓存 Java spring java springboot 卷积神经网络(CNN)原理 学习目标目标 了解卷积神经网络的构成 记忆卷积的原理以及计算过程 了解池化的作用以及计算过程 应用 无 3.2.1卷积神经网络的组成定义 卷积神经网络由一个或多个卷积层、池化层以及全连接层等组成。

与其他深度学习结构相比,卷积神经网络在图像等结构什么样子。

其中包含了几个. 卷积神经网络原理 卷积 卷积核 池化 钢铁业触底回升!数字孪生“智慧钢铁”,低耗环保,全程追踪 通过2D与3D的融合,展示了工厂人员安全管理的室内定位可视化系统,功能涵盖人员实时定位、人员历史轨迹回放、设置电子围栏以及警告触发机制。

在工厂作业运作的时候,可以实时了解人员的位置进行人员的工作安排和区域划分;在工作期间,对高危环境进行电子围栏的设立,越界则通过警报告诫危险环境使人员撤离,可以充分保障作业人员的安全;工作完成后,可以通过人员轨迹的回放,查看运作路线用于故障排除作为可靠的依据。

3d 数据可视化 数字孪生 组态监控 智慧钢铁 京东面试详解:如何有效避免ElasticSearch深度分页? 前言Elasticsearch是一个实时的分布式搜索与分析引擎,在使用过程中,有一些典型的使用场景,比如分页、遍历等。

在使用关系型数据库中,我们被告知要注意甚至被明确禁止使用深度分页,同理,在Elasticsearch中,也应该尽量避免使用深度分页。

这篇文章主要介绍Elasticsearch中分页相关内容!From/Size参数在ES中 elasticsearch 大数据 java 数据库 程序员 LAXCUS分布式操作系统三代UI演进之路 从字符界面到图形界面,LAXCUS分布式操作系统在UI领域走出一条自己路 图形界面 任务栏 分布式应用 【FAQ】用户访问次数不变,访问时长却突增2倍,分析服务发生数据异常该如何解决? 在产品运营的工作过程中,需要每日关注产品的核心指标变化情况,监控其整体运营状况。

​​华为分析服务​​提供查看吸引新用户卡片,该卡片展示了新增用户数、人均会话次数、人均访问时长、人均页面访问数。

借助该页面运营可观察拉新效果,判断产品对新用户的吸引力。

问题描述某开发者在集成华为分析服务后,发现AGC概览页面上的人均会话时长突增至原来的两倍,但是人均会话次数并没有改变,具体见下图:该突变现象不符合 开发者 ios 新版本 阿里资深架构师整理分享内部绝密MyBatis源码深度解析文档 前言MyBatis作为持久层框架,以其小巧轻便、SQL可配置、使用简单等特点深受广大Java开发者喜爱。

然而大多数开发人员对MyBatis框架的 java spring 面试 sql mybatis框架 20年IT农民工分享SpringCloud微服务架构实战文档 前言越来越多的企业使用SpringCloud实现微服务架构设计。

我们可以看到这样一种现象:不管是全新开发,还是系统重构,大家似乎都在 java 开发语言 微服务 spring 架构设计 OpenGL学习笔记(一):环境搭建、三维空间坐标系理解以及OpenGL的基本使用 原博主博客地址:://blog..net/2 opengl qt图形处理 旋转 GL 三维图形 巨头纷纷开做移动广告平台,为啥? 虽然就在一年多以前,马化腾、李彦宏、周鸿祎等大佬还在说不看好移动广告,但从今年起,移动广告平台形势却在看涨, 移动广告平台 开发者 移动广告 【FAQ】分析服务导出的事件数据和概览页面展示的数据不一致该如何解决? ​​华为分析服务​​面向开发者提供两种数据展现方式:(1)事件数据下载,开发者可以将事件数据下载后导入到自有的分析系统中;(2)直接在AGC概览页面查看用户数和事件数。

问题描述某开发者想将事件数据导入到自有系统中,他在导出数据时将标识用户方式选择“按UserID和设备”,最后发现导出数据中的事件数比分析服务概览页面展示的数据少。

定位过程(1)导出数据的事件数与概览页面展示的数据量细节首先通过后台查 数据 开发者 数据导出 OpenGL学习笔记(十):深入学习和理解着色器 原博主博客地址:://blog 着色器 uniform OpenGL 数据 顶点着色器 什么是深度学习,GPU服务器的主要应用场景​? 首先,GPU服务器有什么作用?GPU加速计算可以提供非凡的应用程序性能,能将应用程序计算密集部分的工作负载转移到GPU,同时仍由CPU运行其余程序代码,从用户的角度来看,应用程序的运行速度明显加快。

理解GPU和CPU之间区别的一种简单方式是比较它们如何处理任务。

CPU由专为顺序串行处理而优化的几个核心组成,而GPU则拥有一个由数以千计得更小、更高效的核心(专为同时处理多重任务 服务器 云服务 应用程序 GPU服务器 阿里云 #51CTO博主之星评选# OpenGL学习笔记(二):OpenGL语法、渲染管线以及具体实现过程详解 原博主博客地址:://blo OpenGl 渲染 管线 着色 具体实现 从零开始搭建神经网络并将准确率提升至85% 我们在看一些关于深度学习的教材或者视频时,作者(讲解者)总是喜欢使用MNIST数据集进行讲解,不仅是因为MNIST数据集小,还因为MNSIT数据集图片是单色的。

在讲解时很的容易达到深度学习的效果。

但是学习不能只止于此,接下来我们就使用彩色图片去训练一个模型。

最初我在设置网络结构去训练时,准确率才40%的样子,同时不能够收敛。

后来结合着一些论文对神经网络有了一定的了解,接着就 2d git 数据集 #私藏项目实操分享# 程序员如何避免“滴滴式裁员”悲剧? 如何淡定面对裁员? 互联网公司 数据 深度学习 HMSCore地理围栏能力助你实现指定范围人群的精准消息推送 精准推送是移动端产品留存阶段的主要运营手段,精准推送常常会与用户画像紧密结合,针对用户的喜好、画像,采用不同策略,但基于用户所属区域推送消息却很难实现。

目前市面上大多数第三方消息推送服务商,在系统未深度定制的情况下,通常不支持将推送人群范围精确到某个商圈或较小的区域,而地理围栏技术可以很好地弥补这一点。

地理围栏就是用一个虚拟的栅栏围出一个虚拟地理边界,当手机进入、离开或在这个围起来的特定地理区域内 android maven 推送 一周上榜新书:强化学习、深度学习最受程序员关注 4月出版了很多新书,上周有两本书最受程序员关注,《动手学强化学习》和《PyTorch深度学习实战》位于一周榜单TOP10。

现在和小编一起来看看有哪些新书上榜。

1、动手学强化学习周榜TOP2,上海交通大学ACM班创始人俞勇教授团队编写,由李航、李沐等多位业内领军人士力荐!图灵奖得主JohnHopcroft推荐的强化学习入门书。

强化学习 深度学习 程序员 量子计算 minepub 关注 私信 OpenGL分类的近期文章 三维文件格式abc,glTF,fbx,obj,dae,stl,3ds,ply,... 交通标志识别技术的原理 OpenGL中矩阵的行主序与列主序 VulkanTutorial17Renderingandpresentation VulkanTutorial16Commandbuffers 近期文章 1.c++:改造cmdline用于MSVC下的命令行参数解析 2.cmdline——轻量级的C++命令行解析库 3.将二进制数据嵌入json的几种方法 4.C/C++,java开源数学计算库 5.ARM浮点运算详解 七日热门 编程语言 编程语言 编程语言 编程语言 编程语言 C语言编程—编程实践 编程范式与编程语言 C语言编程—编程实践 C语言编程—编程实践 C语言编程—编程规范 分类列表 #OpenGL37篇 #C++17篇 #Android4篇 相关标签 全部 centosgl centosglgl.h clearingglerror echartsglgithub echartsglreact gitgl命令 gl glerror glinterfaceerror glnoerror 签到送好礼 返回顶部 51CTO博客 首页 关注 热榜 订阅专栏 学堂 精培 鸿蒙社区 CTO训练营 51CTO 班级博客 登录注册 手机随时阅读 新人专享大礼包¥24 写文章 搜索历史 清空 热门搜索 查看【 】的结果 Copyright©2005-202251CTO.COM 版权所有京ICP证060544号 关于我们 官方博客 意见反馈 了解我们 全部文章 在线客服 网站地图 热门标签 友情链接 开源基础软件社区 51CTO学堂 51CTO



請為這篇文章評分?