행렬을 상수 버퍼에 저장할 때 다음과 같이 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에 넘겨줘야한다
'그래픽' 카테고리의 다른 글
| Direct3D (13) / 큐브 여러개 생성하기 (0) | 2026.08.17 |
|---|---|
| Direct3D (12) / 큐브(도형) 생성 (0) | 2026.08.11 |
| 'clamp': 'std'의 멤버가 아닙니다 에러코드 E0135 (0) | 2026.07.03 |
| Direct3D (11) / 카메라 이동 수정 (0) | 2026.07.03 |
| Direct3D (10) / 카메라 회전 (0) | 2026.07.02 |