No author
This post's author information has been deleted.
Written on
·
521
0
안녕하세요 루키스님. 질문 남깁니다.
쉐이더로 보내준 g_matWVP와 g_matWV를 사용하면 물체가 잘 나옵니다. 하지만, 두 행렬을 사용하지 않고 쉐이더 코드 안에서 직접 wvp, wv를 곱해서 사용하려고 하는데 물체가 나오질 않습니다.
HLSL은 열중심이고, DxMath는 행중심 행렬이라 cbuffer안에 있는 값들도 row_major로 설정해주었습니다. 그런데도 물체가 나오질 않습니다.. 혹시 행렬 순서가 잘못되었나 싶어 P VW로 곱해봤으나 결과는 동일했습니다..
Answer 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 함수를 사용하여 행렬을 곱할 수 있으며, 이 함수는 첫 번째 인자를 오른쪽 행렬, 두 번째 인자를 왼쪽 행렬로 고려합니다.
직접 계산 시 행렬 곱 순서를 확인하시고, 그래도 문제가 해결되지 않는다면 쉐이더 코드 내에서 행렬이 어떻게 적용되는지 디버깅을 통해 값을 검토해보시기 바랍니다.
도움이 되셨길 바라며, 추가적인 질문이 있으시면 언제든지 문의해 주세요.