zoukankan      html  css  js  c++  java
  • 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会把你的物体渲染为黑色(或白色)。
     
     

  • 相关阅读:
    4QC(四象限变流器)
    SR锁存器
    JVM 专题二:虚拟机(二)Java虚拟机
    JVM 专题一:虚拟机(一)
    Scala 基础(一):各平台安装
    shell专题(十一):企业真实面试题(重点)
    shell专题(十):Shell工具(重点)
    shell专题(九):函数
    shell专题(八):read读取控制台输入
    shell专题(七):流程控制(重点)
  • 原文地址:https://www.cnblogs.com/lifexy/p/13915194.html
Copyright © 2011-2022 走看看