OpenGL着色器语言

本文介绍了OpenGL着色器语言的基础知识,包括着色器架构、变量和数据类型、存储限定符等内容。讲解了顶点着色器、片段着色器的作用,以及如何向着色器传递数据。同时,阐述了向量、矩阵类型及其操作,以及存储限定符在着色器中的应用。此外,还讨论了着色器的编译、绑定、链接过程以及如何使用着色器统一值。
摘要由CSDN通过智能技术生成

初识OpenGL着色器语言


未完待续:


1、着色器架构

OpenGL着色器语言(GLSL)由OpenGL实现链接和编译,完全在图形硬件中运行。

基本着色器架构

至少需要两个着色器

  • 顶点着色器
  • 片段着色器。
  • 还有一种可选的着色器称为几何着色器。

我们可以在3中方式中选择一种向顶点着色器传递数据:

  1. 参数,是对每个顶点而言的。
  2. 统一值,是针对整个顶点数据批次的常量。
  3. 加载和使用纹理数据。

可以为片段着色器设置统一值和纹理数据。

注意:将顶点属性发送到片段着色器毫无意义,因为片段着色器只是用来在土元进行光栅化后对片段进行填充(最基本的是像素)。

着色器程序的从入口点main函数开始。


2、变量和数据类型

数据类型:

  • 整数(有符号和无符号)
  • 浮点数(单精度)
  • 布尔值

    没有指针,且没意任何类型的字符串和字符。但函数可以还回这些类型的一种,也可以声明为void。

向量类型:

向量数据类型 描述
vec2,vec3,vec4 2分量,3分量,4分量浮点向量
ivec2,ivec3,ivec4 2分量,3分量,4分量整数向量
uvec2,uvec3,uvec4 2分量,3分量,4分量无符号整数向量
bvec2,bvec3,bvec4 2分量,3分量,4分量布尔向量

我们可以使用一个“构造函数初始化一个向量。
例如:

vec4 vVertexPos = vec4(39.0f, 10.0f, 0.0f, 1.0f);

有关向量的操作:

vVertexPos = vOldPos + vOffset;  //两个向量相加
vVertexPos = vNewPos;   //赋值
vVertexPos = vec4(1.0f, 1.0f, 0.1f, 0.0f); 
vVertexPos *= 5.0f;   //进行缩放

可以对独立元素进行寻址:
1.典型情况下:

vVertexPos.x = 3.0f;
vVertexPos.xy = vec2(3.0f, 5.0f);
vVertexPos.xyz = vNewPos.xyz;

2.进行颜色操作时使用rgba:

vOutputColor.r = 1.0f;

3.进行纹理操作时用stpq。


4.向量类型还支持调换操作:
如:

vNewColor.bgra = vOtherVertex.x + 5.0f;

向量类型不只是着色器的本地数据类型,也是硬件的数据类型,速度很快。

矩阵类型:
所以的矩阵只支持浮点数。

矩阵类型 描述
mat2,mat2x2 两行两列
mat3,mat3x3 三行三列
mat4,mat4x4 四行四列
mat2x3 两行三列
mat2x4 两行四列
mat3x2 三行两列
mat3x4 三行四列
mat4x2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值