OpenGL 쉐이더 프로그래밍 - Uniform Variable

타입·2025년 7월 22일

컴퓨터 그래픽스

목록 보기
6/24

Uniform Variable 프로그램

  • 기준 Triangle Definition 정의
GLfloat vertPos[] = {
	0.0F, 0.0F, 0.0F, 1.0F,
	0.5F, 0.0F, 0.0F, 1.0F,
	0.0F, 0.5F, 0.0F, 1.0F,
};

첫번째 삼각형은 원본 위치에서 이동시켜 그리고,
두번째 삼각형은 원본 위치를 유지하여 그리기

프로그램 디자인

  • vertex shader
#version 330 core

in vec4 aPos;
in vec4 aColor;
out vec4 vColor;
uniform vec4 uMove; // movement vector: uniform

void main(void) {
	gl_Position = aPos + uMove; // 벡터끼리 계산
	vColor = aColor;
}
  • frament shader
    이전 코드와 변화 없음
#version 330 core

in vec4 vColor;
out vec4 FragColor;

void main(void) {
	FragColor = vColor;
}
  • drawFunc()
void drawFunc(void) {
	glClear(GL_COLOR_BUFFER_BIT);
    
	GLuint locPos = glGetAttribLocation(prog, "aPos");
	glEnableVertexAttribArray(locPos);
	glVertexAttribPointer(locPos, 4, GL_FLOAT, GL_FALSE, 0, vertPos);
    
	GLuint locColor = glGetAttribLocation(prog, "aColor");
	glEnableVertexAttribArray(locColor);
	glVertexAttribPointer(locColor, 4, GL_FLOAT, GL_FALSE, 0, vertColor);
    
	// draw the first triangle
	GLuint locMove = glGetUniformLocation(prog, "uMove"); // uniform 레지스터의 위치 반환
	glUniform4f(locMove, -0.5F, -0.5F, 0.0F, 0.0F);
	glDrawArrays(GL_TRIANGLES, 0, 3);
    
	// draw the second triangle
	glUniform4f(locMove, 0.0F, 0.0F, 0.0F, 0.0F);
	glDrawArrays(GL_TRIANGLES, 0, 3);
    
	glFinish();
}

OpenGL Uniform 함수

  • glGetUniformLocation()
    주어진 이름을 사용하는 uniform 레지스터의 위치를 반환 (없으면 -1)
  • glUniform4f()
    해당 위치의 uniform 변수에 값을 할당
  • glUniform4fv()
    배열을 받아 할당
  • glUniformMatrix4fv()
    행렬 버전
profile
주니어 언리얼 프로그래머

0개의 댓글