关于GLSL的gl_FragCoord、gl_FragDepth以及深度计算
文章推薦指數: 80 %
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
延伸文章資訊
- 1LearnOpenGL - Depth Testing
The x and y components of gl_FragCoord represent the fragment's screen-space coordinates (with (0...
- 2gl_FragCoord 的含义 - 知乎专栏
gl_FragCoord.w 是裁剪空间clip.w 的倒数即1/clip.w , 由上面的透视投影矩阵的推导过程可以看出,为了凑透视除法, clip.w 值就是眼坐标系z 值的负数,也 ...
- 3关于GLSL的gl_FragCoord、gl_FragDepth以及深度计算
gl_FragCoord和gl_FragDepth分别是片元着色器的输入和输出变量。 gl_FragCoord是个vec4,四个分量分别对应x, y, z和1/w。其中,x和y是当前片元的窗口 ...
- 4gl_FragCoord.z - OpenGL: Advanced Coding - Khronos Forums
gl_FragCoord is window-relative (screen) coordinates. .xy is pixel units of the center of the fra...
- 5What does (gl_FragCoord.z / gl_FragCoord.w) represent?
z / gl_FragCoord.w is not the camera-space (or world-space) distance to the camera. Nor is it the...