ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenGL学习笔记-05-着色器-数据类型/输入输出/uniform

OpenGL学习笔记-05-着色器-数据类型/输入输出/uniform

数据类型

  • 基本类型:向量

  • 怎么写:

    • vecn: n为一个整数,通常表示有n个float分量的向量
  • 示例:

    • vec3 Vec(0.1, 0.2, 0.3); 表示这是一个有3个float分量的向量,向量名称为Vec

    • Vec.x、Vec.y、Vec.z,分别表示第一个、第二个、第三个向量

      • Vec.x = 0.1
      • Vec.y = 0.2
      • Vec.z = 0.3
    • Vec4 Vec2 = (Vec, 0.0); 这种写法,表示建立一个4维的Vec2分量,其中前三个分量,使用Vec进行赋值

      • Vec2.x = 0.1
      • Vec2.y = 0.2
      • Vec2.z = 0.3
      • Vec2.w = 0.0

输入与输出

  • 本质:

    • 输入:数据进入着色器的入口
    • 输出:数据离开着色器,传给下一阶段的出口
  • 基本通道

    • 暂时无法在飞书文档外展示此内容

Uniform

  • 本质:就是从CPU 发送到 GPU 的全局只读变量,在整个绘制过程中,所有顶点和像素看到的都是同一个值。
  • 作用:减少CPU和GPU之间的数据吞吐量,你只用传递一次,着色器里所有需要使用的地方都能用
  • 类比:工厂的“大屏幕公告”,工厂里所有人都能看到
  • 简单示例:
//cpu层伪代码,仅展示关键步骤//cpu中,获取uniform位置glUseProgram(shaderProgram);intcolorLoc=glGetUniformLocation(shaderProgram,"uColor");//给uniform传值glUniform3f(colorLoc,r,g,b);
//片段着色器伪代码out vec4 FragColor;uniform vec3 uColor;//最终FragColor使用的,就是cpu传来的unifor值voidmain(){FragColor=vec4(uColor,1.0);}
返回列表