着色器
着色器有顶点着色器和片段着色器.
顶点着色器负责将三维坐标转换为二维坐标,需要一个三分量输入.
片段着色器确定点的颜色,需要一个四分量输出.
编写着色器
着色器用GLSL语言编写,有如下格式
#version version_number
in type in_variable_name;
in type in_variable_name;
out type out_variable_name;
uniform type uniform_name;
int main()
{
// 处理输入并进行一些图形操作
...
// 输出处理过的结果到输出变量
out_variable_name = weird_stuff_we_processed;
}
in_type 表示输入变量, out_type 表示输出变量.
着色器(Shader)是运行在GPU上的独立小程序,输入变量和输出变量可以让两个shader交换数据.
uniform 类型用于cpu向shader传递数据.
数据类型
vecn 包含n个float分量的默认向量
bvecn 包含n个bool分量的向量
ivecn 包含n个int分量的向量
uvecn 包含n个unsigned int分量的向量
dvecn 包含n个double分量的向量
uniform的使用
着色器中声明
#version 330 core
out vec4 FragColor;
uniform vec4 ourColor; // 在OpenGL程序代码中设定这个变量
void main()
{
FragColor = ourColor;
}
程序中使用
float timeValue = glfwGetTime();
float greenValue = (sin(timeValue) / 2.0f) + 0.5f;
int vertexColorLocation = glGetUniformLocation(shaderProgram, "ourColor");//获取uniform变量
glUseProgram(shaderProgram);//激活shaderprogram
glUniform4f(vertexColorLocation, 0.0f, greenValue, 0.0f, 1.0f);//设置四分量的值