1학기 결산-게임엔진프로그래밍활용

이미지
1. 브레젠험 직선 알고리즘 컴퓨터에서 계산이 느린 실수 연산을 사용하지 않고 직선을 그리기 위해 만들이진 알고리즘입니다. 평면을 아래와 같이 8분 면으로 나누어 직선을 그립니다. 링크:  https://sulinep.blogspot.com/2020/05/bresenhams-line-algorithm.html 2. 엔진 기초 수학 여기서는 본격적으로 구현에 들어가기 전 기초 수학 지식을 쌓았습니다.  수학에서의 체는 대수적 구조의 하나로 덧셈, 뺄셈, 곱셈, 나눗셈의 사칙연산을 집합 안에서 소화할 수 있는 집합을 의미합니다. 체를 이루기 위한 조건과 체라는 개념을 알아보았습니다. 처음에 체 라는 개념이 뭔가 머릿속에서 애매했는데 이후 갈로이스 체에 대해 배운 후 조금 더 명확해졌습니다. 스칼라 는 벡터를 정의하기 위한 필수 요소이고 크기만 있고 방향이 없는 성분이다. 벡터는 크기와 방향을 포함하는 표현 도구이다. 겨기서 벡터의 기본 연산자들을 알아보았습니다. 선형성 은 직선처럼 똑바른 도형 또는 그와 비슷한 성질을 가진 대상이라는 뜻으로 함수의 경우 함수가 진행하는 모양이 직선이라는 의미로 사용된다. 선형성을 만족하려면 두 가지 조건을 만족해야 하는데 균질성과 첨가성이다. homogeneity (균질성):   additivity (첨가성): 선형이라고 부르는 수식들은 중첩의 원리 가 적용된다는 특징이 있다. 이때 행렬과 선형 변환의 관계에 대하여도 알아보았었는데 선형 변환과 행렬은 1:1 대응된다. 기저 란 어떤 벡터 공간을 선형 생성하는 선형 독립인 벡터들이다. 각각의 원소들이 다시 벡터 공간을 생성할 수 있어야하고 일차 독립이어야 한다. 표준 기저 는 많은 기저들 중 성분 1개만이 1이고 나머지 성분이 모두 0인 표준 적인 벡터이다. 여기서 벡터 공간 R의 기저를 구성하는 원소의 개수가 해당 공간의 차원 이다. 행렬 은 열기반 행렬과 행기반 행렬 중 어떤 걸 사용하느냐에 따라 계산 방식이 달라진다. 여기서는 벡터의 크기, 회전, 밀기, 선형 변환에 대하여

[DirectX12] - 시작하기에 앞서

앞으로 작성해 나갈 이 DirectX 12 에피소드는 필자가 DirectX 12를 공부하며 작성하는 글입니다.

강좌 글은 아니지만 참고하실 분들은 참고하셔도 괜찮고

틀린 점이 있다면 얼마든지 댓글로 조언 주시면 감사하겠습니다.

1. 기본 지식
 1) Direct3D 12란?
   Direct3D는 응용 프로그램에서 GPU를 제어하고 프로그래밍 하는데 쓰이는 저수준 그래픽 API입니다.
   응용프로그램과 그래픽 하드웨어 사이에서 Direct3D의 명령들을 시스템의
   GPU가 이용하는 고유한 기계어 명령들로 변역해줍니다.

   제가 처음 시작할 때 했갈리던게 있었습니다.
   혹시 저 같이 생각하는 분이 계실까봐 작성합니다.
   DirectX는 WinAPI를 기반으로 자체적으로 화면을 띄어주는 것이 아닌
   WinAPI 같은 프로그램의 출력 창 위에 얹어서 사용한다고 생각하는게 개인적으로 편했습니다.
   ※DirectX와 WinAPI는 전혀 다릅니다. 
 

 2) COM(Component Object Model)
   COM은 DirectX의 프로그래밍 언어의 독립성과 하위 호완성을 가능하게 합니다.
   본 목적은 COM이 아닌 Direct3D 12이기 때문에
   COM에 대하여 자세히 알고 싶다면 MSDN을 참고하기 바랍니다.
   https://docs.microsoft.com/en-us/windows/win32/com/component-object-model--com--portal

   여기서는 Direct3D COM 객체의 수명 관리를 돕기위해 WRL(Windows Runtime Library)의
   ComPtr 클래스의 주요 내용만 짚고 넘어갈 것 입니다.
   ComPtr은 일종의 스마트 포인터로 ComPtr 인스턴스가 범위를 벗어나면
   COM 객체에 대하여 자동으로 Release를 호출해줍니다.
 
   아래는 주로 사용할 ComPtr 클래스의 매서드입니다.

   (1) Get: COM 인터페이스를 가리키는 포인터를 돌려준다.

    ComPtr<IDXGIAdapter> pWarpAdapter;
    .....
    D3D12CreateDevice(pWarpAdapter.get(), D3D_FEATURE_.......

   (2) GetAddressOf: COM 인터페이스를 가리키는 포인터의 주소를 돌려준다.

    g_device->CreateCommandList( ........
IID_PPV_ARGS(mCommandList.GetAddressOf())));

   (3) Reset: ComPtr 인스턴스를 nullprt로 설정하고 COM인터페이스의 참조횟수를 감소 시킨다.

   (4) As: COM 인터페이스를 나타네는 개체를 반환한다.

   ComPtr의 더 자세한 정보는...
   https://docs.microsoft.com/ko-kr/cpp/cppcx/wrl/comptr-class?view=vs-2019

 
   읽어 주셔서 감사합니다.
   다음에는 교환 사슬(SwapChain)과 깊이 버퍼(Depth Berffer)에 대하여 알아보겠습니다.

댓글

이 블로그의 인기 게시물

[알고리즘] 코헨 서더랜드 알고리즘(Cohen–Sutherland algorithm)

[알고리즘] 브레젠험 직선 알고리즘 (Bresenham's line algorithm)

오일러 각, 로드리게스 회전 공식, 평면의 방정식