인프런 커뮤니티 질문&답변
World 행렬 생성중 회전행렬 값에 대하여 의문이 있습니다.
작성
·
348
·
수정됨
0
유니티에서 회전행렬을 확인 해보고자 출력을 했을 때.

이렇게 출력을 하였습니다.
Transform을 해당 값으로 맞춰놓고 작업을 하였는데

Log 값은

이렇게 출력되었습니다.
여기서 의문점인경우가
Z축 회전 행렬을 적용하면
C -S 0 0
S C 0 0
0 0 0 1
0 0 0 1
이 적용이 되어야 하는데
Log 값으로 출력되는것을 보면 Sin값 적용부분에서
C -S
S C
가 아닌
C S
-S C
로 적용되는걸 알 수 있는데
왜 이렇게 값이 나오는 것인지 궁금합니다.
(부호가 왜 바뀌어서 나오는지 궁급합니다.)
X축 , Y축 , Z축 동일하게 출력을 해 보았으나 모두 다 같습니다...
답변 3
0
DirectX의 그래픽스 행렬 계산식과OpenGL 기반의 그래픽스 행렬 계산식의 계산 방식이 틀려서 입니다.OpenGL같은 경우는 Rotation(Z)행렬 R과 열벡터 V로 계산하게 되는데
R = +C -S +0
+S +C +0
+0 +0 +1
인데
DirectX의 경우 행벡터를 곱해 계산하게 됩니다.
벡터를 행으로 돌리려면 전치를 시켜줘야 해서
식의 전체의 전치를 하다보니
(RV)의 전치가 일어나게 됩니다.
즉, (V)^T(R)^T의 식이 됩니다. (^는 제곱 표현식 쓴거에요)
R^T = +C +S +0
-S +C +0
+0 +0 +1
이런식으로 결과가 나오게 되는거죠
제가 이해를 이런식으로 한 것 뿐이지 사실 그냥
행벡터로 계산할 것이냐 열벡터로 계산할 것이냐의 차이입니다.
보통 그래픽스 공부를 하게되면 OpenGL의 수식 기반으로 배우다보니 식이 조금씩 틀려요.
행벡터로 계산하면 DirectX의 식처럼 나오는 것이고 강사님이 올려주신 PPT의 Rotation처럼 값을 보고 싶으신거면 열벡터로 계산이 되어야 하는거에요 OpenGL 방식이죠
유니티가 DirectX 기반으로 되어 있어서 답이 저렇게 나온걸 꺼에요
0
0
안녕하세요, 인프런 AI 인턴이에요. 회전 행렬에 대한 의문을 알려주셔서 감사합니다.
회전 행렬의 값은 일반적으로 다음과 같이 정의됩니다.
C -S 0
S C 0
0 0 1
여기서 C는 코사인 함수의 값이고, S는 사인 함수의 값입니다. 제가 아시다시피 사인 함수의 값은 -1과 1 사이의 값을 가지며, 각도에 따라 양수와 음수가 번갈아 나타납니다.
따라서 여러분이 출력한 값 중에 S C 대신 C S -S C가 나타나는 이유는, 회전 행렬에 사용된 각도가 음수인 경우에도 적용되어 출력된 것일 수 있습니다. 회전 행렬을 사용할 때는 각도를 올바르게 설정하고, 출력 결과를 확인해보시는 것이 좋을 것 같습니다.
더 자세한 내용이나 다른 질문이 있다면 언제든지 물어보세요. 좋은 하루 되세요!






위에 스크린샷으로도 올려놓았지만 회전각도가 30도인데 이때 어떻게해서 반전값이 나오는지 궁금합니다.