OpenGL给Shader变量传递参数

首先需要了解Shader中变量的四个修饰符

varying:在顶点着色器和片元着色器中传递参数,在顶点着色器中被修改,在片元着色器中只读

uniform:一致变量,在一个图元绘制过程中不会改变 ,在opengl中传递参数到shader,在顶点着色器和片元着色器中使用

attribute:随不同顶点变化的全局变量,由opengl中传递值到shader,只能在顶点着色器只读

const:同c语言const,编译期常量


OpenGL中传递参数给uniform变量

Shader内容

vec4 a = vec4(1.0,2.0,3.0,4.0);
float posX=a.x;
float posY=a[1];
vec2 posXY=a.xy;
float depth=a.w;
const float x=1.0f;

OpenGL程序

	GLuint positionZ=glGetUniformLocation(p,"PositionZ");
	glUniform1f(positionZ,10.0f);
	float specColorArr[4]={0.8,0.8,0.8,1.0};
	GLuint specColor=glGetUniformLocation(p,"specColor");
	glUniform4fv(specColor,1,specColorArr);

	float tArr[2]={1.0,2.0};
	GLuint t=glGetUniformLocation(p,"t");
	glUniform1fv(t,2,tArr);

	float colorsMatrix[12]={
		0.3,0.3,0.3,1.0,
		0.2,0.2,0.2,1.0,  
		0.8,0.8,0.8,1.0  };
	GLuint colors=glGetUniformLocation(p,"colors");
	glUniform4fv(colors,3,colorsMatrix);



你可能感兴趣的:(OpenGL给Shader变量传递参数)