그래픽

행렬을 Transpose하는 이유

murlocdev 2026. 7. 7. 04:29

행렬을 상수 버퍼에 저장할 때 다음과 같이 XMMatrixTranspose 함수를 사용하는 경우가 많았다

더보기
void DrawTriangle(XMMATRIX world, XMMATRIX view, XMMATRIX projection)
{						
	ConstantBuffer cb;						

	XMStoreFloat4x4(						
		&cb.World,							
		XMMatrixTranspose(world));			

	XMStoreFloat4x4(						
		&cb.View,							
		XMMatrixTranspose(view));			

	XMStoreFloat4x4(						
		&cb.Projection,						
		XMMatrixTranspose(projection));		

	g_Context->UpdateSubresource(			
		g_ConstantBuffer,					
		0,									
		nullptr,							
		&cb,								
		0,									
		0);									

	g_Context->VSSetConstantBuffers(		
		0,									
		1,									
		&g_ConstantBuffer);					

	g_Context->Draw(						
		3,									
		0);									
}

왜 Transpose (행렬전치)를 하는지 알아봤다

CPU는 행렬을 Row-major 순서대로 저장하지만

GPU(HLSL)는 행렬을 Column-najor 순서대로 저장한다

그래서 CPU에서 있던 행렬의 행과 열을 바꾸는 전치를 해서 GPU에 넘겨줘야한다