DirectX

D3DMATRIX, D3DXMATRIX 및 함수

HYuk 2021. 7. 6. 16:49
728x90

# D3DMATRIX와 D3DXMATRIX의 차이점은

operator 연산자 오버로딩이 되어 있는지 없는지 차이이다.

 

D3DXMATRIX로 행렬을 만들면 연산자 오버로딩이 가능하다.

#ifndef D3DMATRIX_DEFINED
typedef struct _D3DMATRIX {
    union {
        struct {
            float        _11, _12, _13, _14;
            float        _21, _22, _23, _24;
            float        _31, _32, _33, _34;
            float        _41, _42, _43, _44;

        };
        float m[4][4];
    };
} D3DMATRIX;

F12를 눌러서 확인해보면

4x4 행렬임을 알 수 있다.

 


D3DXMatrixIdentity -> 단위행렬로 변환해줌

D3DXMatrixScaling -> 크기(x,y,z순) 변경할 때 사용

D3DXMatrixRotationZ -> Z축(뒤에 Y나 X로 바꾸면 해당 축 기준이됨) 기준으로 회전시킬때 사용 (&넣을곳, 라디안값)

D3DXMatrixTranslation -> (&넣을곳, X, Y, Z)

 

거의 모든 함수는 단위행렬화 시킨 후 값을 적용 시키기 때문에 따로따로 해주어야 한다.

 

위 함수를 이용해 구한 나온 값들은 아래와 같은 순서로 곱해줘야한다 (행렬은 교환법칙이 성립하지 않기 때문)

스케일 * 회전(자전) * 이동 * 회전(공전) * 부모 순으로 곱해야 한다.

 

 

위와 같이 곱해서 구해준 값을

 

D3DXVec3TransformCoord

D3DXVec3TransformNormal

 

두가지로 나타낼 수 있는데

Coord는 W값이 1이다. 즉, 위치값을 적용하고

Normal은 W값이 0이므로, 위치값은 적용 시키지 않고 오직 크기나 방향 등만 적용이 된다.

 

728x90

'DirectX' 카테고리의 다른 글

모작일지(3) 현재 진행상황  (0) 2021.08.09
모작일지(2)  (0) 2021.08.09
모작 일지 (1)  (0) 2021.08.05
몬스터 -> 플레이어 추적 (내적 이용)  (0) 2021.07.06
회전행렬을 이용하여 사각형 회전  (0) 2021.07.03