Uniform Variables: Communication between C++ and OGLSL Program
一致变量是用来在顶点着色器或者片段着色器传输的。在你的着色器使用的'uniform'限定符声明变量,例如:
uniform float myVar; |
一致变量是只读而且所有处理的顶点都有相同的值。你只能在你的C + +程序中将他们改变。
一个简单的OGLSL顶点着色
uniform float Scale; void main(void) { vec4 a = gl_Vertex; a.x = a.x * 0.5; a.y = a.y * 0.5; a.z = a.z * Scale; gl_Position = gl_ModelViewProjectionMatrix * a; } |
在这个例子中,z坐标与一致变量Scale相乘进行缩放,然后被缩放后的顶点与模型视图矩阵投影矩阵相乘进行变换。
C + +代码
在适当的函数类中声明一个一致变量是很容易的:
// globals: aShaderManager shadermanager; aShaderObject* myShader; // init: myShader = shadermanager.loadfromFile("test.vert","test.frag"); // draw-loop: myShader->begin(); myShader->sendUniform1f("Scale", 1.231f); glutSolidTeapot(); myShader->end();