행렬 곱셈 질문 드립니다.
587
작성자 없음
작성한 질문수 0
안녕하세요 루키스님. 질문 남깁니다.
쉐이더로 보내준 g_matWVP와 g_matWV를 사용하면 물체가 잘 나옵니다. 하지만, 두 행렬을 사용하지 않고 쉐이더 코드 안에서 직접 wvp, wv를 곱해서 사용하려고 하는데 물체가 나오질 않습니다.
HLSL은 열중심이고, DxMath는 행중심 행렬이라 cbuffer안에 있는 값들도 row_major로 설정해주었습니다. 그런데도 물체가 나오질 않습니다.. 혹시 행렬 순서가 잘못되었나 싶어 P VW로 곱해봤으나 결과는 동일했습니다..
.png)
.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 함수를 사용하여 행렬을 곱할 수 있으며, 이 함수는 첫 번째 인자를 오른쪽 행렬, 두 번째 인자를 왼쪽 행렬로 고려합니다.
직접 계산 시 행렬 곱 순서를 확인하시고, 그래도 문제가 해결되지 않는다면 쉐이더 코드 내에서 행렬이 어떻게 적용되는지 디버깅을 통해 값을 검토해보시기 바랍니다.
도움이 되셨길 바라며, 추가적인 질문이 있으시면 언제든지 문의해 주세요.
복습중에 커맨드 큐 관련 질문이 있습니다.
0
37
1
_vsBlob와 _psBlob에서 nullptr이 뜨면서 실행이 안됩니다
0
58
1
#include d3dx12.h 추가했지만 오류
0
82
1
LNK1104 error, DirectXTexD.lib 파일을 열 수 없습니다.
0
123
1
[DirectXTex LNK2019 에러]
0
245
2
UI 랜더링이 이해가 안되어 질문드립니다
0
176
1
insideTess 값 관련 질문
0
126
1
렌더 타겟을 SRV로 사용하려고 합니다.
0
182
1
C++ 언어 표준과 Engine.lib 오류에 관하여..
0
281
2
실행과정에서의 문제
0
396
3
결과물에 의문이 생겨서 한가지 질문 드립니다
0
147
1
uv좌표변환
0
149
1
Shader 관련 문제
0
223
1
Load 부분에서 문제가 있어 질문드립니다
0
164
1
강의에서 보여진 모습과 다른모양이 되어서 질문드립니다
0
173
1
enumclass 질문입니다
0
155
1
nullptr오류가 발생해요.
0
363
2
Normal Mapping / Assertion failed! 오류
0
221
1
1>LINK : fatal error LNK1104: 'Engine.lib' 파일을 열 수 없습니다.
0
430
2
shared_ptr 과 헤더파일 관련하여 질문있습니다
0
208
1
질문있습니다.
0
177
1
장치 초기화 nullptr이 자꾸 발견 되네요.
0
301
2
용 모델에 분명 Diffuse 텍스쳐가 있는것같은데 왜 적용이 안되나요?
0
254
1
안녕하세요 질문있습니다
0
205
1





