前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5.opengl-变量修饰符

5.opengl-变量修饰符

作者头像
诺谦
发布2020-11-04 14:34:26
6180
发布2020-11-04 14:34:26
举报
文章被收录于专栏:Linux驱动Linux驱动

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会把你的物体渲染为黑色(或白色)。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-11-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档