What does (gl_FragCoord.z / gl_FragCoord.w) represent?

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

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币套餐、付费专栏及课程。

余额充值



請為這篇文章評分?