그래픽스에서 벡터와 행렬을 표현할 때 두가지 방식으로 표현할 수 있다.
Row-Major(열 기준)와 Column-Major(행 기준)이다.
벡터를 표현할 때

첫번째처럼 행대로 늘어놓은 것이 벡터를 Row-Major로 표현한 것이고,
열로 세워놓은 것이 벡터를 Column-Major로 표현한 것이다.

벡터에 행렬을 곱할 때 Row-Major과 Column-Major별로 순서를 다르게 해줘야 한다.
Row-Major은 벡터*행렬 순, Column-Major은 행렬*벡터 순.
행렬의 특성 때문에 순서는 다르지만 결과식은 같다. 하지만 잘 보면 곱해주는 행렬도 조금 다르다.
행렬을 표현할 때

Row-Major에서 벡터에 곱하는 행렬은 Column-Major과 전치행렬 관계이다.
행렬을 곱하는 순서가 다르기 때문에 전치행렬을 해줘야 같은 결과값이 나오기 때문이다.
DirectX에서는 Row-Major을 사용하고 OpenGL, HLSL에서는 Column-Major을 사용한다.
그래서 CPU에서 GPU로 보내줄 때 Row-Major에서 Column-Major로 변환하기 위해 Transpose를 한다.

그리고 각각 행렬의 요소를 저장하는 순서가 다르다. Row-Major은 첫번째 행부터 저장하고
Column-Major은 첫번째 열부터 저장한다. 그래픽스에서 벡터에 곱하는 행렬은 어떤 Major인지에 따라
전치행렬 관계를 이루고 있으므로 저장하는 순서가 달라도 메모리에 실제로 저장되는 숫자의 순서는 같다.
'그래픽스' 카테고리의 다른 글
| [그래픽스] DirectX 초기화 (0) | 2023.07.18 |
|---|---|
| [그래픽스] non-uniform scaling에서 normal vector 변환 (0) | 2023.06.04 |
| [그래픽스] Blinn Phong으로 lighting 계산하기(halfway vector) (0) | 2023.05.29 |
| [그래픽스] Perspective Projection 비율 문제 해결 (0) | 2023.05.28 |
| [그래픽스] 쉐이더(Shader) 개념 (0) | 2023.05.28 |