OpenGL学习笔记-05-着色器-数据类型/输入输出/uniform
数据类型
基本类型:向量
怎么写:
- vecn: n为一个整数,通常表示有n个float分量的向量
示例:
vec3 Vec(0.1, 0.2, 0.3); 表示这是一个有3个float分量的向量,向量名称为Vec
Vec.x、Vec.y、Vec.z,分别表示第一个、第二个、第三个向量
- Vec.x = 0.1
- Vec.y = 0.2
- Vec.z = 0.3
Vec4 Vec2 = (Vec, 0.0); 这种写法,表示建立一个4维的Vec2分量,其中前三个分量,使用Vec进行赋值
- Vec2.x = 0.1
- Vec2.y = 0.2
- Vec2.z = 0.3
- Vec2.w = 0.0
输入与输出
本质:
- 输入:数据进入着色器的入口
- 输出:数据离开着色器,传给下一阶段的出口
基本通道
- 暂时无法在飞书文档外展示此内容
Uniform
- 本质:就是从CPU 发送到 GPU 的全局只读变量,在整个绘制过程中,所有顶点和像素看到的都是同一个值。
- 作用:减少CPU和GPU之间的数据吞吐量,你只用传递一次,着色器里所有需要使用的地方都能用
- 类比:工厂的“大屏幕公告”,工厂里所有人都能看到
- 简单示例:
//cpu层伪代码,仅展示关键步骤//cpu中,获取uniform位置glUseProgram(shaderProgram);intcolorLoc=glGetUniformLocation(shaderProgram,"uColor");//给uniform传值glUniform3f(colorLoc,r,g,b);//片段着色器伪代码out vec4 FragColor;uniform vec3 uColor;//最终FragColor使用的,就是cpu传来的unifor值voidmain(){FragColor=vec4(uColor,1.0);}