Translation, Transformation, Transpose
이 셋이 이름이 헷깔릴 수 있으니 용어를 정리해본다.
Translation (이동 변환)
- 의미: 물체를 특정 방향으로 이동시키는 변환.
- 존재 이유: 3D 공간에서 물체를 원하는 위치로 이동시킬 때 필요.
- 계산 방식: Translation은 4x4 행렬에서 마지막 열에 이동 벡터 [x,y,z]를 추가하여 이루어짐

여기서 tx,ty,tz는 x, y, z 방향으로 이동할 거리
GLSL 예시코드:
mat4 translationMatrix = mat4(1.0); // 단위행렬
translationMatrix[3] = vec4(tx, ty, tz, 1.0);
vec4 newPosition = translationMatrix * vec4(position, 1.0);
Transformation (변환)
- 의미: 물체의 위치, 크기, 방향 등을 변경하는 모든 종류의 변환을 포함 (Translation, Rotation, Scaling 등).
- 존재 이유: 3D 객체를 월드 좌표계, 카메라 좌표계, 또는 클립 좌표계로 변환하여 화면에 렌더링하기 위함.
- 계산 방식: Transformation은 Translation, Scaling, Rotation 등 여러 변환 행렬을 조합하여 만들어짐. 이 변환들은 행렬 곱셈으로 결합됨:
M = TxRxS ( 순서중요)
예시코드
mat4 translation = translate(vec3(tx, ty, tz));
mat4 rotation = rotate(radians(angle), vec3(rx, ry, rz));
mat4 scaling = scale(vec3(sx, sy, sz));
mat4 transformationMatrix = translation * rotation * scaling;
vec4 transformedPosition = transformationMatrix * vec4(position, 1.0);
Transpose (전치 행렬)
- 의미: 행렬의 행과 열을 바꾸는 것.
- 존재 이유:
- 벡터의 변환: OpenGL의 노멀 벡터 변환 시 필요.
- 특수 연산: Shader 프로그래밍에서 다양한 계산에 필요 (e.g., 역행렬 계산에서 사용).
그냥 이거다
1 2 -> 1 1
1 2 -> 2 2
Dot Product (내적)

- 의미: 두 벡터 간의 스칼라 곱, 두 벡터의 방향 유사성을 측정.
벡터의 길이 (스칼라) 는 피타고라스의 정리에 따라 x^2+b^2 의 제곱근이다.
- 그래픽/게임 엔진에서의 역할:
- 조명 계산: 광원의 방향과 표면의 법선 벡터 간의 각도를 계산하여 밝기를 결정 ( 광원이 수직으로 떨어지면 (유사성 0 매우밝게, 반대면 매우어둡게)
- 평면 투영: 벡터가 특정 축 또는 평면에 얼마나 투영되는지 계산.
float dotProduct = dot(vec3(1, 0, 0), vec3(0, 1, 0)); // 결과: 0
Cross Product (외적)
- 의미: 두 벡터 간의 새로운 벡터를 생성하며, 생성된 벡터는 두 벡터 모두에 수직.

- 그래픽/게임 엔진에서의 역할:
- 법선 벡터 계산: 평면에 수직인 벡터를 구할 때 사용 (e.g., 충돌 검사, 조명 계산).
- 회전 축 계산: 두 벡터의 방향을 기준으로 회전축을 정의.
vec3 crossProduct = cross(vec3(1, 0, 0), vec3(0, 1, 0)); // 결과: vec3(0, 0, 1)
'개인공부 > C++ Graphics' 카테고리의 다른 글
| OpenGL #17 광원 (1) | 2025.01.18 |
|---|---|
| OpenGL #16 법선벡터(VN)와 라이팅 (1) | 2025.01.18 |
| OpenGL #14 Projection - MVP(3/3) (0) | 2025.01.17 |
| OpenGL #13 Projection (2/3) (0) | 2025.01.16 |
| OpenGL #12 Projection (1/3) (0) | 2025.01.16 |