OpenGL —— 2.2、Shader之间数据传输、向Shder传输数据

Shader

     OpenGL着色器(shader)是一种用于编写图形渲染代码的编程语言。它们在图形处理单元(GPU)上运行,用于控制渲染管线的不同阶段。

     在OpenGL中,有两种主要类型的着色器:顶点着色器和片段着色器。
          顶点着色器(Vertex Shader)负责处理输入的顶点坐标,并对它们进行变换和变换相关的计算。它通常用于将3D模型从称为模型空间转换为屏幕空间。
          片段着色器(Fragment Shader)负责计算像素的最终颜色值。它通常用于对每个像素进行光照计算、纹理采样和其他图像处理操作。

     GLSL是一种强类型语言,所有的变量都必须事先声明,并且要给出变量的类型。

Shader之间数据传输

     如下图。vertexShader.glsl的vertexColors作为fragmentShader.glsl的vertexColors的输入。

OpenGL —— 2.2、Shader之间数据传输、向Shder传输数据_第1张图片

向Shder传输数据

如下代码基于 OpenGL —— 2、绘制第一个三角形(附源码,glfw+glad)

OpenGL —— 2.2、Shader之间数据传输、向Shder传输数据_第2张图片

     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

你可能感兴趣的:(OpenGL,C++,OpenGL,Shader)