ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1072)
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (183)
      • Unreal (69)
      • Unity (103)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (235)
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (55)
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (348)
      • C++ (167)
      • C# (90)
      • Java (9)
      • Python (33)
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (9)
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • C++
  • 프로그래머스
  • 유니티
  • 백준
  • 함수
  • 알고리즘
  • 티스토리챌린지
  • 포인터
  • 문자열
  • 그래픽스
  • 클래스
  • c#
  • string
  • Unity
  • 언리얼
  • SQL
  • C
  • 배열
  • 오블완
  • 파이썬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

[DX11 물방울책] 챕터 2 - 행렬
그래픽스/DirectX

[DX11 물방울책] 챕터 2 - 행렬

2022. 6. 23. 15:59

1. 행렬의 정의

그래픽스에선 행렬은 주로 트랜스폼 (이동,회전,크기) 그리고 벡터 위치를 프레임간 옮기고자 할 때 쓰여진다.

m * n 행렬은 네모 모양의 m열 n행의 2차원 배열이다. 각 숫자를 원소라고 불린다.

A = 4*4, B=3*2,U=1*3,V=4*1

각 행을 벡터로 취급할 때도 있다

 

2. 행렬간 곱셈

A 행렬의 행 개수와 B 행렬의 열 개수가 일치해야 연산이 가능하다.

연산이 불가능하다

3.  벡터와 행렬간 곱셈

4. 선형 결합

벡터 행렬 곱셈간 결과 uA는 선형 결합과 똑같다고 한다.

 

5. 결합 법칙

A(B + C) = AB + AC 그리고 (A + B)C = AC + BC

6. 전치 행렬

행렬의 행과 열을 교환해서 구한다.

전치 행렬의 속성은 다음과 같다.

7. 단위 행렬

좌>우측으로 대각선으로 가는 원소들 제외하고 모든 원소가 0인 행렬을 칭한다.

8. 행렬식

행렬식(determinant)은 행렬을 대표하는 값으로 n x n (n은 2 이상)의 정방행렬 AA에 대해 다음과 같이 정의됩니다. detA11이란 AA에서 1행과 1열을 제외한 행렬의 행렬식을 의미합니다. 2 x 2 행렬의 요소값이 a,b,c,da,b,c,d라고 할 때 행렬식은 ad−bcad−bc이다.

 

아래는 공식이다.

2x2

 
3x3
4x4

예시

9. 역행렬

그와 곱한 결과가 단위 행렬인 행렬을 갖는 행렬이다. 

 

역행렬이 맞는지 확인

10. 코드

#include <iostream>
#include <d3d11.h>
#include <d3dx11.h>
#include <xnamath.h> // 연산 코드를 사용하기 위해선 필수

using namespace std;

void PrintMatrix(XMMATRIX& _mtx, string _name)
{
    cout << _name << " 행렬 순회" << endl;

    for (int y = 0; y < 4; y++)
    {
        for (int x = 0; x < 4; x++)
        {
            cout << _mtx(y, x) << " ";
        }
        cout << endl;
    }
    cout << endl;
}

void PrintVector(XMVECTOR& _vec, string _name)
{
    cout << _name << " 벡터 순회" << endl;

    for (int i = 0; i < 4; i++)
        cout << _vec.m128_i32[i] << " ";

    cout << "\n\n";
}

int main()
{
    XMMATRIX mtxFrom = XMMatrixIdentity();
    XMMATRIX mtxTo = XMMatrixIdentity();
    XMVECTOR vector{ 0.2f,0.1f,0.3f,0.2f };

    PrintMatrix(mtxFrom, "첫번째 단위");

    // 첫번째 행렬 현재 위치 y : 2, x : 2
    mtxFrom._31 = 2.f; mtxFrom._32 = 2.f;

    // 두번째 행렬 현재 위치 y : 5, x : 5
    mtxTo._31 = 5.f; mtxTo._32 = 5.f;

    auto mtxMulti = XMMatrixMultiply(mtxFrom, mtxTo);
    PrintMatrix(mtxMulti, "곱셈");

    vector = XMVector3Transform(vector, mtxMulti);
    PrintVector(vector, "곱셈");

    XMVECTOR currentPos{ 0.5f, 1.f, 1.f };
    XMMATRIX mtxRot;

    XMMATRIX mtxTrans = XMMatrixTranslation(XMVectorGetX(currentPos), XMVectorGetY(currentPos), XMVectorGetZ(currentPos));
    PrintMatrix(mtxTrans, "이동");
    mtxRot = XMMatrixRotationAxis(currentPos, 10.f);
    PrintMatrix(mtxRot, "회전");
    
    auto mtxInversed = XMMatrixInverse(&vector, mtxMulti);
    PrintMatrix(mtxInversed, "역");

    auto mtxTransposed = XMMatrixTranspose(mtxMulti);
    PrintMatrix(mtxTransposed, "전치");

    auto mtxDet = XMMatrixDeterminant(mtxMulti);
    PrintVector(mtxDet, "행렬식");
    cout << endl;
}

저작자표시 (새창열림)

'그래픽스 > DirectX' 카테고리의 다른 글

[DX11 물방울책] 챕터 5 - 렌더링 파이프라인  (0) 2022.07.03
DirectX 11 프레임워크 환경 설정하는 방법  (0) 2022.06.30
[DX11 물방울책] 챕터 4 - Direct3D 초기화  (0) 2022.06.30
[DX11 물방울책] 챕터3 - 트랜스폼 (위치값,회전값,크기값)  (0) 2022.06.23
[DX11 물방울책] 챕터 1 - 벡터  (0) 2022.06.22
    '그래픽스/DirectX' 카테고리의 다른 글
    • DirectX 11 프레임워크 환경 설정하는 방법
    • [DX11 물방울책] 챕터 4 - Direct3D 초기화
    • [DX11 물방울책] 챕터3 - 트랜스폼 (위치값,회전값,크기값)
    • [DX11 물방울책] 챕터 1 - 벡터
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바