欢迎光临散文网 会员登陆 & 注册

Uniform

2023-08-03 19:04 作者:追逐彗星的尾巴  | 我要投稿

uniform是一个关键字,用于在着色器中声明全局变量。这意味着它必须在每个着色器程序对象中都是独一无二的。uniform变量可以从CPU端传递给GPU端,并在渲染过程中保持不变,即在一次绘制调用期间,uniform变量的值是不会改变的。

使用一个uniform变量通常需要以下步骤:

I.在着色器程序中使用uniform关键字来声明变量。

II.在应用程序中获取uniform变量的位置。

III.为uniform变量设置一个值,这样它就会在渲染时保持该值。

下面让我们试着通过uniform来为图形设置颜色。

我们在片段着色器中声明了一个uniform的vec4类型的全局变量u_color,并把片段着色器的输出颜色设置为uniform值的内容。

uniform变量的值是通过函数glUniform*()来设置的。glUniform*()是一系列函数。由于u_color是vec4,这里我们使用glUniform4f(),表示函数需要4个float类型的值来设定uniform变量。

第一个参数是uniform变量的位置。我们需要使用函数glGetUniformLocation()来查询我们创建的uniform变量的位置。

第一个参数是我们创建的着色器程序,第二个参数是uniform变量的名字。如果函数返回-1表示没有找到这个位置值。

下面是使用示例:

注意:在使用uniform之前必须先调用glUseProgram()因为它是在当前激活的着色器程序中设置uniform的。

使用uniform的好处是我们可以在随时更新变量的值。譬如我们可以把颜色中的红色通道设置成一个随时间变化的变量,这样每次渲染时颜色都会发生改变。

Uniform的评论 (共 条)

分享到微博请遵守国家法律