Vectors, Matrices and Uniform Variables

정민용·2025년 7월 16일

Vector

Dot Product

  • 내적값과 magnitude를 알고 있다면 두 벡터사이의 각도를 알 수 있음.

Cross Product

  • 두 벡터에 대한 직교 벡터를 생성
  • 빛 연산, 충돌 감지에 유용함.

Matrix

  • Model Transforms (translation, rotation, scaling)
  • Projection
  • View

Matrix Transforms - Translation

Matrix Transforms - Scaling

Matrix Transforms - Rotation

X Rotation

Y Rotation

Z Rotation

GLM

// Vertex Shader
#version 330

in vec3 pos;

uniform mat4 model;

void main()
{
	gl_Position = model * vec4(pos, 1.0f);
}
// main Program
glm::mat4 model(1.0f);	// init

model = glm::translate(model, glm::vec3(1.0f, 2.0f, 0.0f));	// x축 1.0, y축 2.0 이동
model = glm::rotate(model, PI / 360.0 * 45.0, glm::vec3(0.0f, 0.0f, 1.0f));	// z축 기준 45' 회전 (Radian 기준)
model = glm::scale(model, glm::vec3(0.4f, 0.4f, 1.0f));	// x, y축 사이즈 0.4배

Uniform Variables

  • 셰이더 내에서 사용되는 전역변수
  • 한 번 설정된 값은 해당 셰이더 프로그램을 사용하는 모든 정점과 프래그먼트에 균일하게 적용됨.

사용 과정

  1. 셰이더 코드 상단에 uniform 키워드를 사용해 변수 선언
  2. 메인 프로그램에서 셰이더에 선언된 uniform 변수의 Location을 찾고, 그 위치에 값을 전달함.
// Vertex Shader
#version 330														
																	
layout (location = 0) in vec3 pos;									
																	
uniform float xMove;  // uniform 키워드를 사용해 변수 선언				
																	
void main() {														
	gl_Position = vec4(0.4 * pos.x + xMove, 0.4 * pos.y, pos.z, 1.0f);		
}		
// main Program
GLuint uniformXMove = glGetUniformLocation(shader, "xMove");  // 셰이더에서 uniform 변수의 위치(Location)을 가져옴.

...

glUniform1f(uniformXMove, triOffset);  // glUniform* 계열 함수를 이용하여 값 전달

0개의 댓글