顶点属性 Vertex Attribute
顶点着色器 VertexShader的输入变量叫做 顶点属性
数据类型
基础数据类型 int float double uint bool
容器类型 Vector(向量) Matrix(矩阵)
向量
一个包含4个分量的容器 x y z w,分量类型可以是基础类型
表示向量的分量类型定义方式
n=分量的数量
|
类型
|
含义
|
|
vecn
|
包含
n
个float分量的默认向量
|
|
bvecn
|
包含
n
个bool分量的向量
|
|
ivecn
|
包含
n
个int分量的向量
|
|
uvecn
|
包含
n
个unsigned int分量的向量
|
|
dvecn
|
包含
n
个double分量的向量
|
向量重组 Swizzling 以一种灵活的方式来可以随意组合出新的向量值
必须同类型
vec2 someVec;
vec4 differentVec = sommVec.xyxx;
vec3 anotherVec = differentVec.zyw
vec2 vect = vec2(0.5,0.5);
vec4 result = vec4(vect,0.0,0.0);
vec4 otherResult = vec4(result.xyz,1.0);
输入和输出
in out 两个关键字,让着色器程序之间链接起来,顶点着色器定义接收 顶点数据和UV数据的int 数据类型 ,片段着色器接收 顶点着色器out 类型的数据
Uniform
一个可以从CPU程序中传递给GPU代码的 变量的标识符,他是个全局变量,定义后就可以用C++代码给这个值传数据,如果片段着色器想获取这个数据,不需要从顶点着色器传递。如果定义了,
但是 shader代码里没有使用过,编译后会清理掉这个变量导致程序错误 这个要注意
glGetUniformLocation 2个参数 shader着色器 属性名字 返回一个属性的ID
glUniform4f 通过属性ID 设置参数数值
片段插值 Fragment Interpolation 2个顶点之间和2个顶点之间的颜色插值,每个像素就算一个片段,但是只提供了2个像素颜色,所以中间像素需要获取到俩只的插值Interpolation
光栅化 Rasterization 就是将几何信息转换成一个个个栅格的组成的图像的过程
什么是光栅化
https://static.app.yinxiang.com/embedded-web/profile/#/join?guid=c8577bb2-6190-4bd2-9ddc-32d08de6fa70&channel=copylink&shardId=s18&ownerId=1948143
我们自己的着色器类
写一个编译shader文件的类 shader代码写到单独文件内
可以装个VS的插件
shader文件后缀写.glsl 方便编写