본문 바로가기

그래픽스

[그래픽스] Row-Major vs Column-Major

그래픽스에서 벡터와 행렬을 표현할 때 두가지 방식으로 표현할 수 있다.

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인지에 따라

전치행렬 관계를 이루고 있으므로 저장하는 순서가 달라도 메모리에 실제로 저장되는 숫자의 순서는 같다.