강의

멘토링

로드맵

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

rome님의 프로필 이미지
rome

작성한 질문수

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

Scale, Rotation, Translation 변환 행렬

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

작성

·

456

0

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

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

   

퀴즈

게임 수학에서 스칼라(Scalar)와 벡터(Vector)의 주요 차이점은 무엇일까요?

스칼라는 방향만 있고 벡터는 크기만 있습니다.

스칼라는 크기만 있고 벡터는 크기와 방향 모두 가집니다.

스칼라는 2D 공간에 사용되고 벡터는 3D 공간에 사용됩니다.

스칼라는 행렬로 표현되고 벡터는 숫자로 표현됩니다.

답변 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

작성한 질문수

질문하기