• OpenGL之着色器


    着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说,着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立的程序,因为它们之间不能相互通信;它们之间唯一的沟通只有通过输入和输出。

    GLSL

    着色器是使用一种叫GLSL的类C语言写成的。GLSL是为图形计算量身定制的,它包含一些针对向量和矩阵操作的有用特性。

    1.  声明版本
    2. 输入和输出变量
    3. uniform
    4. main函数

    每个着色器的入口点都是main函数,在这个函数中我们处理所有的输入变量,并将结果输出到输出变量中。

    1. in type in_variable_name;
    2. in type in_variable_name;
    3. out type out_variable_name;
    4. uniform type uniform_name;
    5. int main()
    6. {
    7. // 处理输入并进行一些图形操作
    8. ...
    9. // 输出处理过的结果到输出变量
    10. out_variable_name = weird_stuff_we_processed;
    11. }

    每个输入变量也叫顶点属性(Vertex Attribute)。我们能声明的顶点属性是有上限的,它一般由硬件来决定。OpenGL确保至少有16个包含4分量的顶点属性可用,但是有些硬件或许允许更多的顶点属性,你可以查询GL_MAX_VERTEX_ATTRIBS来获取具体的上限:

    1. int nrAttributes;
    2. glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrAttributes);
    3. std::cout << "Maximum nr of vertex attributes supported: " << nrAttributes << std

    数据类型

    GLSL有数据类型可以来指定变量的种类。GLSL中包含C等其它语言大部分的默GLSL有数据类型可以来指定变量的种类。GLSL中包含C等其它语言大部分的默认基础数据类型:intfloatdoubleuintbool。GLSL也有两种容器类型,它们会在这个教程中使用很多,分别是向量(Vector)和矩阵(Matrix),:intfloatdoubleuintbool。GLSL也有两种容器类型,分别是向量(Vector)矩阵(Matrix)。

    向量

    GLSL中的向量是一个可以包含有2、3或者4个分量的容器,分量的类型可以是前面默认基础类型的任意一个。它们可以是下面的形式(n代表分量的数量):

    类型 含义
    vecn 包含n个float分量的默认向量
    bvecn 包含n个bool分量的向量
    ivecn 包含n个int分量的向量
    uvecn 包含n个unsigned int分量的向量
    dvecn 包含n个double分量的向量

    一个向量的分量可以通过vec.x这种方式获取,这里x是指这个向量的第一个分量。你可以分别使用.x.y.z.w来获取它们的第1、2、3、4个分量。GLSL也允许你对颜色使用rgba,或是对纹理坐标使用stpq访问相同的分量

    向量这一数据类型也允许一些有趣而灵活的分量选择方式,叫做重组(Swizzling)。重组允许这样的语法:

    1. vec2 someVec;
    2. vec4 differentVec = someVec.xyxx;
    3. vec3 anotherVec = differentVec.zyw;
    4. vec4 otherVec = someVec.xxxx + anotherVec.yxzy;

    你可以使用上面4个字母任意组合来创建一个和原来向量一样长的(同类型)新向量,只要原来向量有那些分量即可

  • 相关阅读:
    【Fiddler Everywhere】2022最强抓包工具(安装 修改教程)
    基于onbar的备份与恢复实验
    pycharm如何远程连接服务器上的docker容器
    部署WekaFS并行文件系统的10大理由
    计算机毕业设计Java计算机office课程平台(源码+系统+mysql数据库+lw文档)
    Python入门基础篇
    智汀双管齐下,玩转米家&HomeKit智能家居
    GIS原理篇 地图投影
    【深度学习】使用深度学习框架来简洁地实现线性回归模型
    Web应用渗透测试系统(Python)
  • 原文地址:https://blog.csdn.net/qq_44632658/article/details/133156621