前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenGL 从入门到成魔-第6章- Uniform 变量的使用

OpenGL 从入门到成魔-第6章- Uniform 变量的使用

作者头像
瑶瑶
发布2020-06-15 11:06:48
2.1K0
发布2020-06-15 11:06:48
举报

注:参考自bilibili系列视频,OpenGL 从入门到成魔-第6章- Uniform 变量的使用https://www.bilibili.com/video/BV1Mz411i7HQ

Uniform变量的作用

用于从cpu端,向顶点着色器和片段着色器转递变量。在cpu端,通过glUniform**()函数赋值。在shader内部,uniform就像常量,不能被shader修改。

如果uniform变量在vertex和fragment两者之间声明方式完全一样,则它可以在vertex和fragment共享使用。(相当于一个被vertex和fragment shader共享的全局变量)

uniform变量一般用来表示:变换矩阵,材质,光照参数和颜色等信息。

eg:

uniform mat4 viewProjMatrix; //投影+视图矩阵 uniform mat4 viewMatrix; //视图矩阵 uniform vec3 lightPosition; //光源位置 uniform float lumaThreshold; uniform sampler2D SamplerY;

glUniform**() 函数

根据传递变量的类型及个数,该函数有不同的名字,如果传1个int类型,就调用glUniform1i(), 如果传2个float类型,就调用glUniform2f()。还可以传向量,矩阵等。

glUniform1i(glGetUniformLocation(program, name), value);

第一个参数是location,即变量的地址。用glGetUniformLocation来获取,第一个参数program(由多个shader组成),第二个参数,变量名 第二个参数要赋的值。

使用方法

  1. 在shader中声明uniform变量,并使用。
uniform float num;
void main()
{
gl_Position = vec4(num,num,num, 1.0);
}
  1. 在渲染循环里面或者前面给uniform变量赋值。
glUniform1f(glGetUniformLocation(program, "num"), 0.01);

延申 attribute变量和varying变量

attribute变量是只能在vertex shader中使用的变量。一般用attribute变量来表示一些顶点的数据,如:顶点坐标,法线,纹理坐标,顶点颜色等。

varying变量是vertex和fragment shader之间做数据传递用的。一般vertex shader修改varying变量的值,然后fragment shader使用该varying变量的值。因此varying变量在vertex和fragment shader二者之间的声明必须是一致的。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Uniform变量的作用
  • glUniform**() 函数
  • 使用方法
  • 延申 attribute变量和varying变量
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档