Shader
OpenGL着色器(shader)是一种用于编写图形渲染代码的编程语言。它们在图形处理单元(GPU)上运行,用于控制渲染管线的不同阶段。
在OpenGL中,有两种主要类型的着色器:顶点着色器和片段着色器。
顶点着色器(Vertex Shader)负责处理输入的顶点坐标,并对它们进行变换和变换相关的计算。它通常用于将3D模型从称为模型空间转换为屏幕空间。
片段着色器(Fragment Shader)负责计算像素的最终颜色值。它通常用于对每个像素进行光照计算、纹理采样和其他图像处理操作。
GLSL是一种强类型语言,所有的变量都必须事先声明,并且要给出变量的类型。
Shader之间数据传输
如下图。vertexShader.glsl的vertexColors作为fragmentShader.glsl的vertexColors的输入。
向Shder传输数据
如下代码基于 OpenGL —— 2、绘制第一个三角形(附源码,glfw+glad)
fragmentShader.glsl
#version 330 core
out vec4 FragColor;
uniform vec4 ourColor; // 用C++传入
void main()
{
FragColor = ourColor;
};
main.c
void _Render()
{
// 使用程序
glUseProgram(shaderProgram);
/***************************************************/ // 周期性更改三角形填充色
float _time = glfwGetTime();
float _green = sin(_time)*0.5f + 0.5f;
// 获得指定shader程序中uniform变量的位置
int _location = glGetUniformLocation(shaderProgram, "ourColor");
// // 用于向当前活动的shader程序中的uniform变量设置四个浮点数值
glUniform4f(_location, 0.0f, _green, 0.0f, 1.0f);
/***************************************************/
// 绑定VAO
glBindVertexArray(VAO);
// 绘制三角形
glDrawArrays(GL_TRIANGLES, 0, 3);
// 关闭使用程序
glUseProgram(0);
}
关注
Wx GZH:码农总动员
笔者 - jxd