본문 바로가기
학교/프로그래밍 언어

OpenGL #2

by ehei 2024. 6. 3.

좌표계

좌하단이 -0.5, -0.5

유니폼(Uniform 전역 셰이더 변수) 설정하기

GLint glGetUniformLocation(GLuint prog, const GLchar* name)

  • 유니폼 인덱스를 반환
  • 인자
    • prog glCreateShader로 생성한 프로그램 객체
    • name 유니폼 이름
  • 반환
    • 유니폼 인덱스. 실패 시 -1

void glUniform1f(GLint loc, GLfloat v0)

  • 유니폼 설정
  • 인자
    • loc 유니폼 인덱스
    • v0 값
  • 기타
    • glUniform1f...4f 있음

void glUniform1fv(GLint loc, GLsizei count, const GLfloat* value)

  • 벡터 유니폼 설정
  • 인자
    • loc 유니폼 인덱스
    • count 벡터 크기
    • value 벡터 값이 담긴 포인터
  • 기타
    • glUniform1f 대신 사용 가능. 대신 count = 1
    • glUniform1fv...4fv 있음
    • 정수 버전: glUniform1i/glUniform1fv

void glUniformMatrix4fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat* value)

  • 4x4 행렬 유니폼 설정
  • 인자
    • loc 유니폼 인덱스
    • count 변경할 행렬 크기
    • transpose 항상 GL_FALSE
    • value 행렬 값이 담긴 포인터
  • 기타
    • glUniformMatrix1fv...4fv

예제

https://github.com/ehei1/learnOpenGL/tree/main/03%20HelloUniform

while (!glfwWindowShouldClose(window)) {
	glClear(GL_COLOR_BUFFER_BIT);

	glUseProgram(shaderProgram);
	// 시간 값을 얻어온다
	auto time = static_cast<float>(glfwGetTime());
	// sin 값으로 변환
	auto greenValue = sin(time) / 2.f + .5f;

	// outColor에 대한 유니폼 위치를 얻어온다
	auto vertexColorLocation = glGetUniformLocation(shaderProgram, "outColor");
    
	// 설정
	glUniform4f(vertexColorLocation, {}, greenValue, {}, 1.f);

 

'학교 > 프로그래밍 언어' 카테고리의 다른 글

OpenGL #1  (0) 2024.05.04
OpenGL #0  (0) 2024.04.30
C# ready  (0) 2024.04.21