本节通过一个实例代码,来讲一下Opengl与着色器通信的问题:
本节只显示在前一节的基础上添加的代码
1、添加全局变量
GLint time_id;
2、在display()函数中的 a+=0.1;后边添加
glUniform1f(time_id,a);
目的:使time_id随着a一起变化
3、在 setShaders()函数最后添加
time_id=glGetUniformLocation(p,"v_time");
目的:为uniform变量获取了一个标识符,即将opengl中的time_id与片段着色器的v_time绑定
4、片段着色器代码改为:
uniform float v_time;
void main()
{
float fR=0.9*sin(0.0+v_time*0.05)+1.0;
float fG=0.9*cos(0.33+v_time*0.05)+1.0;
float fB=0.9*sin(0.67+v_time*0.05)+1.0;
gl_FragColor = vec4(fR/2.0,fG/2.0,fB/2.0,1.0);
}
参考文献:
仇德元.《GPGPU编程技术——从GLSL、CDPU到OpenGL》[M].河北省三河市:机械工业出版社,2012年:323.