(1)属性,使在顶点着色器中使用的变量,用于描述顶点的属性,如位置、颜色、法向量等,attributes通常用于描述每个顶点的属性,因此在顶点缓冲对象中存储,渲染的时候,openGL会自动将顶点数据传递给顶点着色器中的Attributes变量。
(2)Uniform是在顶点着色器或者片段着色器中定义的全局变量,值可以在CPU端进行修改,而在GPU端的着色器中保持不变,Uniforms通常描述场景中的全局状态,如变换矩阵,灯光参数,纹理单元等,渲染的时候开发者可以使用OpenGL API来修改Uniform的值,达成对不同场景进行渲染的目的。
Attributes用于描述顶点数据,Uniforms用于描述全局状态和场景参数。Attributes的值在渲染时自动传递给顶点着色器,而Uniforms的值则需要开发者手动设置。
另外,Attributes的值在每个顶点之间是不共享的,而Uniforms的值在整个着色器程序中是共享的。Attributes通常用于对每个顶点进行单独处理,而Uniforms通常用于在整个场景中保持一致的状态。
(3)纹理,如何处理纹理并将其传递到着色器?(之后再说)
别的作用?顶点着色器和片段着色器都对纹理值进行了采样和筛选,纹理数据的作用不仅仅是表选图形。
在OpenGL中,纹理数据的格式是由内部格式(internal format)和像素格式(pixel format)组成的。内部格式指的是数据在显存中的存储格式,像素格式指的是从外部文件或内存中读取数据时的格式。
浮点纹理,可以将大型的浮点数据块(例如消耗资源很大的函数的大型查询表)存储为纹理数据,然后在着色器程序中对其进行处理。这样可以利用GPU的高并行性能来加速计算,并降低CPU的负载。
例如,如果要在着色器程序中使用一个大型的查询表,可以将查询表数据存储为一个浮点纹理,然后在着色器程序中对其进行采样。这样可以显著提高程序的性能,并节省内存和计算资源。
(4)中间产物:输出数据类型,输出数据类型是一种在着色器程序中定义的变量类型,通常用于将数据从一个着色器阶段传递到另一个着色器阶段。
输出数据类型使用out关键字进行声明。顶点着色器可以将输出数据传递给后续的几何着色器或片段着色器,片段着色器可以将输出数据传递给后续的帧缓冲或屏幕。
在输出数据类型中,常用的数据类型包括:
vec4:4维向量类型,用于描述位置、颜色、法向量等。
float:单精度浮点数类型,用于描述颜色、深度等。
int:整数类型,用于描述索引、计数等。