What does (gl_FragCoord.z / gl_FragCoord.w) represent?
文章推薦指數: 80 %
gl_FragCoord.z is generated by the following process, assuming the usual transforms: Camera-space to clip-space transform, via projection matrix ...
Whatdoes(gl_FragCoord.z/gl_FragCoord.w)represent?
Night_Aurora
于 2018-10-3118:50:39 发布
271
收藏
分类专栏:
OpenGL
版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fatcat123/article/details/83588778
版权
OpenGL
专栏收录该内容
23篇文章
2订阅
订阅专栏
Thiswasasked(bythesameperson)andansweredelsewhere.I'mparaphrasingandembellishingtheanswerhere:
Asstatedinsection15.2.2oftheOpenGL4.3coreprofilespecification(PDF),gl_FragCoord.wis1/clip.w,whereclip.wistheWcomponentoftheclip-spaceposition(ie:whatyouwrotetogl_Position).
gl_FragCoord.zisgeneratedbythefollowingprocess,assumingtheusualtransforms:
Camera-spacetoclip-spacetransform,viaprojectionmatrixmultiplicationinthevertexshader.clip.z=(projectionMatrix*cameraPosition).zTransformtonormalizeddevicecoordinates.ndc.z=clip.z/clip.wTransformtowindowcoordinates,usingtheglDepthRangenear/farvalues.win.z=((dfar-dnear)/2)*ndc.z+(dfar+dnear)/2.
Now,usingthedefaultdepthrangeofnear=0,far=1,wecandefinewin.zintermsofclip-space:(clip.z/clip.w)/2+0.5.Ifwethendividethisbygl_FragCoord.w,thatistheequivalentofmultiplyingbyclip.w,thusgivingus:
(gl_FragCoord.z/gl_FragCoord.w)=clip.z/2+clip.w/2=(clip.z+clip.w)/2
Usingthestandardprojectionmatrix,clip.zrepresentsascaleandoffsetfromcamera-spaceZcomponent.Thescaleandoffsetaredefinedbythecamera'snear/fardepthvalues.clip.wis,againinthestandardprojectionmatrix,justthenegationofthecamera-spaceZ.Therefore,wecanredefineourequationinthoseterms:
(gl_FragCoord.z/gl_FragCoord.w)=(A*cam.z+B-cam.z)/2=(C*cam.z+D)
WhereAandBrepresenttheoffsetandscalebasedonnear/far,andC=(A-1)/2andD=B/2.
Therefore,gl_FragCoord.z/gl_FragCoord.wisnotthecamera-space(orworld-space)distancetothecamera.Norisitthecamera-spaceplanardistancetothecamera.Butitisalineartransformofthecamera-spacedepth.Youcoulduseitasawaytocomparetwodepthvaluestogether,iftheycamefromthesameprojectionmatrixandsoforth.
Toactuallycomputethecamera-spaceZ,youneedtoeitherpassthecameranear/farfromyourmatrix(OpenGLalreadygivesyoutherangenear/far)andcomputethoseAandBvaluesfromthem,oryouneedtousetheinverseoftheprojectionmatrix.Alternatively,youcouldjustusetheprojectionmatrixdirectlyyourself,sincefragmentshaderscanusethesameuniformsavailabletovertexshaders.YoucanpicktheAandBtermsdirectlyfromthatmatrix.A=projectionMatrix[2][2],andB=projectionMatrix[3][2].
shareimprovethisanswer
answeredDec5'12at20:10
communitywiki
NicolBolas
Night_Aurora
关注
关注
0
点赞
踩
0
评论
0
收藏
打赏
扫一扫,分享内容
点击复制链接
专栏目录
OpenGL-Shader
07-09
共六章
1.基础章节,从Shader1.0版本到新的4.5版本,介绍每一个版本中特性的用法;
2.TesslattionShader应用/基础案例分析
3.GemotryShader应用/基础案例分析
4.ComputeShader应用/基础案例分析
5.通过大量案例讲解分析/结合新特性,介绍用法
6.性能调优,如果借助shader加速应用,让你的程序支撑百万级别的场景对象轻松应对
gl_Positionisnotaccessibleinthisprofile
lbknxy的专栏
03-21
1567
可能是你把本应该在vertexshader里的内置变量用在fragmentshader里了,或者你把fragmentshader和vertexshader搞反了。
我的问题是由于脚本文件没改变,把vertexshader同时当成vertetxshader和fragmentshader了。
参与评论
您还未登录,请先
登录
后发表或查看评论
gl_FragCoord的含义
fatcat123的博客
01-06
7121
gl_FragCoord表示当前片元着色器处理的候选片元窗口相对坐标信息,是一个vec4类型的变量(x,y,z,1/w),其中x,y是当前片元的窗口坐标,OpenGL默认以窗口左下角为原点,在着色器中通过布局限定符可以重新设定原点,比如窗口左上角为原点origin_upper_left,窗口大小由glViewport()函数指定。
x,y默认是像素中心而非整...
关于GLSL的gl_FragCoord、gl_FragDepth以及深度计算
翻肚鱼儿的博客
08-10
1379
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,用于p
关于gl_FragCoord的理解
qq_39503511的博客
01-30
844
关于gl_FragCoord的理解概述
概述
记录一下在使用gl_FragCoord的一些知识点
先上shader来看效果
letshader={
vs:`
voidmain(){
gl_Position=projectionMatrix*viewMatrix*modelMatrix*vec4(position,1.0);
}
`,
fs:`
//屏幕尺寸
uniformvec2
学习ShaderToy第一天:glsl语言内置函数gl_FragCoord
jinghouxiang的专栏
02-26
1万+
运行环境:Android
opengles版本:2.0
3D引擎库:Rajawali3D
ShaderToy上用的shader语言为glsl,效果是用webgl跑的,而webgl封装了opengles, 所以ShaderToy上的例子同样使用于Android端。
ShaderToy基本上都是用fragmentshader对栅格化后的像素进行处
OpenGLES:gl_Position设置
Katichar
12-02
9327
整理之前Shader例子时,发现Sprite变灰的例子,执行后,图片变了位置,跑到右上角。
发现原因是Gray.vsh中
gl_Position=CC_MVPMatrix*a_position;
CC_MVPMatrix改成CC_PMatrix就可以了。
矩阵的概念还是很模糊的,内部怎么处理暂时还没找到,CC_PMatrix为原坐标,而CC_MVPMatrix则会变动坐标
GLSL下几个简单的Shader
boksic的专栏
02-17
2万+
在ShaderDesigner下编Shader是最为方便的,但这里先用OpenGL下的编程来举例
1.最简单的固定单色Shader
VertexShader
坐标经过投影矩阵变换:vTrans=projection*modelview*incomingVertex
voidmain()
{
gl_Position=gl_ProjectionMatrix*gl_
【GLSL教程】(四)shder的简单示例
热门推荐
racehorse的专栏
07-27
6万+
GLSL的HelloWorld这一节中包含一个最基本的shader,它提供如下功能:顶点变换然后使用单一的颜色渲染图元。
顶点shader前面已经说过,顶点shader负责完成顶点变换。
这里将按照固定功能的方程完成顶点变换。
固定功能流水线中一个顶点通过模型视图矩阵以及投影矩阵进行
理解glsl语言的gl_FragCoord与u_resolution
最新发布
popstarqq的博客
12-28
343
1概念
(1)u_resolution是画布尺寸,即代表画布宽高
(2)gl_FragCoord:是一个vec4类型的变量(x,y,z,1/w),其中x,y是当前片元的窗口坐标。
直译就是片元坐标
2结合例子理解
如下效果和代码
#ifdefGL_ES
precisionmediumpfloat;
#endif
//u_resolution(画布尺寸)
uniformvec2u_resolution;
voidmain(){
vec2st=gl_F
有关GLSL中的gl_FragCoord
开发游戏,辉煌全中国
04-15
7086
在研究阴影映射的时候,我发现了一个很有意思的变量,它可以代替我们自己使用的varying变量,给我们带来方便。
但是我们也需要了解它是如何计算的。
gl_FragCoord
啦啦啦啦
03-11
888
gl_FragCoord表示当前片元着色器处理的候选片元窗口相对坐标信息,是一个vec4类型的变量(x,y,z,1/w),其中x,y是当前片元的窗口坐标,OpenGL默认以窗口左下角为原点,在着色器中通过布局限定符可以重新设定原点,比如窗口左上角为原点origin_upper_left,窗口大小由glViewport()函数指定。
x,y默认是像素中心而非整...
WebGL着色器内置变量gl_PointSize、gl_Position、gl_FragColor、gl_FragCoord、gl_PointCoord
u014291990的博客
11-17
1万+
WebGL着色器内置变量
本文是WebGL教程(电子书)的2.7节内容
着色器语言在GPU的着色器单元执行,javascript语言、C语言在CPU上执行,任何一种语言的语法规则,整体设计都和它执行的硬件有一定的关系,GPU和CPU执行程序的硬件单元既有相同点,也有不同点。
这里谈到GPU和CPU不是为了讲解硬件,而是为了提醒大家,学习着色器语言有些语法可以参考javascript、C等执行在CPU...
gl_FragCoord的xyzw
llimite的专栏
02-13
2724
gl_FragCoord.xy代表屏幕的坐標,以分辨率800*600為例窗口,左下角(0,0)Windows(0,600)。
則gl_FragCoord.xy為vec2(0.5,0.5);
右上角(1,1)windows(800,0),則gl_FragCoord.xy為vec2(799.5,599.5)。
gl_FragCoord.z為非線性範圍[0,1]。
是從[znear,zfar]映射
OpenGL超级宝典笔记——GLSL语言基础
weixin_34146986的博客
03-13
236
2019独角兽企业重金招聘Python工程师标准>>>
...
【ShaderToy】基础篇之谈谈点、线的绘制
weixin_33966095的博客
03-14
384
写在前面写前面一篇的时候,发现还是不够基础。
因此打算增加几篇基础篇,从点线面开始,希望可以更好理解。
其实用PixelShader的过程很像在纸上绘画的过程。
屏幕上的每一个像素对应了纸上的一个方格,如果你愿意,你甚至可以一个个判断像素的位置,从而画出任何你想画的图像,也的确有爱好者这么做过。
但往往,我们需要的是一个动态的效果,这个效果往往依赖于数学公式的约束。
我们可以说是,用数学去绘画。
我们用...
opengl各个坐标系理解与转换公式
XR风云
12-11
1487
1、标准化设备坐标(NormalizedDeviceCoordinates,NDC)
顶点坐标已经在顶点着色器中处理过,它们就应该是标准化设备坐标了,标准化设备坐标是一个x、y和z值在-1.0到1.0的一小段空间。
任何落在范围外的坐标都会被丢弃/裁剪,不会显示在你的屏幕上。
2、UV坐标系
UV坐标系一般以左下角为原点(0,0),经常用于贴图上面。
范围为0-1.
...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022CSDN
皮肤主题:数字20
设计师:CSDN官方博客
返回首页
Night_Aurora
CSDN认证博客专家
CSDN认证企业博客
码龄14年
暂无认证
45
原创
6万+
周排名
26万+
总排名
9万+
访问
等级
1484
积分
81
粉丝
52
获赞
49
评论
163
收藏
私信
关注
热门文章
立体角
10469
OSGOIT顺序无关透明绘制(PPLL_OIT,WB_OIT)实现及注意事项
10137
gl_FragCoord的含义
7101
OpenGLProjectionMatrix(讲的比较通俗易懂,而且细致)
5918
(PBR)常见电解质,金属反射率
5252
分类专栏
Vulkan
6篇
C++
3篇
三维模型浏览器
1篇
Filament
6篇
Web
2篇
git
1篇
数据库
1篇
OpenSceneGraph
16篇
建站
G3D
1篇
OpenGL
23篇
渲染
18篇
基于物理渲染
3篇
最新评论
gl_FragCoord的含义
卷王来袭:
gl_FragCoord在unityshader里无法识别,替换成什么变量名才可以识别呢?
GLSLstd140布局规则
Night_Aurora:
按数组对齐规则来看,只要是数组,内部元素无论是标量还是向量,元素都是占vec4大小,对于大量数据的传递,确实够浪费内存的。
矩阵可以看成向量vec2,vec3,vec4的数组,每一行或列占据vec4大小的内存。
结构体根据(roundeduptothebasealignmentofavec4)这条信息来看,也是按vec4对齐了。
GLSLstd140布局规则
四季留歌:
我查了查Stackoverflow,数组这个,分情况
如果数组元素是标量、向量,最多也就4N16byte,那么无论到没到4N(譬如vec2是2N8byte),都要填充完16。
也就是说,即使是2个元素的float数组,那也要占32byte,有效字节只是0~3和16~19,其它都是被填充的。
如果数组元素超过了4N,也就是矩阵和大一些的结构体(结构体超过了4N),那么仍保证每个元素是4N对齐即可,例如mat3是48字节,显然与4N对齐了,又例如某个结构体是18字节,那么两个结构体的ubo要占掉32*2=64字节(每个结构体浪费了14字节用于填充满32个字节)
OSG高效渲染之多线程模型与渲染
david_zf:
博主的建议对我很有启发性,今天看了相关资料,很有帮助,非常感谢。
今天看了博主关于filament分析很透彻,我们可以尝试一下filament,看看效果。
OSG高效渲染之多线程模型与渲染
Night_Aurora:
性能比较好,贴近现代图形管线的,推荐你用filament,或基于它的架构做些事情。
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
Multi-ThreadinginVulkan
VK_KHR_dedicated_allocationunofficialmanual
Vulkan内存
2022年1篇
2021年9篇
2020年12篇
2019年31篇
2018年10篇
目录
目录
分类专栏
Vulkan
6篇
C++
3篇
三维模型浏览器
1篇
Filament
6篇
Web
2篇
git
1篇
数据库
1篇
OpenSceneGraph
16篇
建站
G3D
1篇
OpenGL
23篇
渲染
18篇
基于物理渲染
3篇
目录
打赏作者
Night_Aurora
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:--)
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值
延伸文章資訊
- 1gl_FragCoord 的含义 - 知乎专栏
gl_FragCoord.w 是裁剪空间clip.w 的倒数即1/clip.w , 由上面的透视投影矩阵的推导过程可以看出,为了凑透视除法, clip.w 值就是眼坐标系z 值的负数,也 ...
- 2What 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...
- 3LearnOpenGL - Depth Testing
The x and y components of gl_FragCoord represent the fragment's screen-space coordinates (with (0...
- 4高级GLSL
如果着色器中没有像 gl_FragDepth 变量写入,它就会自动采用 gl_FragCoord.z 的值。 我们自己设置深度值有一个显著缺点,因为只要我们在片段着色器中对 gl_FragDep...
- 5What does (gl_FragCoord.z / gl_FragCoord.w) represent?
gl_FragCoord.z is generated by the following process, assuming the usual transforms: Camera-space...