• 5.opengl-变量修饰符


    3.00上支持的存储变量修饰符
    变量名称
    作用
    示例
    const
    编译过程常量,或者函数的只读参数
    const vec3 zAxis = vec3 (0.0, 0.0, 1.0);
    in
    用于连接 shader 的上一阶段;
    centroid 为质心采样关键字,用于避免伪像,不可用于顶点着色器;
    顶点着色器中的 out 和片段着色器中的 in 名称相同时构成接口,必须具有相同的类型和精度;
    in vec4 position;
    centroid in vec2 TexCoord;
    flat in vec3 myColor;
    out
    用于连接 shader 的下一阶段;
    centroid 为质心采样关键字,用于避免伪像 ,不可用于顶点着色器;
    顶点着色器中的 out 和片段着色器中的 in 名称相同时构成接口,必须具有相同的类型和精度;
    out vec3 normal;
    centroid out vec2 TexCoord;
    invariant centroid out vec4 Color;
    flat out vec3 myColor;
    uniform
    通过外部application程序传递给(vertex和fragment)shader的变量。
     
    它通过application调用函数glUniform()函数赋值的。
    uniform是全局的(Global),全局意味着uniform变量必须在每个着色器程序对象中都是独一无二的,而且它可以被着色器程序的任意着色器在任意阶段访问。
    它不能被shader程序修改.(shader只能用,不能改,只能等外部程序重新重置或更新。)
     
    uniform变量一般用来表示:变换矩阵,材质,光照参数和颜色等信息。
    uniform sampler2D tex;
    老版本中支持的存储变量修饰符
    变量名称
    作用
    示例
    const
    编译过程常量,或者函数的只读参数
    const vec3 zAxis = vec3 (0.0, 0.0, 1.0);
    attribute(等于3.0版本后的in)
    只能从客户端把数据传递到顶点着色器,也只能在顶点着色器里面使用(它不能在fragment shader中声明attribute变量,也不能被fragment shader中使用)。
    一般用来修饰顶点数据、纹理坐标、颜色、法线,即一切和坐标、和颜色有关的数据。
    在application中,一般用函数glBindAttribLocation()来绑定每个attribute变量的位置,然后用函数glVertexAttribPointer()为每个attribute变量赋值。
    attribute vec4 position;
    varying(3.0版本后,使用的是in和out代替,在顶点着色器声明out.在片段着色器中声明in,来实现传递)
    用于连接顶点着色器和片段着色器,从顶点着色器向片段着色器传递变量。
    一般vertex shader修改varying变量的值,然后fragment shader使用该varying变量的值。
    因此varying变量在vertex和fragment shader二者之间的声明必须是一致的
    (application不能使用此变量,该变量是可变化的)
    varying vec3 normal;
    uniform
    通过外部application程序传递给(vertex和fragment)shader的变量。
     
    它通过application调用函数glUniform()函数赋值的。
    uniform是全局的(Global),全局意味着uniform变量必须在每个着色器程序对象中都是独一无二的,而且它可以被着色器程序的任意着色器在任意阶段访问。
    它不能被shader程序修改.(shader只能用,不能改,只能等外部程序重新重置或更新。)
     
    uniform变量一般用来表示:变换矩阵,材质,光照参数和颜色等信息。
    uniform sampler2D tex;
     
    变量gl_Position
    它并没有类型in、out或是uniform的声明,而是直接使用,且在后面的程序中也未被引用。原来它是默认是归一化的裁剪空间坐标,xyz各个维度的范围为-1到1,仅能在顶点着色器中使用,既是输入也是输出。gl_Position赋值范围就是float的取值范围(32位),只不过只有[-1,1]区间的片元被绘制。它是vec4类型的,不能重声明为dvec4等类型。
     
     
    变量gl_FragColor
    控制输出的颜色(rgba),(在片段着色器中通过out的方式,在3.3版本之前,默认不需要out),如果你在片段着色器中没有定义输出颜色,OpenGL会把你的物体渲染为黑色(或白色)。
     
     

  • 相关阅读:
    利用ssh的私钥登录Linux server
    PSR-2 代码风格规范
    MySQL的四种事务隔离级别
    table添加横向滚动条
    转换图片大小
    百度地图Label 样式:label.setStyle
    鼠标的几种常用样式
    百度地图API-自定义图标覆盖物
    微信公众号自定义菜单中可加入的表情
    微信公众号项目总结
  • 原文地址:https://www.cnblogs.com/lifexy/p/13915194.html
Copyright © 2020-2023  润新知