WebGL着色器内置变量gl_PointSize - gl_FragCoord - CSDN博客
文章推薦指數: 80 %
gl_FragColor, 片元颜色值, vec4. gl_FragCoord, 片元坐标,单位像素, vec2. gl_PointCoord, 点渲染模式对应点像素坐标, vec2 ...
WebGL着色器内置变量gl_PointSize、gl_Position、gl_FragColor、gl_FragCoord、gl_PointCoord
郭隆邦技术博客
于 2019-11-1720:46:14 发布
16225
收藏
35
分类专栏:
WebGL
版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014291990/article/details/103112914
版权
WebGL
专栏收录该内容
40篇文章
20订阅
订阅专栏
WebGL着色器内置变量
WebGL中文教程网
本文是WebGL教程(电子书)的2.7节内容
着色器语言在GPU的着色器单元执行,javascript语言、C语言在CPU上执行,任何一种语言的语法规则,整体设计都和它执行的硬件有一定的关系,GPU和CPU执行程序的硬件单元既有相同点,也有不同点。
这里谈到GPU和CPU不是为了讲解硬件,而是为了提醒大家,学习着色器语言有些语法可以参考javascript、C等执行在CPU上的语言,比如if语句、for语句、浮点数、布尔值,有些语法完全没必要参考javascript、C等执行在CPU上的语言,比如着色器语言中的内置变量gl_PointSize、gl_Position、gl_FragColor等等,声明一些变量使用的关键字attribute、uniform、varying。
学习着色器语言的时候,如果你有兴趣可以深入研究GPU,对于WebGL学习来说,把GPU当成一个黑箱就可以,你只需要学会着色器语言的编程规则即可
普通变量,着色器语言和javascript语言一样需要先声明后使用,所谓内置变量就是不用声明可以直接赋值,主要是为了实现特定的功能。
内置变量含义值数据类型gl_PointSize点渲染模式,方形点区域渲染像素大小floatgl_Position顶点位置坐标vec4gl_FragColor片元颜色值vec4gl_FragCoord片元坐标,单位像素vec2gl_PointCoord点渲染模式对应点像素坐标vec2
gl_PointSize
当WebGL执行绘制函数gl.drawArrays()绘制模式是点模式gl.POINTS的时候,顶点着色器语言main函数中才会用到内置变量gl_PointSize,使用内置变量gl_PointSize主要是用来设置顶点渲染出来的方形点像素大小。
voidmain(){
//给内置变量gl_PointSize赋值像素大小,注意值是浮点数
gl_PointSize=20.0;
}
//绘制函数绘制模式:点gl.POINTS
gl.drawArrays(gl.POINTS,0,点数量);
gl_Position
gl_Position内置变量主要和顶点相关,出现的位置是顶点着色器语言的main函数中。
gl_Position内置变量表示最终传入片元着色器片元化要使用的顶点位置坐标。
如果只有一个顶点,直接在给顶点着色器中设置内置变量gl_Position赋值就可以,内置变量gl_Position的值是四维向量vec4(x,y,z,1.0),前三个参数表示顶点的xyz坐标值,第四个参数是浮点数1.0。
voidmain(){
//顶点位置,位于坐标原点
gl_Position=vec4(0.0,0.0,0.0,1.0);
}
如果你想完全理解内置变量gl_Position,必须建立逐顶点的概念,如果javascript语言中出现一个变量赋值,你可以理解为仅仅执行一次,但是对于着色器中不能直接这么理解,如果有多个顶点,你可以理解为每个顶点都要执行一遍顶点着色器主函数main中的程序。
多个顶点的时候,内置变量gl_Position对应的值是attribute关键字声明的顶点位置坐标变量apos,顶点位置坐标变量apos变量对应了javascript代码中多个顶点位置数据。
所谓的逐顶点,在这里体现的就是每一个顶点都会执行main函数中的矩阵变换。
你可以参照生活的流水线去理解,比如多个同样的设备从我这里经过,我会分别对他们进行同样的操作,比如安装一个零件。
gl_FragColor
gl_FragColor内置变量主要用来设置片元像素的颜色,出现的位置是片元着色器语言的main函数中。
内置变量gl_Position的值是四维向量vec4(r,g,b,a),前三个参数表示片元像素颜色值RGB,第四个参数是片元像素透明度A,1.0表示不透明,0.0表示完全透明。
//片元颜色设置为红色
gl_FragColor=vec4(1.0,0.0,0.0,1.0);
理解内置变量gl_Position需要建立逐顶点的概念,对于内置变量gl_FragColor而言,需要建立逐片元的概念。
顶点经过片元着色器片元化以后,得到一个个片元,或者说像素点,然后通过内置变量gl_FragColor给每一个片元设置颜色值,所有片元可以使用同一个颜色值,也可能不是同一个颜色值,可以通过特定算法计算或者纹理像素采样。
根据位置设置渐变色
voidmain(){
//片元沿着x方向渐变
gl_FragColor=vec4(gl_FragCoord.x/500.0*1.0,1.0,0.0,1.0);
}
纹理采样
//接收插值后的纹理坐标
varyingvec2v_TexCoord;
//纹理图片像素数据
uniformsampler2Du_Sampler;
voidmain(){
//采集纹素,逐片元赋值像素值
gl_FragColor=texture2D(u_Sampler,v_TexCoord);
}
片元坐标gl_FragCoord
内置变量gl_FragCoord表示WebGL在canvas画布上渲染的所有片元或者说像素的坐标,坐标原点是canvas画布的左上角,x轴水平向右,y竖直向下,gl_FragCoord坐标的单位是像素,gl_FragCoord的值是vec2(x,y),通过gl_FragCoord.x、gl_FragCoord.y方式可以分别访问片元坐标的纵横坐标。
下面代码是把canvas画布上不同区域片元设置为不同颜色。
绘制函数gl.drawArrays()绘制模式参数设置为点渲染模式gl.POINTS,WebGL会把顶点渲染为一个方形区域,在顶点着色器代码中可以通过内置变量gl_PointSize设置顶点渲染的方向区域像素大小。
一个顶点渲染为一个方形区域,每个方形区域可以以方向区域的左上角建立一个直角坐标系,然后使用内置变量gl_PointCoord描述每个方形区域中像素或者说片元的坐标,比如方形区域的左上角坐标是(0.0,0.0),每个方形区域几何中心坐标是(0.5,0.5),右下角坐标是(1.0,1.0)。
注意内置变量gl_PointCoord和gl_FragCoord表示的像素坐标含义不同,查看下图表示。
//点绘制模式渲染10个顶点
gl.drawArrays(gl.POINTS,0,10);
顶点着色器中通过内置变量gl_PointSize设置点渲染的方形区域像素尺寸。
voidmain(){
//点渲染的方形区域像素大小
gl_PointSize=20.0;
...
}
gl_PointCoord应用案例
gl.POINTS绘制模式点默认渲染效果是方形区域,通过下面片元着色器代码设置可以把默认渲染效果更改为圆形区域。
因为之前openGL绘制图形只需要对各个绘制的属性进行赋值(openGL叫做管线,其实按照我的理解就是属性),比如属性FragColor决定了绘制的点的位置,属性glPostion决定了绘制点的颜色。
但是着色器出现,随之而来的是VBO,VAO的出现。
这允许绘图者自己定义需要哪些属性,以及如何传递它们。
里面代码看似复杂繁多,其实需要更改的只是几个简单的内容:VBO,VAO,EBO等。
其他的代码是固定的。
VBO
是一个一维数组,里面按照顺序摆放点
OpenGL绘制方式详解
先锋小牛
12-29
4590
简述
OpenGL绘制方式
OpenGL可以支持很多不同的图元类型,最基础的为点,线,或三角形。
线和三角形可以组合成条带,循环体或者扇面三角形。
点,线,或三角形也是大部分图象硬件设备支持的基础图元类型。
点
点可以通过单一的顶点来表示,点实际上不存在面积,在OpenGL中它通过屏幕上的一个矩形区域来模拟,在渲染点源的时候,OpenGL会通过光栅化规则类判断点的位置。
以点位中心绘制一个
探究gl_Position.w
qq_21476953的博客
04-22
283
探究gl_Position.w
结论:w是顶点距离相机的距离。
0、环境搭建
geometry:
constsize=10
vargeometry=newTHREE.BoxBufferGeometry(size,size,size);
varmaterial=newTHREE.ShaderMaterial({
uniforms:{
camPos:{type:"f",value:this.stage.camera.position.z}
},
v
Opengl函数glPointSize()
u010029439的博客
07-20
6660
https://baike.baidu.com/item/glPointSize/9516768?fr=aladdin
个人理解:opengl中的点不同于像素,它的意思是我们在屏幕上绘制的直径可设置的点。
当我们把参数设置很大时,会发现这个点变成一个大大的方块。
(:
glPointSize
编辑讨论
本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!...
关于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
WebGL—gl_Positiongl_FragCoordgl_PointCoord区别
weixin_43787178的博客
05-06
359
gl_Position,gl_FragCoord,gl_PointCoord分别描述渲染管线中的顶点,片元,点域图元(点精灵/PointSprite)光栅化后的片元在各自坐标系中的大小;可以借助上图区分记忆。
区别:
gl_Position:
1.gl_Position描述的是顶点在世界坐标系中的坐标;
2.是绝对大小;
gl_FragCoord:
1.gl_FragCoord描述的是片元在以Canvas画布窗口坐标系统中的坐标;
2.是绝对大小;
3.单位为像素;
gl_PointCoord:
1.gl.
【我的OpenGL学习进阶之旅】介绍一下图元的类型:三角形、直线和点精灵
字节卷动
12-05
556
一、图元
图元是可以用OpenGLES中的glDrawArrays、glDrawElements、glDrawRangeElements、glDrawArraysInstanced和glDrawElementsInstanced命令绘制的几何形状对象。
图元由一组表示顶点位置的顶点描述。
其他如颜色、纹理坐标和几何法线等信息也作为通用属性与每个顶点关联。
OpenGLES可以绘制如下图元:
三角形
直线
点精灵
1.1三角形
三角形代表着描述由3D应用程序渲染的几何形状对象时最常用的方法。
Open
openGL之API学习(一)gl_Position
热门推荐
hankern的专栏
03-02
1万+
默认是归一化的裁剪空间坐标(xyz各个维度的范围为-1到1)
仅能在顶点着色器中使用,既是输入也是输出
gl_Position赋值范围就是float的取值范围(32位),只不过只有[-1,1]区间的片元被绘制
它是vec4类型的,不能重声明为dvec4等类型
...
QML进阶(七)-OpenGL渲染着色器效果实现
最新发布
yang1fei2的博客
05-04
357
通过QML的ShaderEffect和ShaderEffectSource元素,我们可以运用OpenGL的能力实现各种各样的渲染效果。
着色器的渲染算法是通过OpengGL的渲染语言实现的。
这意味着,我们需要实现QML代码和着色器代码的混合编程,在程序执行的时候对应的着色器程序会被发送到GPU上编译运行。
QML的着色器程序允许用户与OpenGL进行实时交互,动态修改。
OpenGL着色器
OpenGL的着色器主要分为两种:顶点着色器(vertexshader)和片源着色器(FragmentShader)
Three之three.js(webgl)着色器材质的一些内置变量的简单说明(gl_PointSize/gl_Position/gl_PointCoord/gl_FragCoord...)
仙魁XAN
04-09
184
three.js着色器的内置变量,分别是
gl_PointSize:在点渲染模式中,控制方形点区域渲染像素大小(注意这里是像素大小,而不是three.js单位,因此在移动相机是,所看到该点在屏幕中的大小不变)
gl_Position:控制顶点选完的位置
gl_FragColor:片元的RGB颜色值
gl_FragCoord:片元的坐标,同样是以像素为单位
gl_PointCoord:在点渲染模式中,对应方形像素坐标
他们或者单个出现在着色器中,或者组团出现在着色器中,是着色器的灵魂
...
我的webgl学习之路(8)设置各点的颜色
七岁
09-09
1623
方法与上面一样,唯一的区别就是颜色设置;
颜色的设置必须在片元着色器中,gl_FragColor里
我们attribute只能在顶点着色器中使用;那么怎么办;
Varying用于两个着色器之间通信;
如图:
如下:
<scriptid="vs"type="x-shader/x-vertex"> attributevec4a_Position;
...
Shader中的颜色计算
weixin_33692284的博客
09-20
736
下面介绍Shader中gl_FragColor的计算与转换:
一、颜色计算
1.加
这里要讲讲三原色和三基色:三原色一般指的是红、绿、蓝三种,简称RGB,这是加色系。
就是光源只含有特定的波段,本身就是色光,将不同颜色的光加在一起形成新的颜色。
典型的例子是显示屏,关系如下:
显然,shader中的颜色属于加色系。
当我们把颜色相加时,会形成新的颜色,并且颜色会往白色靠拢。
颜色的混合规律...
glPointSize()未起作用glDrawElements
x2017x的博客
04-24
1300
glPointSize(GLfloatsize);
glDrawElements(GL_POINTS,...)画点默认点的半径为一个像素,因此去查询得知使用这个函数可以设置画出的点的大小,size为点的半径(以像素为单位),试了好久未生效。
Google后得出结论:OpenGLES2.0版本后glPointSize()改为了在顶点着色器上设置gl_PointSize。
outgl_P...
gl_FragCoord的含义
fatcat123的博客
01-06
7121
gl_FragCoord表示当前片元着色器处理的候选片元窗口相对坐标信息,是一个vec4类型的变量(x,y,z,1/w),其中x,y是当前片元的窗口坐标,OpenGL默认以窗口左下角为原点,在着色器中通过布局限定符可以重新设定原点,比如窗口左上角为原点origin_upper_left,窗口大小由glViewport()函数指定。
x,y默认是像素中心而非整...
WebGL空间变换以及gl_FragCoord的运用
NCQuan
12-16
211
WebGL空间变换
局部坐标系——》世界坐标系——》相机坐标系——》剪裁坐标系——》规范化设备坐标系——》屏幕坐标系
模型变换:world.xyzw=modelMatrix*position.xyzw;
视图变换::eye.xyzw=viewMaterix*world.xyzw;
投影变换:clip.xyzw=projectMatrix*eye.xyzw;
透视除法(w归1化):ndc.xyzw=clip.xyzw/clip.w;
视口变换:screen.xy=(nd
shader编程-着色器中颜色基础(WebGL-Shader开发基础06)
点燃火柴的博客
11-23
599
shader编程-着色器中颜色基础1.屏幕颜色2.颜色根据屏幕坐标变化3.形状颜色处理4.借助A通道处理形状颜色
1.屏幕颜色
在之前的文章中我们用一个三维向量表示颜色
vec3line_color=vec3(1.0,1.0,0.0);
vec3color=vec3(0.6);
用三维向量表示颜色因为正好它的三个分量可以代表RGBA格式的颜色中的Red(红色)Green(绿色)Blue(蓝色)分量,
我们在最后通常会有一句
gl_FragColor=vec4(color,1.0
卜若的代码笔记-webgl系列-第二十一章:glsl的应用(一)>实现透明效果
qq_37080133的博客
09-22
322
1在网页中,我们可能会有这种需求:比如我想让一张图里面指定的某张图片的某些颜色给透明掉:
比如:我希望这张图
白色部分不可见:如以下效果:
那么,我们就可以通过webgl来实现:
glsl的基础部分请看前面的系列内如,现在我们单独把shader拎出来讲:
首先,要使用透明,那么必然要开启混合:
glContext.enable(glContext....
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
郭隆邦技术博客
CSDN认证博客专家
CSDN认证企业博客
码龄8年
暂无认证
141
原创
2万+
周排名
73万+
总排名
48万+
访问
等级
6431
积分
595
粉丝
179
获赞
120
评论
829
收藏
私信
关注
热门文章
WebGL着色器内置变量gl_PointSize、gl_Position、gl_FragColor、gl_FragCoord、gl_PointCoord
16195
Three.js删除模型对象(.remove()和·dispose()方法)
13637
Three.js视频教程
12295
Three.js自发光贴图.emissiveMap
10456
产品三维模型在线预览
9667
分类专栏
Three.js
122篇
WebGL
40篇
视频教程
1篇
Threejs中文文档
31篇
最新评论
WebGL教程(电子书)
摇摇七喜呀:
同问现在有源代码了么,出不来啊
Threejs纹理对象Texture阵列、偏移、旋转(纹理动画)
骑着骆驼去看海:
管道里面白色的线条是贴图吗?
Three.js解析外部模型的帧动画
star117968524:
model.json在哪里?
HTML5地球Web3D可视化(WebGLThree.js)
蔡徐鲲:
THREE.Face3
在最新的threejs中没有了吗
WebGL着色器内置变量gl_PointSize、gl_Position、gl_FragColor、gl_FragCoord、gl_PointCoord
loveRoselove:
gl_FragCoord默认以左下角为坐标原点,可以通过设置或者通过y转变成左上角原点,然后gl_FragCoord是4维向量xyzw分量,gl_PointCoord是2维向量,有xy分量。
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
HTML5地球Web3D可视化(WebGLThree.js)
Three.js平面Plane
Three.js三角形Triangle
2021年1篇
2019年183篇
2018年13篇
目录
目录
分类专栏
Three.js
122篇
WebGL
40篇
视频教程
1篇
Threejs中文文档
31篇
目录
打赏作者
郭隆邦技术博客
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:--)
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值
延伸文章資訊
- 1使用shaders 在WebGL 上色
替fragment 上色. 我們重新回顧一下,之前我們的fragment shader 如下:. const fsSource = ` void main() { gl_FragColor = ...
- 2WebGL着色器内置变量gl_PointSize - gl_FragCoord - CSDN博客
gl_FragColor, 片元颜色值, vec4. gl_FragCoord, 片元坐标,单位像素, vec2. gl_PointCoord, 点渲染模式对应点像素坐标, vec2 ...
- 3找gl_FragColor相關社群貼文資訊| 服飾貼文懶人包-2022年1月
關於「gl_FragColor」標籤,搜尋引擎有相關的訊息討論:. 使用shaders 在WebGL 上色- Web APIs | MDN。 ARRAY_BUFFER, new Float32A...
- 4一起幫忙解決難題,拯救IT 人的一天
昨天提到fragment shader 輸出gl_FragColor gl_FragColor // vec4 ... gl_FragColor = vec4(1.0, 1.0, 0.0, 1....
- 5varying 傳遞著色資訊
至今為止的範例,片段著色器的gl_FragColor 都是寫死的,然而attribute 只能用在頂點著色器中,若想自行指定顏色資訊,應當如何傳遞給片段著色器? 著色器的設計, ...