【转载】GLSL语法与内建函数
本文来自博客园,作者:jiayayao,邮箱:jiayayao@126.com,转载请注明原文链接:https://www.cnblogs.com/jiayayao/p/9446324.html
GLSL,OpenGL Shading Language,
(1)GLSL的修饰符与基本数据类型
修饰符
const:用于声明非可写的编译时常量变量;
attribute:用于经常更改的信息,只能在顶点着色器中使用;
uniform:用于外部程序传递给shader的变量,shader只能用,不能改;
varying:用于从顶点着色器向片元着色器传递数据的变量。
基本数据类型
int、float、bool。注意float可以指定精度:
highp:32bit,一般用于顶点坐标(vertex coordinate);
medium:16bit,一般用于纹理坐标(texture coordinate);
lowp:8bit,一般用于颜色表示。
向量类型。
vec4:4分量浮点向量;
ivec4:4分量整数向量;
uvec4:4分量无符号整数向量;
bvec4:4分量布尔向量;
举例 - 四维向量:
attribute vec4 position;
矩阵类型
所有的矩阵类型都只支持浮点数,不支持整数或者布尔矩阵:
uniform lowp mat4 colorMatrix;
纹理类型
一般仅在Fragment Shader中使用这个类型,二维纹理的声明方式如下:
uniform sampler2D texSampler;
示例
varing用于在Vertex Shader和Fragment Shader中传递参数。首先在VS中声明这个类型的变量代表纹理的坐标点,并且对这个变量进行赋值,代码如下:
attribute vec2 texcoord; varying vec2 v_texcoord; void main(void) { v_texcoord = texcoord; }
紧接着在FS中也声明同名的变量,然后使用texture2D方法取出二维纹理中该纹理坐标点上的像素值,代码如下:
varying vec2 v_texcoord;
vec4 texel = texture2D(texSampler, v_texcoord);
取出了该坐标点上的像素值之后,就可以进行像素变化操作了,比如说提高对比度,最终将改变的像素值赋给gl_FragColor。
(2)GLSL的内置函数与内置变量
最常见的内置变量是两个Shader的输出变量,首先是VS的:
vec4 gl_position;
上述代码用来设置顶点转换到屏幕坐标的位置,VS一定要去更新这个数值。
float gl_pointSize;
在粒子效果的场景下,需要为粒子设置大小,改变该内置变量的值就是为了设置每一个粒子矩形的大小。
其次是FS的内置变量:
vec4 gl_FragColor;
上述代码用于指定当前纹理坐标所代表的像素点的最终颜色值。
(3)其他
还有一个方法texture2D,第一个参数是纹理数据,第二个参数是纹理坐标,这个方法就是在纹理数据中取出当前片段对应在纹理数据中位置上的数据颜色。
可以参考 GLSL 内建函数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通