OpenGL学习笔记(二)着色器

着色器

在这里插入图片描述
着色器有顶点着色器和片段着色器.
顶点着色器负责将三维坐标转换为二维坐标,需要一个三分量输入.
片段着色器确定点的颜色,需要一个四分量输出.

编写着色器

着色器用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);//设置四分量的值
posted @ 2019-11-04 19:54  少年留不住  阅读(202)  评论(0编辑  收藏  举报