인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12

행렬 곱셈 질문 드립니다.

작성

·

473

0

안녕하세요 루키스님. 질문 남깁니다.

 

쉐이더로 보내준 g_matWVP와 g_matWV를 사용하면 물체가 잘 나옵니다. 하지만, 두 행렬을 사용하지 않고 쉐이더 코드 안에서 직접 wvp, wv를 곱해서 사용하려고 하는데 물체가 나오질 않습니다.

 

HLSL은 열중심이고, DxMath는 행중심 행렬이라 cbuffer안에 있는 값들도 row_major로 설정해주었습니다. 그런데도 물체가 나오질 않습니다.. 혹시 행렬 순서가 잘못되었나 싶어 P VW로 곱해봤으나 결과는 동일했습니다..

(1).png(2).png

 

 

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
sysy0512님의 질문에 대하여 답변 드립니다.

HLSL에서 행렬 곱셈을 할 때 순서가 매우 중요합니다. 보통 행렬 곱셈은 Local -> World -> View -> Projection 순서로 진행됩니다. 만약 g_matWVP와 g_matWV가 각각 World-View-Projection, World-View 행렬로 제공되었다면, 이 행렬들은 이미 적절한 순서로 곱해진 상태일 수 있습니다.

cbuffer에 row_major로 설정했음에도 불구하고 물체가 나타나지 않는다면, HLSL 내에서 행렬을 직접 곱할 때 계산 순서를 다시 확인해보시는 것이 좋습니다. 열 기반의 HLSL에서는 행렬을 곱할 때 오른쪽에서 왼쪽 순으로 곱하는 것을 기억하시고, 다음과 같은 순서로 곱셈을 해보세요.

Projection * View * World * Local

또한 DirectX 수학 라이브러리(DirectXMath)를 사용하실 때는 XMMatrixMultiply 함수를 사용하여 행렬을 곱할 수 있으며, 이 함수는 첫 번째 인자를 오른쪽 행렬, 두 번째 인자를 왼쪽 행렬로 고려합니다.

직접 계산 시 행렬 곱 순서를 확인하시고, 그래도 문제가 해결되지 않는다면 쉐이더 코드 내에서 행렬이 어떻게 적용되는지 디버깅을 통해 값을 검토해보시기 바랍니다.

도움이 되셨길 바라며, 추가적인 질문이 있으시면 언제든지 문의해 주세요.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기