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

rome님의 프로필 이미지
rome

작성한 질문수

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

Scale, Rotation, Translation 변환 행렬

z축 회전행렬에서 요소 m12,m21과 -sin θ 와 sinθ의 위치 질문드립니다

작성

·

269

0

안녕하세요 루키스님 회전행렬의 값에 대해 질문드립니다.

z축회전변환 행렬을 구할때 X= xcosθ -ysinθ이며 Y= xsinθ + ycosθ 라고 하셨습니다. 그렇다면 m12 = sinθ이며 m21= -sinθ여야하는게 아닌가요? 찾아봤을때도 어디서는 그렇게 나오고 다른곳은 루키스님이 말씀하신것처럼 나와 헷갈려 어떤 차이가 있는지 질문드립니다. 고맙습니다.

   

답변 3

0

https://learn.microsoft.com/en-us/windows/win32/direct3d9/transforms

DirectX9설명을 봤을 때 rome님 말씀대로 행렬을 만들고 있었습니다.
DirectX9 에서는 좌표 벡터를 행 벡터로 간주하고, 변환 행렬을 강의처럼 오른쪽에 곱하고 있는데
DirectX11로 오면서 좌표 벡터를 열 벡터로 간주하고, 변환 행렬을 왼쪽에서 곱하고 있는 듯 합니다.

0

아 오타였군요

0

회전행렬은 방향 코사인 행렬을 계산하여 구해집니다. 

x'1축과 x1축과의 사이각을 (x1', x1) 이라 하고, 일반화 해서 xi'축과 xj 축 사이의 각을 (xi', xj) 라 해봅시다.

그렇게 되면 3차원의 경우 (x1', x2', x3') 과 (x1, x2, x3)의 총 9가지의 관계를 구할수 있습니다.

그래서 일반적인 3차원 회전행렬 L(람다)를 구할때 아래 처럼 구하게 됩니다.

l11 = cos(x1', x1);

l12 = cos(x1', x2);

l13 = cos(x1', x3);

l21 = cos(x2', x1);

l22 = cos(x2', x2);

l23 = cos(x2', x3);

l31 = cos(x3', x1);

l32 = cos(x3', x2);

l33 = cos(x3', x3);

회전 행렬 람다는

(l11, l12, l13)

(l21, l22, l23)

(l31, l32, l33)

가 됩니다. 

해당 관계의 특수 예들이  X축 회전행렬, Y축 회전 행렬, Z축 회전 행렬 등으로 표현하면 강의에 나온것처럼 됩니다.

rome님의 프로필 이미지
rome

작성한 질문수

질문하기