GLSL着色语言
# GLSL
# 概念理解
- OpenGL的着色器语言是GLSL,也就是
OpenGL Shading Language
- OpenGL分为
OpenGL
和OpenGL ES
- 开始支持可编程渲染管线的版本是
OpenGL 2.0
和OpenGL ES 2.0
OpenGL 3.0
是最后既支持可编程渲染管线也支持固定管线的版本,之后就完全移除了固定管线的概念
# 最新版本的OpenGL包含
- 顶点着色器
Vertex Shader
- 几何着色器
Geometry Shader
- 曲面细分着色器
Tessellation Shader
- 片元着色器
Fragment Shader
# OpenGL使用着色器的流程
- 创建着色器对象
- 源码关联到着色器对象
- 编译着色器
- 创建一个程序对象
- 将着色器对象关联到程序对象
# OpenGL与GLSL通信

# OpenGL与GLSL版本对应

# OpenGL集成开发环境
- Visual Studio 2019
- GLFW (OpenGL C语言库,对于渲染提供了接口)
- GLAD (管理OpenGL的函数矩阵)
# GLSL数据类型
- 标量:整数(int) 、无符号整数(uint)、布尔类型(bool)及浮点(float)
- 矢量:一个矢量可以有2、3、4个分量
vec4 a = vec4(1.0,2.0,3.0,4.0);
- 矩阵:
mat2 m = mat2(1.0,2.0,3.0,4.0);

- 结构和数组:结构体的成员或者数组的基类型可以为任意的数据类型
//定义一个光源结构体
struct lightSource{
vec3 color;
vec3 position;
}
//定义10个光源
lightSource spotlights[10]
1
2
3
4
5
6
7
2
3
4
5
6
7
# GLSL控制结构
- 循环结构:
for,while 和 do while
- 选择结构:
if-then,if-then-else,GLSL3.0引入了switch结构
注意
goto 语句和标签是绝对不可以使用的
# EBO、VBO和VAO
EBO(element buffer object,也叫index buffer object)索引缓冲区对象,这个缓冲区主要用来存储顶点的索引信息
EBO VBO(vertex buffer object)顶点缓冲区对象,主要用来存储顶点的各种信息。好处:模型的顶点信息放进VBO,这样每次画模型时,数据不在通过CPU从内存中读取,而是直接从GPU的显存中读取,从而提高效率

- VAO(vertex array object)顶点数组对象,VAO是一个绑定了所有顶点数据属性和状态的集合,它存储了顶点数据的格式以及顶点数据所需的VBO对象的引用

编辑 (opens new window)
上次更新: 2025/03/22, 13:47:44